|
@@ -33,6 +33,7 @@ using Microsoft.AspNetCore.Mvc;
|
|
|
using SqlSugar;
|
|
|
using System.Text;
|
|
|
using Hotline.Configurations;
|
|
|
+using Hotline.Share.Requests;
|
|
|
using Microsoft.Extensions.Options;
|
|
|
using XF.Domain.Authentications;
|
|
|
using XF.Domain.Exceptions;
|
|
@@ -207,42 +208,22 @@ namespace Hotline.Api.Controllers
|
|
|
[HttpPost]
|
|
|
public async Task<string> Add([FromBody] AddKnowledgeDto dto)
|
|
|
{
|
|
|
- //add kn
|
|
|
- var kn = _mapper.Map<Knowledge>(dto);
|
|
|
- kn.SourceOrganizeId = _sessionContext.RequiredOrgId;
|
|
|
- var any = await _knowledgeRepository.Queryable().Where(x => x.Status == EKnowledgeStatus.OnShelf && x.Title == kn.Title).AnyAsync();
|
|
|
- if (any) throw UserFriendlyException.SameMessage("当前知识标题存在重复标题!");
|
|
|
-
|
|
|
- //Code为空,从新生成Code
|
|
|
- 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.Drafts;
|
|
|
- kn.InitId();
|
|
|
- if (dto.Files.NotNullOrEmpty()) kn.FileJson = await _fileRepository.AddFileAsync(dto.Files, kn.Id, "", HttpContext.RequestAborted);
|
|
|
- //await _knowledgeRepository.AddAsync(kn, HttpContext.RequestAborted);
|
|
|
-
|
|
|
- if (dto.KnowledgeType.Any())
|
|
|
- {
|
|
|
- List<KnowledgeRelationType> types = _mapper.Map<List<KnowledgeRelationType>>(dto.Data.KnowledgeType);
|
|
|
- types.ForEach(x => x.KnowledgeId = kn.Id);
|
|
|
- await _knowledgeRelationTypeRepository.AddRangeAsync(types, HttpContext.RequestAborted);
|
|
|
- }
|
|
|
+ var kn = await _knowledgeDomainService.AddKnowledgeAsync(dto, HttpContext.RequestAborted);
|
|
|
+ return kn.Id;
|
|
|
+ }
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 知识库-新增并发起审批(new)
|
|
|
+ /// </summary>
|
|
|
+ [HttpPost("add-and-approve")]
|
|
|
+ public async Task<string> AddAndApprove([FromBody] AddKnowledgeDto dto)
|
|
|
+ {
|
|
|
+ var kn = await _knowledgeDomainService.AddKnowledgeAsync(dto, HttpContext.RequestAborted);
|
|
|
|
|
|
- //发起新增审批
|
|
|
- var approveAdd = new KnowledgeApprove
|
|
|
- {
|
|
|
- KnowledgeId = kn.Id,
|
|
|
- KnowledgeApproveType = EKnowledgeApproveType.Add,
|
|
|
- KnowledgeApproveStatus = EKnowledgeApproveStatus.Unhandle,
|
|
|
- Knowledge = kn
|
|
|
- };
|
|
|
- await _knowledgeApproRepository.AddNav(approveAdd)
|
|
|
- .Include(d => d.Knowledge)
|
|
|
- .ExecuteCommandAsync();
|
|
|
+ var approve = await _knowledgeDomainService.AddKnowledgeApproveAsync(EKnowledgeApproveType.Add, kn.Id, null,
|
|
|
+ HttpContext.RequestAborted);
|
|
|
|
|
|
- return kn.Id;
|
|
|
+ return approve.Id;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -404,15 +385,43 @@ namespace Hotline.Api.Controllers
|
|
|
/// <returns></returns>
|
|
|
[HttpPut]
|
|
|
[LogFilter("知识修改")]
|
|
|
- public async Task UpdateKnowledge([FromBody] UpdateKnowledgeDto dto)
|
|
|
+ public Task Update([FromBody] UpdateKnowledgeDto dto) =>
|
|
|
+ _knowledgeDomainService.UpdateKnowledgeAsync(dto, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 知识库-修改(new)
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPut("update-and-approve")]
|
|
|
+ [LogFilter("知识修改")]
|
|
|
+ public async Task UpdateAndApprove([FromBody] UpdateKnowledgeAndApproveDto dto)
|
|
|
{
|
|
|
+ var kn = await _knowledgeDomainService.UpdateKnowledgeAsync(dto, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ var exists = await _knowledgeApproRepository.Queryable()
|
|
|
+ .AnyAsync(d => d.KnowledgeId == dto.Id && d.KnowledgeApproveStatus == EKnowledgeApproveStatus.Unhandle,
|
|
|
+ HttpContext.RequestAborted);
|
|
|
+ if (exists)
|
|
|
+ throw new UserFriendlyException($"该知识存在待审批申请, knId: {dto.Id}", "该知识存在待审批申请, 请先审批");
|
|
|
+
|
|
|
+ if (kn.Status == EKnowledgeStatus.Drafts)
|
|
|
+ {
|
|
|
+ await _knowledgeDomainService.AddKnowledgeApproveAsync(EKnowledgeApproveType.Add, kn.Id, null,
|
|
|
+ HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ await _knowledgeDomainService.AddKnowledgeApproveAsync(EKnowledgeApproveType.Update, kn.Id, dto.Opinion,
|
|
|
+ HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 批量审核
|
|
|
- /// </summary>
|
|
|
- /// <returns></returns>
|
|
|
- [HttpPost("batch_audit")]
|
|
|
+ /// 批量审核
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("batch_audit")]
|
|
|
public async Task<string> KnowledgeBatchAuditAsync([FromBody] KnowledgeBatchAuditInDto dto)
|
|
|
{
|
|
|
var result = new StringBuilder();
|
|
@@ -510,6 +519,36 @@ namespace Hotline.Api.Controllers
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 删除知识(new)
|
|
|
+ /// </summary>
|
|
|
+ [HttpDelete("remove")]
|
|
|
+ [LogFilter("删除知识")]
|
|
|
+ public async Task Remove([FromBody] DeleteKnowledgeDto dto)
|
|
|
+ {
|
|
|
+ var knowledge = await _knowledgeRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
|
|
|
+ if (knowledge == null)
|
|
|
+ throw UserFriendlyException.SameMessage("无效知识库数据");
|
|
|
+ if (knowledge.Status == EKnowledgeStatus.OnShelf || knowledge.Status == EKnowledgeStatus.Auditing)
|
|
|
+ throw UserFriendlyException.SameMessage("知识库数据不可删除");
|
|
|
+
|
|
|
+ if (knowledge.Status == EKnowledgeStatus.Drafts || knowledge.Status == EKnowledgeStatus.Revert)
|
|
|
+ {
|
|
|
+ await _knowledgeRepository.RemoveAsync(knowledge, false, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var exists = await _knowledgeApproRepository.Queryable()
|
|
|
+ .AnyAsync(d => d.KnowledgeId == dto.Id && d.KnowledgeApproveStatus == EKnowledgeApproveStatus.Unhandle,
|
|
|
+ HttpContext.RequestAborted);
|
|
|
+ if (exists)
|
|
|
+ throw new UserFriendlyException($"该知识存在待审批申请, knId: {dto.Id}", "该知识存在待审批申请, 请先审批");
|
|
|
+
|
|
|
+ await _knowledgeDomainService.AddKnowledgeApproveAsync(EKnowledgeApproveType.Delete, knowledge.Id, dto.Opinion,
|
|
|
+ HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 增加搜索量
|
|
|
/// </summary>
|
|
@@ -743,7 +782,7 @@ namespace Hotline.Api.Controllers
|
|
|
var tabAuditingNames = new List<KeyValuePair<string, string>>
|
|
|
{
|
|
|
new KeyValuePair<string, string>("", "全部"),
|
|
|
- new KeyValuePair<string, string>("KnowledgeAdd", "新增审核"),
|
|
|
+ new KeyValuePair<string, string>("AddKnowledgeAsync", "新增审核"),
|
|
|
new KeyValuePair<string, string>("KnowledgeUpdate", "修改审核"),
|
|
|
new KeyValuePair<string, string>("KnowledgeDelete", "删除审核"),
|
|
|
new KeyValuePair<string, string>("KnowledgeOffshelf", "下架审核"),
|
|
@@ -999,7 +1038,7 @@ namespace Hotline.Api.Controllers
|
|
|
//[HttpPost("{id}/add-startflow")]
|
|
|
//public async Task AddStartFlow(string id, [FromBody] StartWorkflowDto dto)
|
|
|
//{
|
|
|
- // await StartFlow(id, WorkflowModuleConsts.KnowledgeAdd, EKnowledgeApplyType.Add, dto);
|
|
|
+ // await StartFlow(id, WorkflowModuleConsts.AddKnowledgeAsync, EKnowledgeApplyType.Add, dto);
|
|
|
//}
|
|
|
|
|
|
///// <summary>
|
|
@@ -1686,6 +1725,49 @@ namespace Hotline.Api.Controllers
|
|
|
|
|
|
#region 知识审批
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 查询待审批列表(new)
|
|
|
+ /// </summary>
|
|
|
+ [HttpGet("approve-paged")]
|
|
|
+ public async Task<PagedDto<KnowledgeApproveDto>> QueryKnowledgeApprovePaged([FromQuery] QueryKnowledgeApprovePagedRequest request)
|
|
|
+ {
|
|
|
+ var query = _knowledgeApproRepository.Queryable()
|
|
|
+ .Includes(d => d.Creator);
|
|
|
+ if (request.HasApproved)
|
|
|
+ {
|
|
|
+ //已审批
|
|
|
+ query.Includes(d => d.Approver)
|
|
|
+ .Where(d =>
|
|
|
+ d.ApproverId == _sessionContext.RequiredUserId
|
|
|
+ && d.KnowledgeApproveStatus != EKnowledgeApproveStatus.Unhandle);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //待审批
|
|
|
+ query.Where(d => d.KnowledgeApproveStatus == EKnowledgeApproveStatus.Unhandle);
|
|
|
+ }
|
|
|
+
|
|
|
+ var (total, items) = await query.ToPagedListAsync(request, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ return new PagedDto<KnowledgeApproveDto>(total, _mapper.Map<IReadOnlyList<KnowledgeApproveDto>>(items));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 查询审核历史(new)
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("approve-history/{knowledgeId}")]
|
|
|
+ public async Task<IReadOnlyList<KnowledgeApproveDto>> QueryKnowledgeApproveByKnId(string knowledgeId)
|
|
|
+ {
|
|
|
+ var approves = await _knowledgeApproRepository.Queryable()
|
|
|
+ .Includes(d => d.Creator)
|
|
|
+ .Includes(d=>d.Approver)
|
|
|
+ .Where(d=>d.KnowledgeId == knowledgeId)
|
|
|
+ .ToListAsync(HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ return _mapper.Map<IReadOnlyList<KnowledgeApproveDto>>(approves);
|
|
|
+ }
|
|
|
+
|
|
|
#endregion
|
|
|
}
|
|
|
}
|