Pārlūkot izejas kodu

修改知识库库部分功能

TANG JIANG 2 gadi atpakaļ
vecāks
revīzija
0800d9cf8f

+ 10 - 11
src/Hotline.Api/Controllers/KnowledgeApplyController.cs

@@ -30,8 +30,7 @@ namespace Hotline.Api.Controllers
         /// <param name="sessionContext"></param>
         /// <param name="userRepository"></param>
         /// <param name="mapper"></param>
-        public KnowledgeApplyController(IKnowledgeRepository knowledgeRepository, IKnowledgeApplyRepository knowledgeApplyRepository, ISessionContext sessionContext,
-      IUserRepository userRepository, IMapper mapper)
+        public KnowledgeApplyController(IKnowledgeRepository knowledgeRepository, IKnowledgeApplyRepository knowledgeApplyRepository, ISessionContext sessionContext, IUserRepository userRepository, IMapper mapper)
         {
             _knowledgeRepository = knowledgeRepository;
             _knowledgeApplyRepository = knowledgeApplyRepository;
@@ -151,7 +150,7 @@ namespace Hotline.Api.Controllers
                   .Queryable()
                   .Includes(it => it.User)
                   .Includes(it => it.SystemOrganize)
-                  .Where(d => d.CreateUserId == _sessionContext.UserId)
+                  .Where(d => d.CreatorId == _sessionContext.RequiredUserId)
                   .WhereIF(!string.IsNullOrEmpty(dto.ApplyType), d => d.KnowledgeApplyType.ToString() == dto.ApplyType)
                   .WhereIF(!string.IsNullOrEmpty(dto.IsOvertime) && dto.IsOvertime == "0", d => d.ExpiredTime < DateTime.Now)
                   .WhereIF(!string.IsNullOrEmpty(dto.IsOvertime) && dto.IsOvertime == "1", d => d.ExpiredTime >= DateTime.Now)
@@ -175,7 +174,7 @@ namespace Hotline.Api.Controllers
                .Queryable()
                .Includes(it => it.User)
                .Includes(it => it.SystemOrganize)
-               .Where(d => d.CreateUserId == _sessionContext.UserId && d.Status == EKnowledgeApplyStatus.Handling)
+               .Where(d => d.CreatorId == _sessionContext.RequiredUserId && d.Status == EKnowledgeApplyStatus.Handling)
                .WhereIF(!string.IsNullOrEmpty(dto.ApplyType), d => d.KnowledgeApplyType.ToString() == dto.ApplyType)
                .WhereIF(!string.IsNullOrEmpty(dto.IsOvertime) && dto.IsOvertime == "0", d => d.ExpiredTime < DateTime.Now)
                .WhereIF(!string.IsNullOrEmpty(dto.IsOvertime) && dto.IsOvertime == "1", d => d.ExpiredTime >= DateTime.Now)
@@ -199,7 +198,7 @@ namespace Hotline.Api.Controllers
               .Queryable()
               .Includes(it => it.User)
               .Includes(it => it.SystemOrganize)
-              .Where(d => d.CreateUserId == _sessionContext.UserId && d.Status == EKnowledgeApplyStatus.Succeed)
+              .Where(d => d.CreatorId == _sessionContext.RequiredUserId && d.Status == EKnowledgeApplyStatus.Succeed)
               .WhereIF(!string.IsNullOrEmpty(dto.ApplyType), d => d.KnowledgeApplyType.ToString() == dto.ApplyType)
               .WhereIF(!string.IsNullOrEmpty(dto.IsOvertime) && dto.IsOvertime == "0", d => d.ExpiredTime < DateTime.Now)
               .WhereIF(!string.IsNullOrEmpty(dto.IsOvertime) && dto.IsOvertime == "1", d => d.ExpiredTime >= DateTime.Now)
@@ -223,7 +222,7 @@ namespace Hotline.Api.Controllers
               .Queryable()
               .Includes(it => it.User)
               .Includes(it => it.SystemOrganize)
-              .Where(d => d.CreateUserId == _sessionContext.UserId && d.Status == EKnowledgeApplyStatus.Failed)
+              .Where(d => d.CreatorId == _sessionContext.RequiredUserId && d.Status == EKnowledgeApplyStatus.Failed)
               .WhereIF(!string.IsNullOrEmpty(dto.ApplyType), d => d.KnowledgeApplyType.ToString() == dto.ApplyType)
               .WhereIF(!string.IsNullOrEmpty(dto.IsOvertime) && dto.IsOvertime == "0", d => d.ExpiredTime < DateTime.Now)
               .WhereIF(!string.IsNullOrEmpty(dto.IsOvertime) && dto.IsOvertime == "1", d => d.ExpiredTime >= DateTime.Now)
@@ -247,7 +246,7 @@ namespace Hotline.Api.Controllers
               .Queryable()
               .Includes(it => it.User)
               .Includes(it => it.SystemOrganize)
-              .Where(d => d.CreateUserId == _sessionContext.UserId && d.Status == EKnowledgeApplyStatus.Revert)
+              .Where(d => d.CreatorId == _sessionContext.RequiredUserId && d.Status == EKnowledgeApplyStatus.Revert)
               .WhereIF(!string.IsNullOrEmpty(dto.ApplyType), d => d.KnowledgeApplyType.ToString() == dto.ApplyType)
               .WhereIF(!string.IsNullOrEmpty(dto.IsOvertime) && dto.IsOvertime == "0", d => d.ExpiredTime < DateTime.Now)
               .WhereIF(!string.IsNullOrEmpty(dto.IsOvertime) && dto.IsOvertime == "1", d => d.ExpiredTime >= DateTime.Now)
@@ -268,7 +267,7 @@ namespace Hotline.Api.Controllers
         [HttpPost("apply-allhandle")]
         public async Task<PagedDto<KnowledgeApplyPageDto>> AllHandle([FromQuery] KnowledgeHandlePagedDto dto)
         {
-            var orgUser = await _userRepository.GetAsync(p => p.Id == _sessionContext.UserId);
+            var orgUser = await _userRepository.GetAsync(p => p.Id == _sessionContext.RequiredUserId);
             if (orgUser is null)
                 throw UserFriendlyException.SameMessage("登录信息获取失败");
 
@@ -298,7 +297,7 @@ namespace Hotline.Api.Controllers
         [HttpPost("apply-processinghandle")]
         public async Task<PagedDto<KnowledgeApplyPageDto>> ProcessingHandle([FromQuery] KnowledgeHandlePagedDto dto)
         {
-            var orgUser = await _userRepository.GetAsync(p => p.Id == _sessionContext.UserId);
+            var orgUser = await _userRepository.GetAsync(p => p.Id == _sessionContext.RequiredUserId);
             if (orgUser is null)
                 throw UserFriendlyException.SameMessage("登录信息获取失败");
 
@@ -329,7 +328,7 @@ namespace Hotline.Api.Controllers
         [HttpPost("apply-endhandle")]
         public async Task<PagedDto<KnowledgeApplyPageDto>> EndHandle([FromQuery] KnowledgeHandlePagedDto dto)
         {
-            var orgUser = await _userRepository.GetAsync(p => p.Id == _sessionContext.UserId);
+            var orgUser = await _userRepository.GetAsync(p => p.Id == _sessionContext.RequiredUserId);
             if (orgUser is null)
                 throw UserFriendlyException.SameMessage("登录信息获取失败");
 
@@ -360,7 +359,7 @@ namespace Hotline.Api.Controllers
         [HttpPost("apply-returnhandle")]
         public async Task<PagedDto<KnowledgeApplyPageDto>> ReturnHandle([FromQuery] KnowledgeHandlePagedDto dto)
         {
-            var orgUser = await _userRepository.GetAsync(p => p.Id == _sessionContext.UserId);
+            var orgUser = await _userRepository.GetAsync(p => p.Id == _sessionContext.RequiredUserId);
             if (orgUser is null)
                 throw UserFriendlyException.SameMessage("登录信息获取失败");
 

+ 146 - 33
src/Hotline.Api/Controllers/KnowledgeController.cs

@@ -4,7 +4,10 @@ using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.Knowledge;
 using Hotline.Share.Enums.KnowledgeBase;
 using MapsterMapper;
+using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
+using SqlSugar;
+using System.Xml.Linq;
 using XF.Domain.Authentications;
 using XF.Domain.Exceptions;
 
@@ -108,11 +111,19 @@ namespace Hotline.Api.Controllers
         /// <param name="Id"></param>
         /// <returns></returns>
         [HttpGet("knowledge-updateinfo")]
+        [AllowAnonymous]
         public async Task<Knowledge> KnowledgeUpdateInfo(string Id)
         {
             var know = await _knowledgeRepository.GetAsync(Id);
             if (know is null)
-                throw UserFriendlyException.SameMessage("知识查询失败!");
+            {
+                //再次查询草稿箱数据
+                var tempKnow = await _knowledgeTempRepository.GetAsync(Id);
+                if (tempKnow is null)
+                    throw UserFriendlyException.SameMessage("知识查询失败!");
+                know = new Knowledge();
+                _mapper.Map(tempKnow, know);
+            }
             return know;
         }
 
@@ -176,6 +187,8 @@ namespace Hotline.Api.Controllers
             var know = await _knowledgeRepository.GetAsync(dto.Id);
             if (know is null || know.IsDeleted)
                 throw UserFriendlyException.SameMessage("无效知识");
+            if (know.Status == EKnowledgeStatus.Auditing || know.Status == EKnowledgeStatus.Update)
+                throw UserFriendlyException.SameMessage("审批中数据不能修改");
             var knowledge = _mapper.Map<Knowledge>(dto);
             knowledge.Code = know.Code;
             knowledge.PageView = 0;
@@ -186,6 +199,41 @@ namespace Hotline.Api.Controllers
             //新增一条数据
 
             await _knowledgeRepository.AddAsync(knowledge);
+
+        }
+
+        /// <summary>
+        /// 审批操作
+        /// </summary>
+        /// <param name="Ids"></param>
+        /// <returns></returns>
+        [HttpPost("knowledge-approvalhandle")]
+        public async Task ApprovalHandle(List<string> Ids)
+        {
+            if (Ids is null || Ids.Count == 0)
+                throw UserFriendlyException.SameMessage("数据不能为空");
+            //审批操作
+            foreach (var item in Ids)
+            {
+                var know = await _knowledgeRepository.GetAsync(item);
+                if (know != null)
+                {
+                    //调用流程审批接口
+
+                    //处理数据
+                    know.Status = EKnowledgeStatus.Succeed;
+                    know.IsOnShelf = true;
+                    know.OnShelfTime = DateTime.Now;
+                    await _knowledgeRepository.UpdateAsync(know);
+                    //处理原始数据的状态
+                    var oldKnow = await _knowledgeRepository.GetAsync(p => p.Code == know.Code && p.Status == EKnowledgeStatus.Succeed && p.Id != know.Id);
+                    if (oldKnow != null)
+                    {
+                        oldKnow.Status = EKnowledgeStatus.Update;
+                        await _knowledgeRepository.UpdateAsync(oldKnow);
+                    }
+                }
+            }
         }
 
         #region 知识列表
@@ -201,7 +249,7 @@ namespace Hotline.Api.Controllers
              .Queryable()
              .Includes(it => it.User)
              .Includes(it => it.KnowledgeType)
-             .Where(p => p.CreateUserId == _sessionContext.UserId)
+             .Where(p => p.CreatorId == _sessionContext.RequiredUserId)
              .WhereIF(!string.IsNullOrEmpty(pagedDto.Title), d => d.Title.Contains(pagedDto.Title!))
              .WhereIF(!string.IsNullOrEmpty(pagedDto.KnowledgeTypeId), d => d.KnowledgeTypeId == pagedDto.KnowledgeTypeId)
              .WhereIF(pagedDto.StartTime != null, d => d.CreationTime >= pagedDto.StartTime)
@@ -212,15 +260,50 @@ namespace Hotline.Api.Controllers
             return new PagedDto<KnowledgeDataDto>(total, _mapper.Map<IReadOnlyList<KnowledgeDataDto>>(items));
         }
 
+        /// <summary>
+        /// 测试列表查询数据
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("knowledge-testlist")]
+        [AllowAnonymous]
+        public async Task<string> testlist([FromBody] KnowledgePagedListDto pagedDto)
+        {
+            var temp = await _knowledgeRepository
+               .Queryable().Select(it => new
+               {
+                   index2 = SqlFunc.RowNumber(it.Code, it.Version),
+                   Code = it.Code,
+                   Title = it.Title,
+                   Version = it.Version
+               })
+           .MergeTable()//将结果合并成一个表
+           .Where(it => it.index2 == 1)
+
+           //.Includes(it => it.User)
+           //.Includes(it => it.SystemOrganize)
+           //.Includes(it => it.KnowledgeType)
+           //.Where(p => p.IsDeleted == false)//&& p.Status != EKnowledgeStatus.Update
+           //.WhereIF(!string.IsNullOrEmpty(pagedDto.CreateUserName), d => d.User.Name.Contains(pagedDto.CreateUserName!))
+           //.WhereIF(!string.IsNullOrEmpty(pagedDto.CreateBMName), d => d.SystemOrganize.OrgName.Contains(pagedDto.CreateBMName!))
+           //.WhereIF(!string.IsNullOrEmpty(pagedDto.Title), d => d.Title.Contains(pagedDto.Title!))
+           //.WhereIF(!string.IsNullOrEmpty(pagedDto.KnowledgeTypeId), d => d.KnowledgeTypeId == pagedDto.KnowledgeTypeId)
+           //.WhereIF(!string.IsNullOrEmpty(pagedDto.HotspotId), d => d.HotspotId == pagedDto.HotspotId)
+           //.WhereIF(pagedDto.StartTime != null, d => d.OnShelfTime >= pagedDto.StartTime)
+           //.WhereIF(pagedDto.EndTime != null, d => d.OnShelfTime <= pagedDto.EndTime)
+
+           .ToJsonAsync();
+            return temp;
+        }
+
         /// <summary>
         /// 全部知识
         /// </summary>
         /// <param name="pagedDto"></param>
         /// <returns></returns>
         [HttpPost("knowledge-alllist")]
-        public async Task<PagedDto<KnowledgeDataDto>> AllList([FromBody] KnowledgePagedListDto pagedDto)
+        public async Task<PagedDto<KnowledgeDataDto>> AllList([FromBody] AllKnowledgePagedListDto pagedDto)
         {
-            var bmList = await _knowledgeService.GetChildBMCode(_sessionContext.UserId);
+            var bmList = await _knowledgeService.GetChildBMId(_sessionContext.RequiredUserId);
             if (bmList == null || bmList.Count == 0)
                 return new PagedDto<KnowledgeDataDto>(0, _mapper.Map<IReadOnlyList<KnowledgeDataDto>>(new List<Knowledge>()));
             var (total, items) = await _knowledgeRepository
@@ -228,21 +311,24 @@ namespace Hotline.Api.Controllers
               .Includes(it => it.User)
               .Includes(it => it.SystemOrganize)
               .Includes(it => it.KnowledgeType)
-              .GroupBy(p => new { p.Code })
-
-              .Where(p => p.IsDeleted == false)
-              .Where(p => bmList.Contains(p.AutoOrgCode))
-              .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateUserName), d => d.User.Name.Contains(pagedDto.CreateUserName!))
-              .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateBMName), d => d.SystemOrganize.OrgName.Contains(pagedDto.CreateBMName!))
-              .WhereIF(!string.IsNullOrEmpty(pagedDto.Title), d => d.Title.Contains(pagedDto.Title!))
-              .WhereIF(!string.IsNullOrEmpty(pagedDto.KnowledgeTypeId), d => d.KnowledgeTypeId == pagedDto.KnowledgeTypeId)
-              .WhereIF(!string.IsNullOrEmpty(pagedDto.HotspotId), d => d.HotspotId == pagedDto.HotspotId)
-              //.WhereIF(!string.IsNullOrEmpty(pagedDto.CreateBMCode), d => d.AutoOrgCode == pagedDto.CreateBMCode)
-              .WhereIF(pagedDto.StartTime != null, d => d.OnShelfTime >= pagedDto.StartTime)
-              .WhereIF(pagedDto.EndTime != null, d => d.OnShelfTime <= pagedDto.EndTime)
+              .Where(p => p.IsDeleted == false && p.Status != EKnowledgeStatus.Update)//
+              .Where(p => bmList.Contains(p.CreatorOrgId))//组织Id
+              .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateUserName), d => d.User.Name.Contains(pagedDto.CreateUserName!))//创建人
+              .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateBMName), d => d.SystemOrganize.OrgName.Contains(pagedDto.CreateBMName!))//创建部门
+              .WhereIF(!string.IsNullOrEmpty(pagedDto.Title), d => d.Title.Contains(pagedDto.Title!))//知识标题
+              .WhereIF(!string.IsNullOrEmpty(pagedDto.KnowledgeTypeId), d => d.KnowledgeTypeId == pagedDto.KnowledgeTypeId)//知识分类
+              .WhereIF(!string.IsNullOrEmpty(pagedDto.HotspotId), d => d.HotspotId == pagedDto.HotspotId)//热点
+                                                                                                         //创建时间
+              .WhereIF(pagedDto.StartTime != null, d => d.CreationTime >= pagedDto.StartTime)
+              .WhereIF(pagedDto.EndTime != null, d => d.CreationTime <= pagedDto.EndTime)
+               //上架时间
+               .WhereIF(pagedDto.StartOnShelfTime != null, d => d.OnShelfTime >= pagedDto.StartTime)
+              .WhereIF(pagedDto.EndOnShelfTime != null, d => d.OnShelfTime <= pagedDto.EndTime)
+               //下架时间
+               .WhereIF(pagedDto.StartOffShelfTime != null, d => d.OffShelfTime >= pagedDto.StartTime)
+              .WhereIF(pagedDto.EndOffShelfTime != null, d => d.OffShelfTime <= pagedDto.EndTime)
 
               .OrderByDescending(p => p.CreationTime)
