|
@@ -13,12 +13,14 @@ using Hotline.Share.Dtos;
|
|
|
using Hotline.Share.Dtos.FlowEngine;
|
|
|
using Hotline.Share.Dtos.Knowledge;
|
|
|
using Hotline.Share.Enums.KnowledgeBase;
|
|
|
+using Hotline.Share.Enums.Order;
|
|
|
using Hotline.Users;
|
|
|
using MapsterMapper;
|
|
|
using MediatR;
|
|
|
using Microsoft.AspNetCore.DataProtection.KeyManagement;
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
using SqlSugar;
|
|
|
+using System.Threading;
|
|
|
using XF.Domain.Authentications;
|
|
|
using XF.Domain.Exceptions;
|
|
|
using XF.Utility.EnumExtensions;
|
|
@@ -33,7 +35,6 @@ namespace Hotline.Api.Controllers
|
|
|
|
|
|
#region 注入
|
|
|
private readonly IKnowledgeRepository _knowledgeRepository;
|
|
|
- private readonly IKnowledgeTempRepository _knowledgeTempRepository;
|
|
|
private readonly ISessionContext _sessionContext;
|
|
|
private readonly IKnowledgeDomainService _knowledgeDomainService;
|
|
|
private readonly IMapper _mapper;
|
|
@@ -52,7 +53,6 @@ namespace Hotline.Api.Controllers
|
|
|
///
|
|
|
/// </summary>
|
|
|
/// <param name="knowledgeRepository"></param>
|
|
|
- /// <param name="knowledgeTempRepository"></param>
|
|
|
/// <param name="sessionContext"></param>
|
|
|
/// <param name="knowledgeDomainService"></param>
|
|
|
/// <param name="mapper"></param>
|
|
@@ -65,13 +65,11 @@ namespace Hotline.Api.Controllers
|
|
|
/// <param name="userRepository"></param>
|
|
|
/// <param name="knowledgeTypeRepository"></param>
|
|
|
/// <param name="hotspotTypeRepository"></param>
|
|
|
- public KnowledgeController(IKnowledgeRepository knowledgeRepository, IKnowledgeTempRepository knowledgeTempRepository,
|
|
|
- ISessionContext sessionContext, IKnowledgeDomainService knowledgeDomainService, IMapper mapper, IKnowApplication knowApplication,
|
|
|
+ public KnowledgeController(IKnowledgeRepository knowledgeRepository, ISessionContext sessionContext, IKnowledgeDomainService knowledgeDomainService, IMapper mapper, IKnowApplication knowApplication,
|
|
|
IMediator mediator, IWorkflowApplication workflowApplication, IKnowledgeWorkFlowRepository knowledgeWorkFlowRepository, IWorkflowDomainService workflowDomainService
|
|
|
, IDefinitionDomainService definitionDomainService, IUserRepository userRepository, IKnowledgeTypeRepository knowledgeTypeRepository, IHotspotTypeRepository hotspotTypeRepository)
|
|
|
{
|
|
|
_knowledgeRepository = knowledgeRepository;
|
|
|
- _knowledgeTempRepository = knowledgeTempRepository;
|
|
|
_sessionContext = sessionContext;
|
|
|
_knowledgeDomainService = knowledgeDomainService;
|
|
|
_mapper = mapper;
|
|
@@ -88,102 +86,6 @@ namespace Hotline.Api.Controllers
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
- #region 草稿箱
|
|
|
- /// <summary>
|
|
|
- /// 草稿箱-新增
|
|
|
- /// </summary>
|
|
|
- /// <param name="dto"></param>
|
|
|
- /// <returns></returns>
|
|
|
- [Permission(EPermission.KnowledgeDraftsAdd)]
|
|
|
- [HttpPost("adddrafts")]
|
|
|
- public async Task<string> AddKnowledgeDrafts([FromBody] AddKnowledgeDto dto)
|
|
|
- {
|
|
|
- var kn = _mapper.Map<KnowledgeTemp>(dto);
|
|
|
- if (string.IsNullOrEmpty(dto.Code))
|
|
|
- kn.Code = Convert.ToInt64((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds).ToString();
|
|
|
-
|
|
|
- return await _knowledgeTempRepository.AddAsync(kn, HttpContext.RequestAborted);
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 草稿箱-修改
|
|
|
- /// </summary>
|
|
|
- /// <param name="dto"></param>
|
|
|
- /// <returns></returns>
|
|
|
- [Permission(EPermission.KnowledgeDraftsUpdate)]
|
|
|
- [HttpPut("updatedrafts")]
|
|
|
- public async Task UpdateKnowledgeDrafts([FromBody] UpdateKnowledgeDto dto)
|
|
|
- {
|
|
|
- var kn = _mapper.Map<KnowledgeTemp>(dto);
|
|
|
- await _knowledgeTempRepository.UpdateAsync(kn, HttpContext.RequestAborted);
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 草稿箱-查询详情
|
|
|
- /// </summary>
|
|
|
- /// <param name="Id"></param>
|
|
|
- /// <returns></returns>
|
|
|
- [HttpGet("draftsinfo/{Id}")]
|
|
|
- public async Task<KnowledgeInfoDto> KnowledgeDraftsInfo(string Id)
|
|
|
- {
|
|
|
- var temp = await _knowledgeTempRepository.GetAsync(Id, HttpContext.RequestAborted);
|
|
|
- if (temp is null)
|
|
|
- throw UserFriendlyException.SameMessage("知识草稿查询失败!");
|
|
|
-
|
|
|
- var knowledgeInfoDto = _mapper.Map<KnowledgeInfoDto>(temp);
|
|
|
-
|
|
|
- //分类
|
|
|
- var type = await _knowledgeTypeRepository.GetAsync(temp.KnowledgeTypeId, HttpContext.RequestAborted);
|
|
|
- if (type != null)
|
|
|
- knowledgeInfoDto.KnowledgeTypeName = type.SpliceName;
|
|
|
-
|
|
|
- //热点
|
|
|
- var hot = await _hotspotTypeRepository.GetAsync(temp.HotspotId, HttpContext.RequestAborted);
|
|
|
- if (hot != null)
|
|
|
- knowledgeInfoDto.HotspotName = hot.HotSpotFullName;
|
|
|
-
|
|
|
- return knowledgeInfoDto;
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 草稿箱删除
|
|
|
- /// </summary>
|
|
|
- /// <param name="Id"></param>
|
|
|
- /// <returns></returns>
|
|
|
- [Permission(EPermission.KnowledgeDraftsDelete)]
|
|
|
- [HttpDelete("removedrafts")]
|
|
|
- public async Task RemoveKnowledgeDrafts(string Id)
|
|
|
- {
|
|
|
- if (string.IsNullOrEmpty(Id))
|
|
|
- throw UserFriendlyException.SameMessage("Id不能为空!");
|
|
|
- await _knowledgeTempRepository.RemoveAsync(p => p.Id == Id, false, HttpContext.RequestAborted);
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 我的草稿箱
|
|
|
- /// </summary>
|
|
|
- /// <param name="pagedDto"></param>
|
|
|
- /// <returns></returns>
|
|
|
- [Permission(EPermission.KnowledgeMyDraftsList)]
|
|
|
- [HttpGet("mydraftslist")]
|
|
|
- public async Task<PagedDto<KnowledgeDataDto>> MyDraftsList([FromQuery] MyDraftsListPagedDto pagedDto)
|
|
|
- {
|
|
|
- var (total, items) = await _knowledgeTempRepository
|
|
|
- .Queryable()
|
|
|
- .Includes(it => it.User)
|
|
|
- .Includes(it => it.KnowledgeType)
|
|
|
- .Where(p => p.CreatorId == _sessionContext.RequiredUserId)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(pagedDto.Keyword), d => d.Title.Contains(pagedDto.Keyword!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(pagedDto.KnowledgeTypeId), d => d.KnowledgeTypeId == pagedDto.KnowledgeTypeId)
|
|
|
- .WhereIF(pagedDto.StartTime != null, d => d.CreationTime >= pagedDto.StartTime)
|
|
|
- .WhereIF(pagedDto.EndTime != null, d => d.CreationTime <= pagedDto.EndTime)
|
|
|
- .OrderByDescending(p => p.CreationTime)
|
|
|
- .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, HttpContext.RequestAborted);
|
|
|
-
|
|
|
- return new PagedDto<KnowledgeDataDto>(total, _mapper.Map<IReadOnlyList<KnowledgeDataDto>>(items));
|
|
|
- }
|
|
|
- #endregion
|
|
|
-
|
|
|
#region 知识管理
|
|
|
/// <summary>
|
|
|
/// 知识库-知识修改-查询详情
|
|
@@ -252,22 +154,46 @@ namespace Hotline.Api.Controllers
|
|
|
[HttpPost("add")]
|
|
|
public async Task<string> AddKnowledge([FromBody] AddKnowledgeDto dto)
|
|
|
{
|
|
|
- //知识处理逻辑
|
|
|
- return await _knowledgeDomainService.KnowledgeAdd(dto, HttpContext.RequestAborted);
|
|
|
+ var kn = _mapper.Map<Knowledge>(dto);
|
|
|
+
|
|
|
+ //Code为空,从新生成Code
|
|
|
+ if (string.IsNullOrEmpty(kn.Code))
|
|
|
+ kn.Code = Convert.ToInt64((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds).ToString();
|
|
|
+
|
|
|
+ return await _knowledgeRepository.AddAsync(kn, HttpContext.RequestAborted);
|
|
|
}
|
|
|
|
|
|
- ///// <summary>
|
|
|
- ///// 知识库-修改
|
|
|
- ///// </summary>
|
|
|
- ///// <param name="dto"></param>
|
|
|
- ///// <returns></returns>
|
|
|
- //[Permission(EPermission.KnowledgeUpdate)]
|
|
|
- //[HttpPut("update")]
|
|
|
- //public async Task<string> UpdateKnowledge([FromBody] UpdateKnowledgeDto dto)
|
|
|
- //{
|
|
|
- // //知识更新流程业务
|
|
|
- // return await _knowledgeDomainService.KnowledgeUpdate(dto, HttpContext.RequestAborted);
|
|
|
- //}
|
|
|
+ /// <summary>
|
|
|
+ /// 知识库-修改
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [Permission(EPermission.KnowledgeUpdate)]
|
|
|
+ [HttpPut("update")]
|
|
|
+ public async Task UpdateKnowledge([FromBody] UpdateKnowledgeDto dto)
|
|
|
+ {
|
|
|
+ if (dto.Status != EKnowledgeStatus.Drafts)
|
|
|
+ throw UserFriendlyException.SameMessage("非草稿数据不可修改");
|
|
|
+ var kn = _mapper.Map<Knowledge>(dto);
|
|
|
+
|
|
|
+ await _knowledgeRepository.UpdateAsync(kn, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 删除知识
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="id"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpDelete("{id}")]
|
|
|
+ public async Task Remove(string id)
|
|
|
+ {
|
|
|
+ var knowledge = await _knowledgeRepository.GetAsync(id, HttpContext.RequestAborted);
|
|
|
+ if (knowledge == null) return;
|
|
|
+ if (knowledge.Status != EKnowledgeStatus.Drafts)
|
|
|
+ throw UserFriendlyException.SameMessage("非草稿数据不可删除");
|
|
|
+ await _knowledgeRepository.RemoveAsync(knowledge, false, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 知识库-知识下架
|
|
@@ -323,17 +249,6 @@ namespace Hotline.Api.Controllers
|
|
|
await _knowledgeDomainService.KnowledgeRevoke(workFlowId, HttpContext.RequestAborted);
|
|
|
}
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// 根据workFlowId,查询审批明细
|
|
|
- /// </summary>
|
|
|
- /// <param name="workFlowId"></param>
|
|
|
- /// <returns></returns>
|
|
|
- [HttpGet("getworkflow")]
|
|
|
- public async Task<Workflow> GetWorkflow(string workFlowId)
|
|
|
- {
|
|
|
- return await _workflowDomainService.GetWorkflowAsync(workFlowId, withSteps: true, withSupplements: true, withAssigns: true, cancellationToken: HttpContext.RequestAborted);
|
|
|
- }
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 知识申请-关联知识-获取知识列表
|
|
|
/// </summary>
|
|
@@ -344,7 +259,6 @@ namespace Hotline.Api.Controllers
|
|
|
var temp = await _knowledgeRepository
|
|
|
.Queryable()
|
|
|
.LeftJoin<SystemOrganize>((o, sys) => o.CreatorOrgId == sys.Id)
|
|
|
- .Where((o, sys) => o.IsDeleted == false)
|
|
|
//重新构建数据
|
|
|
.Select((o, sys) => new
|
|
|
{
|
|
@@ -367,6 +281,32 @@ namespace Hotline.Api.Controllers
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
+ #region 我的草稿箱
|
|
|
+ /// <summary>
|
|
|
+ /// 我的草稿箱
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="pagedDto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [Permission(EPermission.KnowledgeMyDraftsList)]
|
|
|
+ [HttpGet("mydraftslist")]
|
|
|
+ public async Task<PagedDto<KnowledgeDataDto>> MyDraftsList([FromQuery] MyDraftsListPagedDto pagedDto)
|
|
|
+ {
|
|
|
+ var (total, items) = await _knowledgeRepository
|
|
|
+ .Queryable()
|
|
|
+ .Includes(it => it.User)
|
|
|
+ .Includes(it => it.KnowledgeType)
|
|
|
+ .Where(p => p.CreatorId == _sessionContext.RequiredUserId && p.Status == EKnowledgeStatus.Drafts)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(pagedDto.Keyword), d => d.Title.Contains(pagedDto.Keyword!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(pagedDto.KnowledgeTypeId), d => d.KnowledgeTypeId == pagedDto.KnowledgeTypeId)
|
|
|
+ .WhereIF(pagedDto.StartTime != null, d => d.CreationTime >= pagedDto.StartTime)
|
|
|
+ .WhereIF(pagedDto.EndTime != null, d => d.CreationTime <= pagedDto.EndTime)
|
|
|
+ .OrderByDescending(p => p.CreationTime)
|
|
|
+ .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ return new PagedDto<KnowledgeDataDto>(total, _mapper.Map<IReadOnlyList<KnowledgeDataDto>>(items));
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+
|
|
|
#region 知识列表
|
|
|
/// <summary>
|
|
|
/// 知识库列表页面枚举值
|
|
@@ -413,7 +353,6 @@ namespace Hotline.Api.Controllers
|
|
|
var Keyword = pagedDto.Keyword?.Trim();
|
|
|
var temp = await _knowledgeRepository
|
|
|
.Queryable()
|
|
|
- .Where(p => p.IsDeleted == false)
|
|
|
|
|
|
.Select(o => new
|
|
|
{
|
|
@@ -554,13 +493,9 @@ namespace Hotline.Api.Controllers
|
|
|
[HttpGet("knowpopscreen")]
|
|
|
public async Task<PagedDto<KnowledgeRetrievalDataDto>> KnowPopScreen([FromQuery] KnowledgePopScreenPagedListDto pagedDto)
|
|
|
{
|
|
|
- //if (string.IsNullOrEmpty(pagedDto.Keyword)&& string.IsNullOrEmpty(pagedDto.HotspotId))
|
|
|
- // throw UserFriendlyException.SameMessage("请选择热点或输入关键字");
|
|
|
-
|
|
|
RefAsync<int> total = 0;
|
|
|
var temp = await _knowledgeRepository
|
|
|
.Queryable()
|
|
|
- .Where(p => p.IsDeleted == false)
|
|
|
.Select(o => new
|
|
|
{
|
|
|
index = SqlFunc.RowNumber($"{o.Version} desc ", $"{o.Code}"),
|
|
@@ -600,18 +535,6 @@ namespace Hotline.Api.Controllers
|
|
|
await StartFlow(id, WorkflowModuleConsts.KnowledgeAdd, EKnowledgeApplyType.Add, dto);
|
|
|
}
|
|
|
|
|
|
- ///// <summary>
|
|
|
- ///// 修改-开始流程
|
|
|
- ///// </summary>
|
|
|
- ///// <param name="id">知识id</param>
|
|
|
- ///// <param name="dto">流程开启参数</param>
|
|
|
- ///// <returns></returns>
|
|
|
- //[HttpPost("{id}/update-startflow")]
|
|
|
- //public async Task UpdateStartFlow(string id, [FromBody] StartWorkflowDto dto)
|
|
|
- //{
|
|
|
- // await StartFlow(id, WorkflowModuleConsts.KnowledgeUpdate, EKnowledgeApplyType.Update, dto);
|
|
|
- //}
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 删除-开始流程
|
|
|
/// </summary>
|
|
@@ -634,16 +557,6 @@ namespace Hotline.Api.Controllers
|
|
|
return await _workflowApplication.GetStartOptionsAsync(WorkflowModuleConsts.KnowledgeAdd, HttpContext.RequestAborted);
|
|
|
}
|
|
|
|
|
|
- ///// <summary>
|
|
|
- ///// 查询知识库办理流程开启参数-修改
|
|
|
- ///// </summary>
|
|
|
- ///// <returns></returns>
|
|
|
- //[HttpGet("update-flow-start")]
|
|
|
- //public async Task<IReadOnlyList<NextStepOptions>> GetUpdateFlowStartOptionsAsync()
|
|
|
- //{
|
|
|
- // return await _workflowApplication.GetStartOptionsAsync(WorkflowModuleConsts.KnowledgeUpdate, HttpContext.RequestAborted);
|
|
|
- //}
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 查询知识库办理流程开启参数-删除
|
|
|
/// </summary>
|
|
@@ -697,10 +610,6 @@ namespace Hotline.Api.Controllers
|
|
|
dto.Title = knowledge.Title;
|
|
|
await _workflowApplication.StartWorkflowAsync(dto, flowId, HttpContext.RequestAborted);
|
|
|
|
|
|
-
|
|
|
- //if (eKnowledgeApplyType != EKnowledgeApplyType.Delete)
|
|
|
- // //修改流程ID
|
|
|
- // await _knowledgeDomainService.UpdateWorkFlowId(id, workflowId, HttpContext.RequestAborted);
|
|
|
}
|
|
|
#endregion
|
|
|
|