Quellcode durchsuchen

修改知识关联

TANG JIANG vor 2 Jahren
Ursprung
Commit
452403b9ef

+ 28 - 4
src/Hotline.Api/Controllers/KnowledgeApplyController.cs

@@ -1,11 +1,14 @@
 using Hotline.Application.Knowledge;
 using Hotline.KnowledgeBase;
 using Hotline.Permissions;
+using Hotline.Repository.SqlSugar.Extensions;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.Knowledge;
 using Hotline.Share.Enums.KnowledgeBase;
+using Hotline.Share.Requests;
 using MapsterMapper;
 using Microsoft.AspNetCore.Mvc;
+using System.Threading;
 using XF.Domain.Authentications;
 using XF.Domain.Exceptions;
 
@@ -70,18 +73,21 @@ namespace Hotline.Api.Controllers
         /// <summary>
         ///知识申请-信息办理
         /// </summary>
-        /// <param name="Id"></param>
+        /// <param name="dto"></param>
         /// <returns></returns>
         [Permission(EPermission.KnowApplyHandle)]
         [HttpPut("apply-handle")]
-        public async Task ApplyHandle(string Id)
+        public async Task ApplyHandle([FromBody] KnowledgeApplyHandleDto dto)
         {
             //查询申请信息
-            var handle = await _knowledgeApplyRepository.GetAsync(Id, HttpContext.RequestAborted);
+            var handle = await _knowledgeApplyRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
 
             if (handle is null)
                 throw UserFriendlyException.SameMessage("办理失败");
             handle.Status = EKnowledgeApplyStatus.Succeed;
+            handle.HandleTime = DateTime.Now;
+            handle.KnowledgeId = dto.KnowledgeId;
+            handle.Opinion = dto.Opinion;
             //修改办理信息
             await _knowledgeApplyRepository.UpdateAsync(handle, HttpContext.RequestAborted);
         }
@@ -116,6 +122,7 @@ namespace Hotline.Api.Controllers
             if (handle is null)
                 throw UserFriendlyException.SameMessage("退回失败");
             handle.Status = EKnowledgeApplyStatus.Failed;
+            handle.ReturnTime = DateTime.Now;
             await _knowledgeApplyRepository.UpdateAsync(handle, HttpContext.RequestAborted);
         }
 
@@ -148,7 +155,7 @@ namespace Hotline.Api.Controllers
             DataKnowledgeApplyDto dataKnowledgeApplyDto = new();
             _mapper.Map(handle, dataKnowledgeApplyDto);
 
-            var knowledge = await _knowledgeRepository.GetAsync(p => p.Applies.Contains(Id), HttpContext.RequestAborted);
+            var knowledge = await _knowledgeRepository.GetAsync(p => p.Id == handle.KnowledgeId, HttpContext.RequestAborted);
             if (knowledge != null)
             {
                 dataKnowledgeApplyDto.KBID = knowledge.Id;
@@ -158,6 +165,23 @@ namespace Hotline.Api.Controllers
             return dataKnowledgeApplyDto;
         }
 
+        /// <summary>
+        /// 查询知识申请-新增知识申请
+        /// </summary>
+        /// <param name="pagedDto"></param>
+        /// <returns></returns>
+        [HttpGet("addapply")]
+        public async Task<PagedDto<DataAddApplyDto>> GetAddApply([FromQuery] PagedRequest pagedDto)
+        {
+            var (total, items) = await _knowledgeApplyRepository
+               .Queryable()
+               .Where(d => d.CreatorId == _sessionContext.RequiredUserId&&d.KnowledgeApplyType== EKnowledgeApplyType.Add&&d.Status== EKnowledgeApplyStatus.Handling)
+               .OrderByDescending(p => p.CreationTime)
+               .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, HttpContext.RequestAborted);
+
+            return new PagedDto<DataAddApplyDto>(total, _mapper.Map<IReadOnlyList<DataAddApplyDto>>(items));
+        }
+
         #region 我的知识申请
         /// <summary>
         /// 我的知识申请--全部

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

@@ -10,6 +10,8 @@ using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.FlowEngine;
 using Hotline.Share.Dtos.Knowledge;
 using Hotline.Share.Enums.KnowledgeBase;
+using Hotline.Share.Requests;
+using Hotline.Users;
 using MapsterMapper;
 using MediatR;
 using Microsoft.AspNetCore.Authorization;
@@ -325,6 +327,38 @@ namespace Hotline.Api.Controllers
         {
             return await _workflowDomainService.GetWorkflowAsync(workFlowId, withSupplements: true, cancellationToken: HttpContext.RequestAborted);
         }