-              //    .OrderBy(it => new { CreationTime = SqlFunc.Desc(it.CreationTime), Version = SqlFunc.Desc(it.Version) })
               .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize);
 
             return new PagedDto<KnowledgeDataDto>(total, _mapper.Map<IReadOnlyList<KnowledgeDataDto>>(items));
@@ -256,7 +342,7 @@ namespace Hotline.Api.Controllers
         [HttpPost("knowledge-ontheshelf")]
         public async Task<PagedDto<KnowledgeDataDto>> OnTheShelf([FromBody] KnowledgePagedListDto pagedDto)
         {
-            var bmList = await _knowledgeService.GetChildBMCode(_sessionContext.UserId);
+            var bmList = await _knowledgeService.GetChildBMId(_sessionContext.RequiredUserId);
             if (bmList == null || bmList.Count == 0)
                 return new PagedDto<KnowledgeDataDto>(0, _mapper.Map<IReadOnlyList<KnowledgeDataDto>>(new List<Knowledge>()));
             var (total, items) = await _knowledgeRepository
@@ -265,13 +351,12 @@ namespace Hotline.Api.Controllers
               .Includes(it => it.SystemOrganize)
               .Includes(it => it.KnowledgeType)
               .Where(p => p.IsOnShelf == true && p.Status == EKnowledgeStatus.Succeed && p.IsDeleted == false)
-              .Where(p => bmList.Contains(p.AutoOrgCode))
+              .Where(p => bmList.Contains(p.CreatorOrgId))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateUserName), d => d.User.Name.Contains(pagedDto.CreateUserName!))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateBMName), d => d.SystemOrganize.OrgName.Contains(pagedDto.CreateBMName!))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.Title), d => d.Title.Contains(pagedDto.Title!))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.KnowledgeTypeId), d => d.KnowledgeTypeId == pagedDto.KnowledgeTypeId)
               .WhereIF(!string.IsNullOrEmpty(pagedDto.HotspotId), d => d.HotspotId == pagedDto.HotspotId)
