浏览代码

知识库

田爽 1 年之前
父节点
当前提交
68e6a337ba

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

@@ -326,7 +326,7 @@ namespace Hotline.Api.Controllers
 		/// <param name="pagedDto"></param>
 		/// <returns></returns>
 		[Permission(EPermission.KnowledgeAllList)]
-		[HttpGet()]
+		[HttpGet]
 		public async Task<PagedDto<KnowledgeDataDto>> GetKnowList([FromQuery] KnowPagedListDto pagedDto)
 		{
 			return await _knowApplication.GetKnowList(pagedDto);
@@ -687,7 +687,6 @@ namespace Hotline.Api.Controllers
 		/// </summary>
 		/// <param name="id"></param>
 		/// <returns></returns>
-		[Permission(EPermission.KnowledgeWordEntity)]
 		[HttpGet("knowledge_word/{id}")]
 		public async Task<KnowledgeWord> WordEntity(string id)
 		{

+ 0 - 1
src/Hotline.Api/Controllers/OrderController.cs

@@ -2042,7 +2042,6 @@ public class OrderController : BaseController
 	/// </summary>
 	/// <param name="id"></param>
 	/// <returns></returns>
-	[Permission(EPermission.OrderWordEntity)]
 	[HttpGet("order_word/{id}")]
 	public async Task<OrderWord> OrderWordEntity(string id)
 	{

+ 98 - 144
src/Hotline.Application/Knowledge/KnowApplication.cs

@@ -14,156 +14,110 @@ using XF.Domain.Repository;
 
 namespace Hotline.Application.Knowledge
 {
-    public class KnowApplication : IKnowApplication, IScopeDependency
-    {
-        private readonly IKnowledgeRepository _knowledgeRepository;
-        private readonly IRepository<KnowledgeApply> _knowledgeApplyRepository;
-        private readonly ISessionContext _sessionContext;
-        private readonly IMapper _mapper;
+	public class KnowApplication : IKnowApplication, IScopeDependency
+	{
+		private readonly IKnowledgeRepository _knowledgeRepository;
+		private readonly IRepository<KnowledgeApply> _knowledgeApplyRepository;
+		private readonly ISessionContext _sessionContext;
+		private readonly IMapper _mapper;
 
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="knowledgeRepository"></param>
-        /// <param name="knowledgeApplyRepository"></param>
-        /// <param name="sessionContext"></param>
-        /// <param name="knowledgeDomainService"></param>
-        /// <param name="mapper"></param>
-        public KnowApplication(IKnowledgeRepository knowledgeRepository, IRepository<KnowledgeApply> knowledgeApplyRepository, ISessionContext sessionContext, IMapper mapper)
-        {
-            _knowledgeRepository = knowledgeRepository;
-            _knowledgeApplyRepository = knowledgeApplyRepository;
-            _sessionContext = sessionContext;
-            _mapper = mapper;
-        }
+		/// <summary>
+		/// 
+		/// </summary>
+		/// <param name="knowledgeRepository"></param>
+		/// <param name="knowledgeApplyRepository"></param>
+		/// <param name="sessionContext"></param>
+		/// <param name="knowledgeDomainService"></param>
+		/// <param name="mapper"></param>
+		public KnowApplication(IKnowledgeRepository knowledgeRepository, IRepository<KnowledgeApply> knowledgeApplyRepository, ISessionContext sessionContext, IMapper mapper)
+		{
+			_knowledgeRepository = knowledgeRepository;
+			_knowledgeApplyRepository = knowledgeApplyRepository;
+			_sessionContext = sessionContext;
+			_mapper = mapper;
+		}
 
-        /// <summary>
-        /// 知识库查询
-        /// </summary>
-        /// <param name="pagedDto"></param>
-        /// <returns></returns>
-        public async Task<PagedDto<KnowledgeDataDto>> GetKnowList(KnowPagedListDto pagedDto)
-        {
-            RefAsync<int> total = 0;
-            var temp = await _knowledgeRepository
-               .Queryable()
-               .InnerJoin<User>((o, cus) => o.CreatorId == cus.Id)
-               .InnerJoin<SystemOrganize>((o, cus, sys) => o.CreatorOrgId == sys.Id)
-               .InnerJoin<KnowledgeType>((o, cus, sys, kn) => o.KnowledgeTypeId == kn.Id)
-               .LeftJoin<Hotspot>((o, cus, sys, kn, hst) => o.HotspotId == hst.Id)
-               .Where((o, cus, sys, kn, hst) => o.IsDeleted == false && o.Status != EKnowledgeStatus.Revert && o.Status != EKnowledgeStatus.Drafts)
-               //关键词查询标题、创建人、创建部门
-               .WhereIF(!string.IsNullOrEmpty(pagedDto.Keyword), (o, cus, sys, kn, hst) => o.Title.Contains(pagedDto.Keyword!) || cus.Name.Contains(pagedDto.Keyword!) || sys.Name.Contains(pagedDto.Keyword!))
-               //分类
-               .WhereIF(!string.IsNullOrEmpty(pagedDto.KnowledgeTypeId), (o, cus, sys, kn, hst) => o.KnowledgeTypeId == pagedDto.KnowledgeTypeId)
-               //热点
-               .WhereIF(!string.IsNullOrEmpty(pagedDto.HotspotId), (o, cus, sys, kn, hst) => o.HotspotId == pagedDto.HotspotId)
-               //部门
-               .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateOrgId), (o, cus, sys, kn, hst) => o.CreatorOrgId == pagedDto.CreateOrgId)
-              //状态
-              // .WhereIF(pagedDto.Status.HasValue, (o, cus, sys, kn, hst) => o.Status == pagedDto.Status)
-              //创建时间
-              .WhereIF(pagedDto.CreationStartTime.HasValue, (o, cus, sys, kn, hst) => o.CreationTime >= pagedDto.CreationStartTime)
-              .WhereIF(pagedDto.CreationEndTime.HasValue, (o, cus, sys, kn, hst) => o.CreationTime <= pagedDto.CreationEndTime)
-               //上架时间
-               .WhereIF(pagedDto.StartOnShelfTime.HasValue, (o, cus, sys, kn, hst) => o.OnShelfTime >= pagedDto.StartOnShelfTime)
-              .WhereIF(pagedDto.EndOnShelfTime.HasValue, (o, cus, sys, kn, hst) => o.OnShelfTime <= pagedDto.EndOnShelfTime)
-               //下架时间
-               .WhereIF(pagedDto.StartOffShelfTime.HasValue, (o, cus, sys, kn, hst) => o.OffShelfTime >= pagedDto.StartOffShelfTime)
-              .WhereIF(pagedDto.EndOffShelfTime.HasValue, (o, cus, sys, kn, hst) => o.OffShelfTime <= pagedDto.EndOffShelfTime)
-               //重新构建数据
-               .Select((o, cus, sys, kn, hst) => new
-               {
-                   index = SqlFunc.RowNumber($"{o.Version} desc ", $"{o.Code}"),
-                   CreationName = cus.Name,
-                   CreationBMName = sys.Name,
-                   KnowledgeTypeName = kn.SpliceName,
-                   HotspotName = hst.HotSpotFullName,
-                   o.Id,
-                   o.Code,
-                   o.Title,
-                   o.Version,
-                   o.KnowledgeTypeId,
-                   o.IsDeleted,
-                   o.HotspotId,
-                   o.OnShelfTime,
-                   o.CreationTime,
-                   o.PageView,
-                   o.Status,
-                   o.OffShelfTime,
-                   o.LastModificationTime,
-                   o.WorkflowId,
-                   o.ExpiredTime,
-                   CreatorOrgId = o.CreatorOrgId,
+		/// <summary>
+		/// 知识库查询
+		/// </summary>
+		/// <param name="pagedDto"></param>
+		/// <returns></returns>
+		public async Task<PagedDto<KnowledgeDataDto>> GetKnowList(KnowPagedListDto pagedDto)
+		{
+			RefAsync<int> total = 0;
+			var temp = await _knowledgeRepository
+			   .Queryable()
+			   .Includes(x => x.User)
+			   .Includes(x => x.SystemOrganize)
+			   .Includes(x => x.KnowledgeType)
+			   .Includes(x => x.HotspotType)
+			   .Where(o => o.IsDeleted == false)
+			   .WhereIF(!string.IsNullOrEmpty(pagedDto.Title), x => x.Title.Contains(pagedDto.Title!))
+			   .WhereIF(pagedDto.Status.HasValue, x => x.Status == pagedDto.Status)
+			   .WhereIF(pagedDto.IsPublic.HasValue, x => x.IsPublic == pagedDto.IsPublic)
+			   .WhereIF(!string.IsNullOrEmpty(pagedDto.Summary), x => x.Summary != null && x.Summary.Contains(pagedDto.Summary!))
+			   .OrderByDescending(d => d.CreationTime)
+			  //转分页数据
+			  .ToPageListAsync(pagedDto.PageIndex, pagedDto.PageSize, total);
+			//返回数据
+			return new PagedDto<KnowledgeDataDto>(total.Value, _mapper.Map<IReadOnlyList<KnowledgeDataDto>>(temp));
+		}
 
-               })
-           //将结果合并成一个表
-           .MergeTable()
-           //取第一条数据
-           .Where(d => d.index == 1)
-            .WhereIF(pagedDto.Status.HasValue, o => o.Status == pagedDto.Status)
-           .OrderByDescending(d => d.CreationTime)
-          //转分页数据
-          .ToPageListAsync(pagedDto.PageIndex, pagedDto.PageSize, total);
-            //返回数据
-            return new PagedDto<KnowledgeDataDto>(total.Value, _mapper.Map<IReadOnlyList<KnowledgeDataDto>>(temp));
-        }
+		/// <summary>
+		/// 知识申请查询
+		/// </summary>
+		/// <param name="pagedDto"></param>
+		/// <param name="cancellationToken"></param>
+		/// <returns></returns>
+		public async Task<PagedDto<KnowledgeApplyHandlePageDto>> GetApplyList(KnowledgeApplyPagedDto pagedDto, CancellationToken cancellationToken)
+		{
+			var (total, items) = await _knowledgeApplyRepository
+			   .Queryable()
+			   .Includes(it => it.User)
+			   .Includes(it => it.SystemOrganize)
+			   .Where(d => d.CreatorId == _sessionContext.RequiredUserId)
+			   .WhereIF(pagedDto.Status.HasValue, d => d.Status == pagedDto.Status)
+			   .WhereIF(pagedDto.ApplyType.HasValue, d => d.KnowledgeApplyType == pagedDto.ApplyType)
+			   .WhereIF(!string.IsNullOrEmpty(pagedDto.IsOvertime) && pagedDto.IsOvertime == "0", d => d.IsOvertime == true)
+			   .WhereIF(!string.IsNullOrEmpty(pagedDto.IsOvertime) && pagedDto.IsOvertime == "1", d => d.IsOvertime == false)
+			   .WhereIF(pagedDto.StartTime.HasValue, d => d.CreationTime >= pagedDto.StartTime)
+			   .WhereIF(pagedDto.EndTime.HasValue, d => d.CreationTime <= pagedDto.EndTime)
+			   .OrderByDescending(p => p.CreationTime)
+			   .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, cancellationToken);
 
-        /// <summary>
-        /// 知识申请查询
-        /// </summary>
-        /// <param name="pagedDto"></param>
-        /// <param name="cancellationToken"></param>
-        /// <returns></returns>
-        public async Task<PagedDto<KnowledgeApplyHandlePageDto>> GetApplyList(KnowledgeApplyPagedDto pagedDto, CancellationToken cancellationToken)
-        {
-            var (total, items) = await _knowledgeApplyRepository
-               .Queryable()
-               .Includes(it => it.User)
-               .Includes(it => it.SystemOrganize)
-               .Where(d => d.CreatorId == _sessionContext.RequiredUserId)
-               .WhereIF(pagedDto.Status.HasValue, d => d.Status == pagedDto.Status)
-               .WhereIF(pagedDto.ApplyType.HasValue, d => d.KnowledgeApplyType == pagedDto.ApplyType)
-               .WhereIF(!string.IsNullOrEmpty(pagedDto.IsOvertime) && pagedDto.IsOvertime == "0", d => d.IsOvertime == true)
-               .WhereIF(!string.IsNullOrEmpty(pagedDto.IsOvertime) && pagedDto.IsOvertime == "1", d => d.IsOvertime == false)
-               .WhereIF(pagedDto.StartTime.HasValue, d => d.CreationTime >= pagedDto.StartTime)
-               .WhereIF(pagedDto.EndTime.HasValue, d => d.CreationTime <= pagedDto.EndTime)
-               .OrderByDescending(p => p.CreationTime)
-               .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, cancellationToken);
+			return new PagedDto<KnowledgeApplyHandlePageDto>(total, _mapper.Map<IReadOnlyList<KnowledgeApplyHandlePageDto>>(items));
+		}
 
-            return new PagedDto<KnowledgeApplyHandlePageDto>(total, _mapper.Map<IReadOnlyList<KnowledgeApplyHandlePageDto>>(items));
-        }
+		/// <summary>
+		/// 申请处理查询
+		/// </summary>
+		/// <param name="pagedDto"></param>
+		/// <param name="cancellationToken"></param>
+		/// <returns></returns>
+		public async Task<PagedDto<KnowledgeApplyHandlePageDto>> GetApplyHandleList(KnowledgeHandlePagedDto pagedDto, CancellationToken cancellationToken)
+		{
+			var (total, items) = await _knowledgeApplyRepository
+				 .Queryable()
+				 .Includes(it => it.User)
+				 .Includes(it => it.SystemOrganize)
+				 .Where(p => p.DepartmentId == _sessionContext.RequiredOrgId)
+				 .WhereIF(pagedDto.Status.HasValue, d => d.Status == pagedDto.Status)
+				 .WhereIF(!string.IsNullOrEmpty(pagedDto.Keyword), d => d.User.Name.Contains(pagedDto.Keyword!) || d.SystemOrganize.Name.Contains(pagedDto.Keyword!))
+				 .WhereIF(pagedDto.ApplyType.HasValue, d => d.KnowledgeApplyType == pagedDto.ApplyType)
+				 .WhereIF(!string.IsNullOrEmpty(pagedDto.IsOvertime) && pagedDto.IsOvertime == "0", d => d.IsOvertime == true)
+				 .WhereIF(!string.IsNullOrEmpty(pagedDto.IsOvertime) && pagedDto.IsOvertime == "1", d => d.IsOvertime == false)
 
-        /// <summary>
-        /// 申请处理查询
-        /// </summary>
-        /// <param name="pagedDto"></param>
-        /// <param name="cancellationToken"></param>
-        /// <returns></returns>
-        public async Task<PagedDto<KnowledgeApplyHandlePageDto>> GetApplyHandleList(KnowledgeHandlePagedDto pagedDto, CancellationToken cancellationToken)
-        {
-            var (total, items) = await _knowledgeApplyRepository
-                 .Queryable()
-                 .Includes(it => it.User)
-                 .Includes(it => it.SystemOrganize)
-                 .Where(p => p.DepartmentId == _sessionContext.RequiredOrgId)
-                 .WhereIF(pagedDto.Status.HasValue, d => d.Status == pagedDto.Status)
-                 .WhereIF(!string.IsNullOrEmpty(pagedDto.Keyword), d => d.User.Name.Contains(pagedDto.Keyword!) || d.SystemOrganize.Name.Contains(pagedDto.Keyword!))
-                 .WhereIF(pagedDto.ApplyType.HasValue, d => d.KnowledgeApplyType == pagedDto.ApplyType)
-                 .WhereIF(!string.IsNullOrEmpty(pagedDto.IsOvertime) && pagedDto.IsOvertime == "0", d => d.IsOvertime == true)
-                 .WhereIF(!string.IsNullOrEmpty(pagedDto.IsOvertime) && pagedDto.IsOvertime == "1", d => d.IsOvertime == false)
+				 .WhereIF(pagedDto.StartTime.HasValue && pagedDto.Status != EKnowledgeApplyStatus.Failed && pagedDto.Status != EKnowledgeApplyStatus.Succeed, d => d.CreationTime >= pagedDto.StartTime)
+				 .WhereIF(pagedDto.EndTime.HasValue && pagedDto.Status != EKnowledgeApplyStatus.Failed && pagedDto.Status != EKnowledgeApplyStatus.Succeed, d => d.CreationTime <= pagedDto.EndTime)
+				 .WhereIF(pagedDto.StartTime.HasValue && pagedDto.Status == EKnowledgeApplyStatus.Failed, d => d.ReturnTime >= pagedDto.StartTime)
+				 .WhereIF(pagedDto.EndTime.HasValue && pagedDto.Status == EKnowledgeApplyStatus.Failed, d => d.ReturnTime <= pagedDto.EndTime)
+				  .WhereIF(pagedDto.StartTime.HasValue && pagedDto.Status == EKnowledgeApplyStatus.Succeed, d => d.HandleTime >= pagedDto.StartTime)
+				 .WhereIF(pagedDto.EndTime.HasValue && pagedDto.Status == EKnowledgeApplyStatus.Succeed, d => d.HandleTime <= pagedDto.EndTime)
 
-                 .WhereIF(pagedDto.StartTime.HasValue && pagedDto.Status != EKnowledgeApplyStatus.Failed && pagedDto.Status != EKnowledgeApplyStatus.Succeed, d => d.CreationTime >= pagedDto.StartTime)
-                 .WhereIF(pagedDto.EndTime.HasValue && pagedDto.Status != EKnowledgeApplyStatus.Failed && pagedDto.Status != EKnowledgeApplyStatus.Succeed, d => d.CreationTime <= pagedDto.EndTime)
-                 .WhereIF(pagedDto.StartTime.HasValue && pagedDto.Status == EKnowledgeApplyStatus.Failed, d => d.ReturnTime >= pagedDto.StartTime)
-                 .WhereIF(pagedDto.EndTime.HasValue && pagedDto.Status == EKnowledgeApplyStatus.Failed, d => d.ReturnTime <= pagedDto.EndTime)
-                  .WhereIF(pagedDto.StartTime.HasValue && pagedDto.Status == EKnowledgeApplyStatus.Succeed, d => d.HandleTime >= pagedDto.StartTime)
-                 .WhereIF(pagedDto.EndTime.HasValue && pagedDto.Status == EKnowledgeApplyStatus.Succeed, d => d.HandleTime <= pagedDto.EndTime)
+				 .OrderByDescending(p => p.CreationTime)
+				 .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, cancellationToken);
 
-                 .OrderByDescending(p => p.CreationTime)
-                 .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, cancellationToken);
-
-            return new PagedDto<KnowledgeApplyHandlePageDto>(total, _mapper.Map<IReadOnlyList<KnowledgeApplyHandlePageDto>>(items));
-        }
-    }
+			return new PagedDto<KnowledgeApplyHandlePageDto>(total, _mapper.Map<IReadOnlyList<KnowledgeApplyHandlePageDto>>(items));
+		}
+	}
 }