+
+        /// <summary>
+        /// 知识申请-关联知识-获取知识列表
+        /// </summary>
+        /// <param name="pagedDto"></param>
+        /// <returns></returns>
+        [HttpGet("getknowledge")]
+        public async Task<PagedDto<KnowledgeCreateBMDataDto>> GetKnowledge([FromQuery] PagedRequest pagedDto)
+        {
+            RefAsync<int> total = 0;
+            var temp = await _knowledgeRepository
+               .Queryable(true)
+               .LeftJoin<SystemOrganize>((o, sys) => o.CreatorOrgId == sys.Id)
+               .Where((o, sys) => o.IsDeleted == false && o.Status == EKnowledgeStatus.OnShelf)
+               //重新构建数据
+               .Select((o, sys) => new
+               {
+                   index = SqlFunc.RowNumber($"{o.Version} desc ", $"{o.Code}"),
+                   DepartmentId = sys.Id,
+                   Department = sys.OrgName,
+                   o.Id,
+                   o.Title
+               })
+           //将结果合并成一个表
+           .MergeTable()
+           //取第一条数据
+           .Where(d => d.index == 1)
+          //转分页数据
+          .ToPageListAsync(pagedDto.PageIndex, pagedDto.PageSize, total);
+            //返回数据
+            return new PagedDto<KnowledgeCreateBMDataDto>(total.Value, _mapper.Map<IReadOnlyList<KnowledgeCreateBMDataDto>>(temp));
+        }
         #endregion
 
         #region 知识列表
@@ -497,7 +531,7 @@ namespace Hotline.Api.Controllers
            .ToPageListAsync(pagedDto.PageIndex, pagedDto.PageSize, total);
 
             return new PagedDto<KnowledgeRetrievalDataDto>(total, _mapper.Map<IReadOnlyList<KnowledgeRetrievalDataDto>>(temp));
-        } 
+        }
         #endregion
 
     }

+ 1 - 1
src/Hotline.Application.Contracts/Validators/Knowledge/AddKnowledgeApplyDtoValidator.cs

@@ -11,7 +11,7 @@ namespace Hotline.Application.Contracts.Validators.Knowledge
         public AddKnowledgeApplyDtoValidator()
         {
             RuleFor(d => d.Content).NotEmpty();
-            RuleFor(d => d.DepartmentCode).NotEmpty();
+            RuleFor(d => d.DepartmentId).NotEmpty();
             RuleFor(d => d.Department).NotEmpty();
         }
     }

+ 1 - 1
src/Hotline.Application.Contracts/Validators/Knowledge/UpdateKnowledgeApplyDtoValidator.cs

@@ -13,7 +13,7 @@ namespace Hotline.Application.Contracts.Validators.Knowledge
             RuleFor(d => d.Id).NotEmpty();
             RuleFor(d => d.KnowledgeApplyType).NotEmpty();
             RuleFor(d => d.Content).NotEmpty();
-            RuleFor(d => d.DepartmentCode).NotEmpty();
+            RuleFor(d => d.DepartmentId).NotEmpty();
             RuleFor(d => d.Department).NotEmpty();
         }
     }

+ 2 - 5
src/Hotline.Application/Knowledge/KnowApplication.cs

@@ -1,16 +1,13 @@
-using Hotline.FlowEngine.Workflows;
-using Hotline.KnowledgeBase;
+using Hotline.KnowledgeBase;
 using Hotline.Repository.SqlSugar.Extensions;
 using Hotline.Settings;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.Knowledge;
-using Hotline.Share.Enums.KnowledgeBase;
 using Hotline.Users;
 using MapsterMapper;
 using SqlSugar;
 using XF.Domain.Authentications;
 using XF.Domain.Dependency;
-using XF.Domain.Exceptions;
 
 namespace Hotline.Application.Knowledge
 {
@@ -138,7 +135,7 @@ namespace Hotline.Application.Knowledge
                  .Queryable()
                  .Includes(it => it.User)
                  .Includes(it => it.SystemOrganize)
-                 .Where(p => p.DepartmentCode == _sessionContext.RequiredOrgCode)
+                 .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.OrgName.Contains(pagedDto.Keyword!))
                  .WhereIF(pagedDto.ApplyType.HasValue, d => d.KnowledgeApplyType == pagedDto.ApplyType)

+ 53 - 3
src/Hotline.Share/Dtos/Knowledge/KnowledgeApplyDto.cs