-            //  .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateBMCode), d => d.AutoOrgCode == pagedDto.CreateBMCode)
               .WhereIF(pagedDto.StartTime != null, d => d.OnShelfTime >= pagedDto.StartTime)
               .WhereIF(pagedDto.EndTime != null, d => d.OnShelfTime <= pagedDto.EndTime)
               .OrderByDescending(p => p.CreationTime)
@@ -288,7 +373,7 @@ namespace Hotline.Api.Controllers
         [HttpPost("knowledge-offshelf")]
         public async Task<PagedDto<KnowledgeDataDto>> OffShelf([FromBody] KnowledgePagedListDto pagedDto)
         {
-            var bmList = await _knowledgeService.GetChildBMCode(_sessionContext.UserId);
+            var bmList = await _knowledgeService.GetChildBMId(_sessionContext.RequiredUserId);
             if (bmList == null || bmList.Count == 0)
                 return new PagedDto<KnowledgeDataDto>(0, _mapper.Map<IReadOnlyList<KnowledgeDataDto>>(new List<Knowledge>()));
             var (total, items) = await _knowledgeRepository
@@ -297,13 +382,12 @@ namespace Hotline.Api.Controllers
               .Includes(it => it.SystemOrganize)
               .Includes(it => it.KnowledgeType)
               .Where(p => p.IsOnShelf == false && p.Status == EKnowledgeStatus.Succeed && p.IsDeleted == false)
-              .Where(p => bmList.Contains(p.AutoOrgCode))
+              .Where(p => bmList.Contains(p.CreatorOrgId))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateUserName), d => d.User.Name.Contains(pagedDto.CreateUserName!))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateBMName), d => d.SystemOrganize.OrgName.Contains(pagedDto.CreateBMName!))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.Title), d => d.Title.Contains(pagedDto.Title!))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.KnowledgeTypeId), d => d.KnowledgeTypeId == pagedDto.KnowledgeTypeId)
               .WhereIF(!string.IsNullOrEmpty(pagedDto.HotspotId), d => d.HotspotId == pagedDto.HotspotId)