+ 14 - 8
src/Hotline.Share/Dtos/Knowledge/KnowledgeDataDto.cs

@@ -1,4 +1,5 @@
-using Hotline.Share.Enums.KnowledgeBase;
+using Hotline.Share.Dtos.Hotspots;
+using Hotline.Share.Enums.KnowledgeBase;
 using XF.Utility.EnumExtensions;
 
 namespace Hotline.Share.Dtos.Knowledge
@@ -15,20 +16,25 @@ namespace Hotline.Share.Dtos.Knowledge
         /// </summary>
         public string Title { get; set; }
 
+        public KnowledgeTypeDto KnowledgeType { get; set; }
+
         /// <summary>
         /// 知识分类
         /// </summary>
-        public string KnowledgeTypeName { get; set; }
+        public string KnowledgeTypeName  => KnowledgeType !=null ? KnowledgeType.SpliceName : string.Empty;
+
+
+        public HotspotDto Hotspot {  get; set; }
 
         /// <summary>
         /// 热点
         /// </summary>
-        public string HotspotName { get; set; }
+        public string HotspotName => Hotspot != null ? Hotspot.HotSpotFullName : string.Empty;
 
-        /// <summary>
-        /// 申请人
-        /// </summary>
-        public string CreationName { get; set; }
+		/// <summary>
+		/// 申请人
+		/// </summary>
+		public string CreatorName { get; set; }
 
         /// <summary>
         /// 浏览量