@@ -18,6 +18,11 @@ namespace Hotline.Share.Dtos.Knowledge
     /// </summary>
     public record KnowledgeApplyDto
     {
+        /// <summary>
+        /// 知识ID
+        /// </summary>
+        public string KnowledgeId { get; set; }
+
         /// <summary>
         /// 内容
         /// </summary>
@@ -29,12 +34,12 @@ namespace Hotline.Share.Dtos.Knowledge
         public EKnowledgeApplyType KnowledgeApplyType { get; set; }
 
         /// <summary>
-        /// 申请处理部门编码
+        /// 处理部门Id
         /// </summary>
-        public string DepartmentCode { get; set; }
+        public string DepartmentId { get; set; }
 
         /// <summary>
-        /// 申请处理部门名称
+        /// 处理部门名称
         /// </summary>
         public string Department { get; set; }
 
@@ -63,5 +68,50 @@ namespace Hotline.Share.Dtos.Knowledge
         /// 知识标题
         /// </summary>
         public string KBTitle { get; set; }
+
+        /// <summary>
+        /// 处理完成时间
+        /// </summary>
+        public DateTime? HandleTime { get; set; }
+
+        /// <summary>
+        /// 退回时间
+        /// </summary>
+        public DateTime? ReturnTime { get; set; }
+    }
+
+    /// <summary>
+    /// 知识申请办理
+    /// </summary>
+    public record KnowledgeApplyHandleDto
+    {
+        /// <summary>
+        /// ID
+        /// </summary>
+        public string Id { get; set; }
+
+        /// <summary>
+        /// 知识ID
+        /// </summary>
+        public string KnowledgeId { get; set; }
+
+        /// <summary>
+        /// 办理或者退回意见
+        /// </summary>
+        public string Opinion { get; set; }
+
+    }
+
+    public record DataAddApplyDto
+    {
+        /// <summary>
+        /// ID
+        /// </summary>
+        public string Id { get; set; }
+
+        /// <summary>
+        /// 内容
+        /// </summary>
+        public string Content { get; set; }
     }
 }

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

@@ -122,4 +122,30 @@ namespace Hotline.Share.Dtos.Knowledge
         /// </summary>
         public string Content { get; set; }
     }
+
+    /// <summary>
+    /// 获取知识创建部门信息
+    /// </summary>
+    public record KnowledgeCreateBMDataDto
+    {
+        /// <summary>
+        /// 知识ID
+        /// </summary>
+        public string Id { get; set; }
+
+        /// <summary>
+        /// 标题
+        /// </summary>
+        public string Title { get; set; }
+
+        /// <summary>
+        /// 处理部门Id
+        /// </summary>
+        public string DepartmentId { get; set; }
+
+        /// <summary>
+        /// 处理部门名称
+        /// </summary>
+        public string Department { get; set; }
+    }
 }

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

@@ -77,7 +77,7 @@ namespace Hotline.Share.Dtos.Knowledge
         /// <summary>
         /// 关联知识申请
         /// </summary>
-        public List<string> Applies { get; set; }
+        public string Applies { get; set; }
 
         /// <summary>
         /// 关联知识

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

@@ -87,8 +87,9 @@ public class Knowledge : WorkflowEntity//   WorkflowEntity  FullStateEntity
     /// <summary>
     /// 关联知识申请
     /// </summary>
-    [SugarColumn(ColumnDataType = "varchar(1000)", IsJson = true)]
-    public List<string> Applies { get; set; }
+    //[SugarColumn(ColumnDataType = "varchar(1000)", IsJson = true)]
+    //public List<string> Applies { get; set; }
+    public string Applies { get; set; }
 
     /// <summary>
     /// 关联知识

+ 23 - 8
src/Hotline/KnowledgeBase/KnowledgeApply.cs