-            //  .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateBMCode), d => d.AutoOrgCode == pagedDto.CreateBMCode)
               .WhereIF(pagedDto.StartTime != null, d => d.OffShelfTime >= pagedDto.StartTime)
               .WhereIF(pagedDto.EndTime != null, d => d.OffShelfTime <= pagedDto.EndTime)
               .OrderByDescending(p => p.CreationTime)
@@ -320,7 +404,7 @@ namespace Hotline.Api.Controllers
         [HttpPost("knowledge-underapproval")]
         public async Task<PagedDto<KnowledgeDataDto>> UnderApproval([FromBody] KnowledgePagedListDto pagedDto)
         {
-            var bmList = await _knowledgeService.GetChildBMCode(_sessionContext.UserId);
+            var bmList = await _knowledgeService.GetChildBMId(_sessionContext.RequiredUserId);
             if (bmList == null || bmList.Count == 0)
                 return new PagedDto<KnowledgeDataDto>(0, _mapper.Map<IReadOnlyList<KnowledgeDataDto>>(new List<Knowledge>()));
             var (total, items) = await _knowledgeRepository
@@ -329,13 +413,12 @@ namespace Hotline.Api.Controllers
               .Includes(it => it.SystemOrganize)
               .Includes(it => it.KnowledgeType)
               .Where(p => p.Status == EKnowledgeStatus.Auditing && p.IsDeleted == false)
-              .Where(p => bmList.Contains(p.AutoOrgCode))
+              .Where(p => bmList.Contains(p.CreatorOrgId))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateUserName), d => d.User.Name.Contains(pagedDto.CreateUserName!))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateBMName), d => d.SystemOrganize.OrgName.Contains(pagedDto.CreateBMName!))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.Title), d => d.Title.Contains(pagedDto.Title!))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.KnowledgeTypeId), d => d.KnowledgeTypeId == pagedDto.KnowledgeTypeId)
               .WhereIF(!string.IsNullOrEmpty(pagedDto.HotspotId), d => d.HotspotId == pagedDto.HotspotId)