@@ -59,7 +65,7 @@ namespace Hotline.Share.Dtos.Knowledge
         /// <summary>
         /// 申请部门
         /// </summary>
-        public string CreationBMName { get; set; }
+        public string CreatorOrgName { get; set; }
 
         /// <summary>
         /// 申请部门ID

+ 26 - 2
src/Hotline.Share/Dtos/Knowledge/KnowledgePagedDto.cs

@@ -48,6 +48,30 @@ namespace Hotline.Share.Dtos.Knowledge
     /// <param name="EndOnShelfTime">上架时间-结束</param>
     /// <param name="StartOffShelfTime">下架时间-开始</param>
     /// <param name="EndOffShelfTime">下架时间-结束</param>
-    public record KnowPagedListDto(string? CreateOrgId, string? HotspotId, string? KnowledgeTypeId, EKnowledgeStatus? Status, DateTime? CreationStartTime, DateTime? CreationEndTime,
-      DateTime? StartOnShelfTime, DateTime? EndOnShelfTime, DateTime? StartOffShelfTime, DateTime? EndOffShelfTime) : PagedKeywordRequest;
+    //public record KnowPagedListDto(string? CreateOrgId, string? HotspotId, string? KnowledgeTypeId, EKnowledgeStatus? Status, DateTime? CreationStartTime, DateTime? CreationEndTime,
+    //  DateTime? StartOnShelfTime, DateTime? EndOnShelfTime, DateTime? StartOffShelfTime, DateTime? EndOffShelfTime) : PagedKeywordRequest;
+
+    public record KnowPagedListDto : PagedKeywordRequest 
+    {
+        /// <summary>
+        /// 标题
+        /// </summary>
+        public string? Title { get; set; }  
+
+        /// <summary>
+        /// 状态
+        /// </summary>
+        public EKnowledgeStatus? Status { get; set; }    
+
+        /// <summary>
+        /// 是否公开
+        /// </summary>
+        public bool? IsPublic { get; set; }
+
+		/// <summary>
+		/// 摘要
+		/// </summary>
+		public string? Summary { get; set; }
+
+	}
 }