@@ -11,6 +11,11 @@ namespace Hotline.KnowledgeBase;
 /// </summary>
 public class KnowledgeApply : FullStateEntity
 {
+    /// <summary>
+    /// 知识ID
+    /// </summary>
+    public string KnowledgeId { get; set; }
+
     /// <summary>
     /// 内容
     /// </summary>
@@ -27,12 +32,12 @@ public class KnowledgeApply : FullStateEntity
     public EKnowledgeApplyStatus Status { get; set; }
 
     /// <summary>
-    /// 申请处理部门编码
+    /// 处理部门Id
     /// </summary>
-    public string DepartmentCode { get; set; }
+    public string DepartmentId { get; set; }
 
     /// <summary>
-    /// 申请处理部门名称
+    /// 处理部门名称
     /// </summary>
     public string Department { get; set; }
 
@@ -41,6 +46,21 @@ public class KnowledgeApply : FullStateEntity
     /// </summary>
     public DateTime? ExpiredTime { get; set; }
 
+    /// <summary>
+    /// 处理完成时间
+    /// </summary>
+    public DateTime? HandleTime { get; set; }
+
+    /// <summary>
+    /// 退回时间
+    /// </summary>
+    public DateTime? ReturnTime { get; set; }
+
+    /// <summary>
+    /// 办理或者退回意见
+    /// </summary>
+    public string Opinion { get; set; }
+
     /// <summary>
     /// 
     /// </summary>
@@ -53,9 +73,4 @@ public class KnowledgeApply : FullStateEntity
     [Navigate(NavigateType.OneToOne, nameof(CreatorOrgId))]//一对一 
     public SystemOrganize SystemOrganize { get; set; }
 
-
-    ///// <summary>
-    ///// 处理完成
-    ///// </summary>
-    //public Operation? Handled { get; set; }
 }

+ 27 - 3
src/Hotline/KnowledgeBase/KnowledgeDomainService.cs

@@ -17,6 +17,7 @@ namespace Hotline.KnowledgeBase
         private readonly IKnowledgePVRepository _knowledgePVRepository;
         private readonly IKnowledgeWorkFlowRepository _knowledgeWorkFlowRepository;
         private readonly IWorkflowDomainService _workflowDomainService;
+        private readonly IKnowledgeApplyRepository _knowledgeApplyRepository;
 
         /// <summary>
         /// 
@@ -28,7 +29,7 @@ namespace Hotline.KnowledgeBase
         /// <param name="knowledgeWorkFlowRepository"></param>
         /// <param name="workflowDomainService"></param>
         public KnowledgeDomainService(IKnowledgeRepository knowledgeRepository, IKnowledgeTempRepository knowledgeTempRepository, IMapper mapper, IKnowledgePVRepository knowledgePVRepository, IKnowledgeWorkFlowRepository knowledgeWorkFlowRepository
-           , IWorkflowDomainService workflowDomainService)
+           , IWorkflowDomainService workflowDomainService, IKnowledgeApplyRepository knowledgeApplyRepository)
         {
             _knowledgeRepository = knowledgeRepository;
             _mapper = mapper;
@@ -36,6 +37,7 @@ namespace Hotline.KnowledgeBase
             _knowledgePVRepository = knowledgePVRepository;
             _knowledgeWorkFlowRepository = knowledgeWorkFlowRepository;
             _workflowDomainService = workflowDomainService;
+            _knowledgeApplyRepository = knowledgeApplyRepository;
         }
 
         /// <summary>
@@ -126,8 +128,18 @@ namespace Hotline.KnowledgeBase
             if (string.IsNullOrEmpty(kn.Code))
                 kn.Code = Convert.ToInt64((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds).ToString();
             kn.Status = EKnowledgeStatus.Auditing;
+            var knowledgeId = await _knowledgeRepository.AddAsync(kn, cancellationToken);
+            if (!string.IsNullOrEmpty(dto.Applies))
+            {
+                var apply = await _knowledgeApplyRepository.GetAsync(p => p.Id == dto.Applies, cancellationToken);
+                if (apply!=null)
+                {
+                    apply.KnowledgeId = knowledgeId;
+                    await _knowledgeApplyRepository.UpdateAsync(apply, cancellationToken);
+                }
+            }
 
-            return await _knowledgeRepository.AddAsync(kn, cancellationToken);
+            return knowledgeId;
         }
 
         /// <summary>
@@ -153,8 +165,20 @@ namespace Hotline.KnowledgeBase
             knowledge.Status = EKnowledgeStatus.Auditing;
             knowledge.Id = "";
             knowledge.Version = 0;
+
+            var knowledgeId = await _knowledgeRepository.AddAsync(knowledge, cancellationToken);
+            if (!string.IsNullOrEmpty(dto.Applies))
+            {
+                var apply = await _knowledgeApplyRepository.GetAsync(p => p.Id == dto.Applies, cancellationToken);
+                if (apply != null)
+                {
+                    apply.KnowledgeId = knowledgeId;
+                    await _knowledgeApplyRepository.UpdateAsync(apply, cancellationToken);
+                }
+            }
+
             //新增一条数据
-            return await _knowledgeRepository.AddAsync(knowledge, cancellationToken);
+            return knowledgeId;
 
         }