-              // .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateBMCode), d => d.AutoOrgCode == pagedDto.CreateBMCode)
               .WhereIF(pagedDto.StartTime != null, d => d.CreationTime >= pagedDto.StartTime)
               .WhereIF(pagedDto.EndTime != null, d => d.CreationTime <= pagedDto.EndTime)
               .OrderByDescending(p => p.CreationTime)
@@ -352,7 +435,7 @@ namespace Hotline.Api.Controllers
         [HttpPost("knowledge-approved")]
         public async Task<PagedDto<KnowledgeDataDto>> Approved([FromBody] KnowledgePagedListDto pagedDto)
         {
-            var bmList = await _knowledgeService.GetChildBMCode(_sessionContext.UserId);
+            var bmList = await _knowledgeService.GetChildBMId(_sessionContext.RequiredUserId);
             if (bmList == null || bmList.Count == 0)
                 return new PagedDto<KnowledgeDataDto>(0, _mapper.Map<IReadOnlyList<KnowledgeDataDto>>(new List<Knowledge>()));
             var (total, items) = await _knowledgeRepository
@@ -361,13 +444,12 @@ namespace Hotline.Api.Controllers
               .Includes(it => it.SystemOrganize)
               .Includes(it => it.KnowledgeType)
               .Where(p => p.Status == EKnowledgeStatus.Succeed && p.IsDeleted == false)
-              .Where(p => bmList.Contains(p.AutoOrgCode))
+              .Where(p => bmList.Contains(p.CreatorOrgId))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateUserName), d => d.User.Name.Contains(pagedDto.CreateUserName!))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateBMName), d => d.SystemOrganize.OrgName.Contains(pagedDto.CreateBMName!))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.Title), d => d.Title.Contains(pagedDto.Title!))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.KnowledgeTypeId), d => d.KnowledgeTypeId == pagedDto.KnowledgeTypeId)
               .WhereIF(!string.IsNullOrEmpty(pagedDto.HotspotId), d => d.HotspotId == pagedDto.HotspotId)
-              // .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateBMCode), d => d.AutoOrgCode == pagedDto.CreateBMCode)
               .WhereIF(pagedDto.StartTime != null, d => d.CreationTime >= pagedDto.StartTime)
               .WhereIF(pagedDto.EndTime != null, d => d.CreationTime <= pagedDto.EndTime)
               .OrderByDescending(p => p.CreationTime)
@@ -384,7 +466,7 @@ namespace Hotline.Api.Controllers
         [HttpPost("knowledge-approvalfailed")]
         public async Task<PagedDto<KnowledgeDataDto>> ApprovalFailed([FromBody] KnowledgePagedListDto pagedDto)
         {
-            var bmList = await _knowledgeService.GetChildBMCode(_sessionContext.UserId);
+            var bmList = await _knowledgeService.GetChildBMId(_sessionContext.UserId);
             if (bmList == null || bmList.Count == 0)
                 return new PagedDto<KnowledgeDataDto>(0, _mapper.Map<IReadOnlyList<KnowledgeDataDto>>(new List<Knowledge>()));
             var (total, items) = await _knowledgeRepository
@@ -393,13 +475,12 @@ namespace Hotline.Api.Controllers
               .Includes(it => it.SystemOrganize)
               .Includes(it => it.KnowledgeType)
               .Where(p => p.Status == EKnowledgeStatus.Failed && p.IsDeleted == false)
-              .Where(p => bmList.Contains(p.AutoOrgCode))
+              .Where(p => bmList.Contains(p.CreatorOrgId))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateUserName), d => d.User.Name.Contains(pagedDto.CreateUserName!))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateBMName), d => d.SystemOrganize.OrgName.Contains(pagedDto.CreateBMName!))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.Title), d => d.Title.Contains(pagedDto.Title!))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.KnowledgeTypeId), d => d.KnowledgeTypeId == pagedDto.KnowledgeTypeId)
               .WhereIF(!string.IsNullOrEmpty(pagedDto.HotspotId), d => d.HotspotId == pagedDto.HotspotId)
-              // .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateBMCode), d => d.AutoOrgCode == pagedDto.CreateBMCode)
               .WhereIF(pagedDto.StartTime != null, d => d.CreationTime >= pagedDto.StartTime)
               .WhereIF(pagedDto.EndTime != null, d => d.CreationTime <= pagedDto.EndTime)
               .OrderByDescending(p => p.CreationTime)
@@ -410,6 +491,38 @@ namespace Hotline.Api.Controllers
 
         #endregion
 