+ 10 - 2
src/Hotline.Share/Dtos/Knowledge/KnowledgeTypeDto.cs

@@ -43,9 +43,17 @@
         public string Id { get; set; }
 
         /// <summary>
-        /// 类型名称
+        /// 类型名称拼接(所有父级分类名称)
+        /// <example>
+        /// A类型/A.1类型/A.1.1类型
+        /// </example>
         /// </summary>
-        public string Name { get; set; }
+        public string SpliceName { get; set; }
+
+		/// <summary>
+		/// 类型名称
+		/// </summary>
+		public string Name { get; set; }
 
         /// <summary>
         /// 是否启用

+ 81 - 58
src/Hotline/KnowledgeBase/Knowledge.cs

@@ -14,83 +14,94 @@ namespace Hotline.KnowledgeBase;
 [Description("知识库文档")]
 public class Knowledge : WorkflowEntity//   WorkflowEntity  FullStateEntity
 {
-    /// <summary>
-    /// 知识分类
-    /// </summary>
-    public string KnowledgeTypeId { get; set; }
-
-    /// <summary>
-    /// 热点
-    /// </summary>
-    public string HotspotId { get; set; }
-
-    /// <summary>
-    /// 知识编号
-    /// </summary>
-    public string Code { get; set; }
-
-    /// <summary>
-    /// 标题
-    /// </summary>
-    public string Title { get; set; }
+	/// <summary>
+	/// 知识分类
+	/// </summary>
+	[SugarColumn(ColumnDescription = "知识分类")]
+	public string KnowledgeTypeId { get; set; }
+
+	/// <summary>
+	/// 热点
+	/// </summary>
+	[SugarColumn(ColumnDescription = "热点")]
+	public string HotspotId { get; set; }
+
+	/// <summary>
+	/// 知识编号
+	/// </summary>
+	[SugarColumn(ColumnDescription = "知识编号")]
+	public string Code { get; set; }
+
+	/// <summary>
+	/// 标题
+	/// </summary>
+	[SugarColumn(ColumnDescription = "标题")]
+	public string Title { get; set; }
 
     /// <summary>
     /// 摘要
     /// </summary>
-    [SugarColumn(ColumnDataType = "varchar(1000)", IsNullable = true)]
-    public string Summary { get; set; }
+    [SugarColumn(ColumnDataType = "varchar(1000)", IsNullable = true, ColumnDescription = "摘要")]
+    public string? Summary { get; set; }
 
     /// <summary>
     /// 内容
     /// </summary>
-    [SugarColumn(ColumnDataType = "text")]
+    [SugarColumn(ColumnDataType = "text", ColumnDescription = "内容")]
     public string Content { get; set; }
 
-    /// <summary>
-    /// 浏览量
-    /// </summary>
-    public int PageView { get; set; } = 0;
-
-    /// <summary>
-    /// 是否公开
-    /// </summary>
-    public bool IsPublic { get; set; }
-
-    /// <summary>
-    /// 文档状态
-    /// </summary>
-    public EKnowledgeStatus Status { get; set; }
-
-    /// <summary>
-    /// 上架时间
-    /// </summary>
-    public DateTime? OnShelfTime { get; set; }
-
-    /// <summary>
-    /// 下架时间
-    /// </summary>
-    public DateTime? OffShelfTime { get; set; }
-
-    /// <summary>
-    /// 过期时间
-    /// </summary>
-    public DateTime? ExpiredTime { get; set; }
+	/// <summary>
+	/// 浏览量
+	/// </summary>
+	[SugarColumn(ColumnDescription = "浏览量")]
+	public int PageView { get; set; } = 0;
+
+	/// <summary>
+	/// 是否公开
+	/// </summary>
+	[SugarColumn(ColumnDescription = "是否公开")]
+	public bool IsPublic { get; set; }
+
+	/// <summary>
+	/// 文档状态
+	/// </summary>
+	[SugarColumn(ColumnDescription = "文档状态")]
+	public EKnowledgeStatus Status { get; set; }
+
+	/// <summary>
+	/// 上架时间
+	/// </summary>
+	[SugarColumn(ColumnDescription = "上架时间")]
+	public DateTime? OnShelfTime { get; set; }
+
+	/// <summary>
+	/// 下架时间
+	/// </summary>
+	[SugarColumn(ColumnDescription = "下架时间")]
+	public DateTime? OffShelfTime { get; set; }
+
+	/// <summary>
+	/// 过期时间
+	/// </summary>
+	[SugarColumn(ColumnDescription = "过期时间")]
+	public DateTime? ExpiredTime { get; set; }
 
     /// <summary>
     /// 关键词
     /// </summary>
-    [SugarColumn(IsNullable = true)]
+    [SugarColumn(IsNullable = true, ColumnDescription = "关键词")]
     public string Keywords { get; set; }
 
-    /// <summary>
-    /// 版本号
-    /// </summary>
-    public int Version { get; set; } = 0;
+	/// <summary>
+	/// 版本号
+	/// </summary>
+	[SugarColumn(ColumnDescription = "版本号")]
+	public int Version { get; set; } = 0;
 
     /// <summary>
     /// 外部数据(为前端提供级联功能)
     /// </summary>
-    [SugarColumn(IsNullable = true)]
+    [SugarColumn(IsNullable = true, ColumnDescription = "外部数据(为前端提供级联功能)")]
     public string? HotspotExternal { get; set; }
 
     /// <summary>
@@ -102,7 +113,7 @@ public class Knowledge : WorkflowEntity//   WorkflowEntity  FullStateEntity
     /// <summary>
     /// 关联知识
     /// </summary>
-    [SugarColumn(ColumnDataType = "json", IsJson = true,IsNullable =true)]
+    [SugarColumn(ColumnDataType = "json", ColumnDescription = "关联知识", IsJson = true,IsNullable =true)]
     public List<string> Knowledges { get; set; }
 
     /// <summary>
@@ -128,4 +139,16 @@ public class Knowledge : WorkflowEntity//   WorkflowEntity  FullStateEntity
     /// </summary>
     [Navigate(NavigateType.OneToOne, nameof(HotspotId))]//一对一 
     public Hotspot HotspotType { get; set; }
+
+	/// <summary>
+	/// 知识归属
+	/// </summary>
+	[SugarColumn(ColumnDescription = "知识归属")]
+	public string? Attribution { get; set; }
+
+	/// <summary>
+	/// 搜索量
+	/// </summary>
+	[SugarColumn(ColumnDescription = "搜索量")]
+	public int SearchNum { get; set; } = 0;
 }

+ 0 - 10
src/Hotline/Permissions/EPermission.cs

@@ -859,11 +859,6 @@ namespace Hotline.Permissions
 		[Display(GroupName = "OrderWord", Name = "修改知识库词库", Description = "修改知识库词库")]
 		UpdateKnowledgeWord = 400603,
 
-		/// <summary>
-		/// 知识库词库实体
-		/// </summary>
-		[Display(GroupName = "OrderWord", Name = "知识库词库实体", Description = "知识库词库实体")]
-		KnowledgeWordEntity = 400605,
 		#endregion
 
 		#region 知识纠错
@@ -1430,11 +1425,6 @@ namespace Hotline.Permissions
 		[Display(GroupName = "OrderWord", Name = "修改工单词库", Description = "修改工单词库")]
 		UpdateOrderWord = 501503,
 
-		/// <summary>
-		/// 工单词库实体
-		/// </summary>
-		[Display(GroupName = "OrderWord", Name = "工单词库实体", Description = "工单词库实体")]
-		OrderWordEntity = 501505,
 		#endregion
 
 		#endregion