+        #region 知识检索
+        /// <summary>
+        /// 知识检索
+        /// </summary>
+        /// <param name="pagedDto"></param>
+        /// <returns></returns>
+        [HttpPost("knowledge-knowretrieval")]
+        public async Task<PagedDto<KnowledgeRetrievalDataDto>> KnowRetrieval([FromBody] KnowledgeRetrievalPagedListDto pagedDto)
+        {
+            if (string.IsNullOrEmpty(pagedDto.Keyword))
+                throw UserFriendlyException.SameMessage("请输入关键字");
+
+            //是否需要验证本部门以及下级部门的数据,不要注释下面这3行
+            var bmList = await _knowledgeService.GetChildBMId(_sessionContext.RequiredUserId);
+            if (bmList == null || bmList.Count == 0)
+                return new PagedDto<KnowledgeRetrievalDataDto>(0, _mapper.Map<IReadOnlyList<KnowledgeRetrievalDataDto>>(new List<Knowledge>()));
+
+            var (total, items) = await _knowledgeRepository
+              .Queryable()
+              .Where(p => p.IsDeleted == false && p.Status == EKnowledgeStatus.Succeed)
+              .Where(p => bmList.Contains(p.CreatorOrgId)) //是否需要验证本部门以及下级部门的数据,不要注释此行
+              .WhereIF(pagedDto.RetrievalType == EKnowledgeRetrievalType.All.ToString(), d => d.Title.Contains(pagedDto.Keyword) || d.Content.Contains(pagedDto.Keyword) || d.Additions.Contains(pagedDto.Keyword))
+              .WhereIF(pagedDto.RetrievalType == EKnowledgeRetrievalType.Title.ToString(), d => d.Title.Contains(pagedDto.Keyword))
+              .WhereIF(pagedDto.RetrievalType == EKnowledgeRetrievalType.Content.ToString(), d => d.Content.Contains(pagedDto.Keyword))
+              .WhereIF(pagedDto.RetrievalType == EKnowledgeRetrievalType.Enclosure.ToString(), d => d.Additions.Contains(pagedDto.Keyword))
+              .OrderByDescending(p => p.PageView)
+              .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize);
+
+            return new PagedDto<KnowledgeRetrievalDataDto>(total, _mapper.Map<IReadOnlyList<KnowledgeRetrievalDataDto>>(items));
+        }
+        #endregion
+
         /// <summary>
         /// 待审核
         /// </summary>
@@ -423,7 +536,7 @@ namespace Hotline.Api.Controllers
               .Includes(it => it.User)
               .Includes(it => it.SystemOrganize)
               .Includes(it => it.KnowledgeType)
-              .Where(p => p.IsDeleted == false && p.Status == EKnowledgeStatus.Auditing)//&& p.AssignUserIds.Contains(pagedDto.UserId!)
+              .Where(p => p.IsDeleted == false && p.Status == EKnowledgeStatus.Auditing && p.AssignUserIds.Contains(_sessionContext.UserId))//&& p.AssignUserIds.Contains(pagedDto.UserId!)
               .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateUserName), d => d.User.Name.Contains(pagedDto.CreateUserName!))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateBMName), d => d.SystemOrganize.OrgName.Contains(pagedDto.CreateBMName!))
               .WhereIF(!string.IsNullOrEmpty(pagedDto.Title), d => d.Title.Contains(pagedDto.Title!))

+ 15 - 0
src/Hotline.Application/Mappers/MapperConfigs.cs

@@ -1,6 +1,8 @@
 using Hotline.CallCenter.BlackLists;
 using Hotline.Identity.Roles;
+using Hotline.KnowledgeBase;
 using Hotline.Share.Dtos.CallCenter;
+using Hotline.Share.Dtos.Knowledge;
 using Hotline.Share.Dtos.Roles;
 using Hotline.Share.Dtos.Users;
 using Hotline.Users;
@@ -36,6 +38,19 @@ namespace Hotline.Application.Mappers
             config.NewConfig<Role, RoleDto>()
                 .Map(d => d.AccountIds, x => x.Accounts.Select(d => d.Id))
                 .Map(d => d.State, x => x.IsDeleted ? "已删除" : "正常");
+
+            config.NewConfig<KnowledgeApply, KnowledgeApplyPageDto>()
+              .Map(d => d.CreationName, x => x.User.Name)
+                .Map(d => d.CreationOrgName, x => x.SystemOrganize.OrgName);
+
+            config.NewConfig<Knowledge, KnowledgeDataDto>()
+              .Map(d => d.CreationName, x => x.User.Name)
+                .Map(d => d.KnowledgeTypeName, x => x.KnowledgeType.SpliceName);
+
+            config.NewConfig<Knowledge, KnowledgeApprovalDataDto>()
+            .Map(d => d.CreationName, x => x.User.Name)
+              .Map(d => d.KnowledgeTypeName, x => x.KnowledgeType.SpliceName)
+                 .Map(d => d.CreateBMName, x => x.SystemOrganize.OrgName);
         }
     }
 }

+ 13 - 1
src/Hotline.Repository.SqlSugar/Knowledge/KnowledgeRepository.cs

@@ -1,5 +1,8 @@
-using Hotline.KnowledgeBase;
+using Hotline.CallCenter.Calls;
+using Hotline.KnowledgeBase;
 using Hotline.Repository.SqlSugar.DataPermissions;
+using Hotline.Settings;
+using Hotline.Share.Enums.CallCenter;
 using SqlSugar;
 using XF.Domain.Dependency;
 
@@ -11,5 +14,14 @@ namespace Hotline.Repository.SqlSugar.Knowledge
         {
 
         }
+        /// <summary>
+        /// 获取子级
+        /// </summary>
+        /// <param name=""></param>
+        /// <returns></returns>
+        public async Task<List<SystemOrganize>> GetChild(string Id)
+        {
+            return await Db.Queryable<SystemOrganize>().ToChildListAsync(it => it.ParentId, Id);
+        }
     }
 }

+ 16 - 0
src/Hotline.Share/Dtos/Knowledge/KnowledgeApplyPagedDto.cs

@@ -2,7 +2,23 @@
 
 namespace Hotline.Share.Dtos.Knowledge
 {
+    /// <summary>
+    /// 
+    /// </summary>
+    /// <param name="ApplyType"></param>
+    /// <param name="IsOvertime"></param>
+    /// <param name="StartTime"></param>
+    /// <param name="EndTime"></param>
     public record KnowledgeApplyPagedDto(string? ApplyType, string? IsOvertime, DateTime? StartTime, DateTime? EndTime) : PagedRequest;
 
+    /// <summary>
+    /// 
+    /// </summary>
+    /// <param name="ApplyType"></param>
+    /// <param name="IsOvertime"></param>
+    /// <param name="StartTime"></param>
+    /// <param name="EndTime"></param>
+    /// <param name="CreateUserName"></param>
+    /// <param name="CreateBMName"></param>
     public record KnowledgeHandlePagedDto(string? ApplyType, string? IsOvertime, DateTime? StartTime, DateTime? EndTime, string? CreateUserName, string? CreateBMName) : PagedRequest;
 }

+ 31 - 5
src/Hotline.Share/Dtos/Knowledge/KnowledgeDataDto.cs

@@ -1,14 +1,14 @@
 using Hotline.Share.Enums.KnowledgeBase;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 
 namespace Hotline.Share.Dtos.Knowledge
 {
     public record KnowledgeBaseDataDto
     {
+        /// <summary>
+        /// 知识ID
+        /// </summary>
+        public string Id { get; set; }
+
         /// <summary>
         /// 标题
         /// </summary>
@@ -86,4 +86,30 @@ namespace Hotline.Share.Dtos.Knowledge
         /// </summary>
         public DateTime? Time { get; set; }
     }
+
+    /// <summary>
+    /// 知识检索
+    /// </summary>
+    public record KnowledgeRetrievalDataDto
+    {
+        /// <summary>
+        /// 知识ID
+        /// </summary>
+        public string Id { get; set; }
+
+        /// <summary>
+        /// 标题
+        /// </summary>
+        public string Title { get; set; }
+
+        /// <summary>
+        /// 摘要
+        /// </summary>
+        public string Summary { get; set; }
+
+        /// <summary>
+        /// 内容
+        /// </summary>
+        public string Content { get; set; }
+    }
 }

+ 31 - 16
src/Hotline.Share/Dtos/Knowledge/KnowledgePagedDto.cs

@@ -3,31 +3,27 @@
 namespace Hotline.Share.Dtos.Knowledge
 {
     /// <summary>
-    /// 我的草稿箱
+    /// 知识库基础
     /// </summary>
-    /// <param name="CreateUserId"></param>
-    /// <param name="KnowledgeTypeId"></param>
-    /// <param name="StartTime"></param>
-    /// <param name="EndTime"></param>
     public record KnowledgeBasePagedDto : PagedRequest
     {
         /// <summary>
-        /// 
+        /// 知识类型
         /// </summary>
         public string? KnowledgeTypeId { get; set; }
 
         /// <summary>
-        /// 
+        /// 知识标题
         /// </summary>
         public string? Title { get; set; }
 
         /// <summary>
-        /// 
+        /// 创建时间-开始
         /// </summary>
         public DateTime? StartTime { get; set; }
 
         /// <summary>
-        /// 
+        /// 创建时间-结束
         /// </summary>
         public DateTime? EndTime { get; set; }
     }
@@ -40,19 +36,38 @@ namespace Hotline.Share.Dtos.Knowledge
     /// <summary>
     /// 知识库
     /// </summary>
-    /// <param name="CreateUserName"></param>
-    /// <param name="CreateBMName"></param>
-    /// <param name="CreateBMCode"></param>
-    /// <param name="HotspotId"></param>
-    public record KnowledgePagedListDto(string? CreateUserName, string? CreateBMName, string? CreateBMCode, string? HotspotId) : KnowledgeBasePagedDto;
+    /// <param name="CreateUserName">创建人</param>
+    /// <param name="CreateBMName">创建部门</param>
+    /// <param name="CreateBMId">创建部门ID</param>
+    /// <param name="HotspotId">热点类型</param>
+    public record KnowledgePagedListDto(string? CreateUserName, string? CreateBMName, string? CreateBMId, string? HotspotId) : KnowledgeBasePagedDto;
+
+    /// <summary>
+    /// 全部知识查询条件
+    /// </summary>
+    /// <param name="CreateUserName">创建人</param>
+    /// <param name="CreateBMName">创建部门</param>
+    /// <param name="CreateBMId">创建部门ID</param>
+    /// <param name="HotspotId">热点类型</param>
+    /// <param name="StartOnShelfTime">上架时间-开始</param>
+    /// <param name="EndOnShelfTime">上架时间-结束</param>
+    /// <param name="StartOffShelfTime">下架时间-开始</param>
+    /// <param name="EndOffShelfTime">下架时间-开始</param>
+    public record AllKnowledgePagedListDto(string? CreateUserName, string? CreateBMName, string? CreateBMId, string? HotspotId,
+        DateTime? StartOnShelfTime, DateTime? EndOnShelfTime, DateTime? StartOffShelfTime, DateTime? EndOffShelfTime) : KnowledgeBasePagedDto;
 
     /// <summary>
     /// 审核管理
     /// </summary>
-    /// <param name="UserId"></param>
     /// <param name="AuditType"></param>
     /// <param name="Title"></param>
     /// <param name="CreateUserName"></param>
     /// <param name="CreateBMName"></param>
-    public record KnowledgeApprovalPagedListDto(string UserId, string? AuditType, string? Title, string? CreateUserName, string? CreateBMName) : PagedRequest;
+    public record KnowledgeApprovalPagedListDto(string? AuditType, string? Title, string? CreateUserName, string? CreateBMName) : PagedRequest;
+
+    /// <summary>
+    /// 知识检索
+    /// </summary>
+    /// <param name="RetrievalType"></param>
+    public record KnowledgeRetrievalPagedListDto(string? RetrievalType) : PagedKeywordRequest;
 }

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

@@ -0,0 +1,12 @@
+namespace Hotline.Share.Enums.KnowledgeBase;
+
+/// <summary>
+/// 检索类型
+/// </summary>
+public enum EKnowledgeRetrievalType
+{
+    All = 0,//全文
+    Title = 1,//标题
+    Content = 2,//正文
+    Enclosure = 3,//附件
+}

+ 1 - 0
src/Hotline.Share/Enums/KnowledgeBase/EKnowledgeStatus.cs

@@ -8,4 +8,5 @@ public enum EKnowledgeStatus
     Auditing = 1,
     Succeed = 2,
     Failed = 3,
+    Update=4,
 }

+ 8 - 2
src/Hotline/KnowledgeBase/IKnowledgeRepository.cs

@@ -1,9 +1,15 @@
-using XF.Domain.Repository;
+using Hotline.Settings;
+using XF.Domain.Repository;
 
 namespace Hotline.KnowledgeBase
 {
     public interface IKnowledgeRepository : IRepository<KnowledgeBase.Knowledge>
     {
-
+        /// <summary>
+        /// 获取子级
+        /// </summary>
+        /// <param name=""></param>
+        /// <returns></returns>
+        Task<List<SystemOrganize>> GetChild(string Id);
     }
 }

+ 2 - 2
src/Hotline/KnowledgeBase/IKnowledgeService.cs

@@ -5,10 +5,10 @@ namespace Hotline.KnowledgeBase
     public interface IKnowledgeService
     {
         /// <summary>
-        /// 根据用户ID获取当前用户所属部门及下级部门Code
+        /// 根据用户ID获取当前用户所属部门及下级部门Id
         /// </summary>
         /// <param name="userId"></param>
         /// <returns></returns>
-        Task<List<string>> GetChildBMCode(string? userId);
+        Task<List<string>> GetChildBMId(string? userId);
     }
 }

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

@@ -9,7 +9,7 @@ namespace Hotline.KnowledgeBase;
 /// <summary>
 /// 知识库文档内容
 /// </summary>
-public class Knowledge : FullStateEntity
+public class Knowledge : WorkflowEntity// FullStateEntity
 {
     /// <summary>
     /// 知识分类
@@ -108,12 +108,12 @@ public class Knowledge : FullStateEntity
     /// <summary>
     /// 部门
     /// </summary>
-    [Navigate(NavigateType.OneToOne, nameof(OrgId))]//一对一 
+    [Navigate(NavigateType.OneToOne, nameof(CreatorOrgId))]//一对一 
     public SystemOrganize SystemOrganize { get; set; }
 
     /// <summary>
     /// 用户
     /// </summary>
-    [Navigate(NavigateType.OneToOne, nameof(CreateUserId))]//一对一 
+    [Navigate(NavigateType.OneToOne, nameof(CreatorId))]//一对一 
     public User User { get; set; }
 }

+ 2 - 2
src/Hotline/KnowledgeBase/KnowledgeApply.cs

@@ -45,13 +45,13 @@ public class KnowledgeApply : FullStateEntity
     /// <summary>
     /// 
     /// </summary>
-    [Navigate(NavigateType.OneToOne, nameof(CreateUserId))]//一对一 CreateUserId是KnowledgeApply类里面的
+    [Navigate(NavigateType.OneToOne, nameof(CreatorId))]//一对一 CreateUserId是KnowledgeApply类里面的
     public User User { get; set; }
 
     /// <summary>
     /// 
     /// </summary>
-    [Navigate(NavigateType.OneToOne, nameof(OrgId))]//一对一 
+    [Navigate(NavigateType.OneToOne, nameof(CreatorOrgId))]//一对一 
     public SystemOrganize SystemOrganize { get; set; } 
 
 

+ 9 - 29
src/Hotline/KnowledgeBase/KnowledgeService.cs

@@ -1,5 +1,6 @@
 using Hotline.Settings;
 using Hotline.Users;
+using Microsoft.IdentityModel.Tokens;
 using XF.Domain.Dependency;
 
 namespace Hotline.KnowledgeBase
@@ -8,57 +9,36 @@ namespace Hotline.KnowledgeBase
     {
         private readonly ISystemOrganizeRepository _systemOrganizeRepository;
         private readonly IUserRepository _userRepository;
+        private readonly IKnowledgeRepository _knowledgeRepository;
 
         /// <summary>
         /// 
         /// </summary>
         /// <param name="_systemOrganizeRepository"></param>
-        public KnowledgeService(ISystemOrganizeRepository systemOrganizeRepository, IUserRepository userRepository)
+        public KnowledgeService(ISystemOrganizeRepository systemOrganizeRepository, IUserRepository userRepository, IKnowledgeRepository knowledgeRepository)
         {
             _systemOrganizeRepository = systemOrganizeRepository;
             _userRepository = userRepository;
+            _knowledgeRepository = knowledgeRepository;
         }
 
         /// <summary>
-        /// 根据用户ID获取当前用户所属部门及下级部门Code
+        /// 根据用户ID获取当前用户所属部门及下级部门Id
         /// </summary>
         /// <param name="userId"></param>
         /// <returns></returns>
-        public async Task<List<string>> GetChildBMCode(string? userId)
+        public async Task<List<string>> GetChildBMId(string? userId)
         {
             var orgUser = await _userRepository.GetAsync(p => p.Id == userId);
             List<string> list = new();
-            if (orgUser != null)
+            if (orgUser != null && !string.IsNullOrEmpty(orgUser.OrgId))
             {
-                var temp =await _systemOrganizeRepository.GetAsync(p => p.Id == orgUser.OrgId);
-                if (temp!=null)
-                {
-                    list.Add(temp.OrgCode);
-                }
-                list.AddRange(await GetChildNode(orgUser.Id));
+                var tempList = await _knowledgeRepository.GetChild(orgUser.OrgId);
+                list = tempList.Select(it => it.Id).ToList();
             }
             return list;
         }
 
-        /// <summary>
-        /// 查询下级部门
-        /// </summary>
-        /// <param name="Id"></param>
-        /// <returns></returns>
-        private async Task<List<string>> GetChildNode(string Id)
-        {
-            List<string> list = new();
-            var typelist = await _systemOrganizeRepository.QueryAsync(p => p.ParentId == Id);
-            if (typelist != null)
-            {
-                foreach (var item in typelist)
-                {
-                    list.Add(item.OrgCode);
-                    list.AddRange(await GetChildNode(item.Id));
-                }
-            }
-            return list;
-        }
     }
 }