|
@@ -1,14 +1,20 @@
|
|
|
-using DotNetCore.CAP;
|
|
|
+using DocumentFormat.OpenXml.Wordprocessing;
|
|
|
+using DotNetCore.CAP;
|
|
|
using Hotline.Api.Filter;
|
|
|
using Hotline.Application.Bulletin;
|
|
|
+using Hotline.Application.ExportExcel;
|
|
|
+using Hotline.Application.ExportWord;
|
|
|
using Hotline.Application.FlowEngine;
|
|
|
using Hotline.Application.Knowledge;
|
|
|
+using Hotline.Application.Systems;
|
|
|
+using Hotline.Application.Tools;
|
|
|
using Hotline.File;
|
|
|
using Hotline.FlowEngine.WorkflowModules;
|
|
|
using Hotline.KnowledgeBase;
|
|
|
using Hotline.KnowledgeBase.Notifies;
|
|
|
using Hotline.Permissions;
|
|
|
using Hotline.Repository.SqlSugar.Extensions;
|
|
|
+using Hotline.Repository.SqlSugar.Knowledge;
|
|
|
using Hotline.Repository.SqlSugar.Ts;
|
|
|
using Hotline.Settings;
|
|
|
using Hotline.Settings.Hotspots;
|
|
@@ -16,13 +22,19 @@ using Hotline.Share.Dtos;
|
|
|
using Hotline.Share.Dtos.File;
|
|
|
using Hotline.Share.Dtos.FlowEngine;
|
|
|
using Hotline.Share.Dtos.Knowledge;
|
|
|
+using Hotline.Share.Dtos.Order;
|
|
|
+using Hotline.Share.Enums.Article;
|
|
|
using Hotline.Share.Enums.KnowledgeBase;
|
|
|
using Hotline.Share.Mq;
|
|
|
+using Hotline.Share.Tools;
|
|
|
using Hotline.Users;
|
|
|
+using J2N.Text;
|
|
|
+using Mapster;
|
|
|
using MapsterMapper;
|
|
|
using MediatR;
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
using Microsoft.EntityFrameworkCore.Metadata.Internal;
|
|
|
+using Org.BouncyCastle.Utilities.IO;
|
|
|
using SqlSugar;
|
|
|
using System.Threading;
|
|
|
using XF.Domain.Authentications;
|
|
@@ -37,6 +49,11 @@ namespace Hotline.Api.Controllers
|
|
|
{
|
|
|
|
|
|
#region 注入
|
|
|
+ private readonly IExportApplication _exportApplication;
|
|
|
+ private readonly IRepository<KnowledgeHotWord> _knowledgeHotWordRepository;
|
|
|
+ private readonly IRepository<KnowledgeWord> _knowledgeWordRepository;
|
|
|
+ private readonly IWordHelperService _wordHelperService;
|
|
|
+ private readonly BaseDataApplication _baseDataApplication;
|
|
|
private readonly IKnowledgeRepository _knowledgeRepository;
|
|
|
private readonly ISessionContext _sessionContext;
|
|
|
private readonly IKnowledgeDomainService _knowledgeDomainService;
|
|
@@ -60,6 +77,8 @@ namespace Hotline.Api.Controllers
|
|
|
private readonly ICapPublisher _capPublisher;
|
|
|
private readonly IRepository<KnowledgeRelationType> _knowledgeRelationTypeRepository;
|
|
|
private readonly IBulletinApplication _bulletinApplication;
|
|
|
+ private readonly IRepository<KnowledgeCollectGroup> _knowledgeCollectGroupRepository;
|
|
|
+ private readonly IRepository<KnowledgePv> _knowledgePvepository;
|
|
|
|
|
|
|
|
|
public KnowledgeController(
|
|
@@ -85,8 +104,15 @@ namespace Hotline.Api.Controllers
|
|
|
IFileRepository fileRepository,
|
|
|
ICapPublisher capPublisher,
|
|
|
IRepository<KnowledgeRelationType> knowledgeRelationTypeRepository,
|
|
|
- IBulletinApplication bulletinApplication
|
|
|
- )
|
|
|
+ IBulletinApplication bulletinApplication,
|
|
|
+ IRepository<KnowledgeCollectGroup> knowledgeCollectGroupRepository,
|
|
|
+ IExportApplication exportApplication,
|
|
|
+ BaseDataApplication baseDataApplication,
|
|
|
+ IWordHelperService wordHelperService,
|
|
|
+ IRepository<KnowledgePv> knowledgePvepository,
|
|
|
+ IRepository<KnowledgeWord> knowledgeWordRepository,
|
|
|
+ IRepository<KnowledgeHotWord> knowledgeWordHotRepository,
|
|
|
+ IRepository<KnowledgeHotWord> knowledgeHotWordRepository)
|
|
|
{
|
|
|
_knowledgeRepository = knowledgeRepository;
|
|
|
_sessionContext = sessionContext;
|
|
@@ -110,7 +136,14 @@ namespace Hotline.Api.Controllers
|
|
|
_fileRepository = fileRepository;
|
|
|
_capPublisher = capPublisher;
|
|
|
_knowledgeRelationTypeRepository = knowledgeRelationTypeRepository;
|
|
|
- _bulletinApplication= bulletinApplication;
|
|
|
+ _bulletinApplication = bulletinApplication;
|
|
|
+ _knowledgeCollectGroupRepository = knowledgeCollectGroupRepository;
|
|
|
+ _exportApplication = exportApplication;
|
|
|
+ _baseDataApplication = baseDataApplication;
|
|
|
+ _wordHelperService = wordHelperService;
|
|
|
+ _knowledgePvepository = knowledgePvepository;
|
|
|
+ _knowledgeWordRepository = knowledgeWordRepository;
|
|
|
+ _knowledgeHotWordRepository = knowledgeHotWordRepository;
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
@@ -130,7 +163,7 @@ namespace Hotline.Api.Controllers
|
|
|
//var addDto = _mapper.Map<AddKnowledgeDto>(dto.Data);
|
|
|
var kn = _mapper.Map<Knowledge>(dto.Data);
|
|
|
kn.SourceOrganizeId = _sessionContext.RequiredOrgId;
|
|
|
- var any = await _knowledgeRepository.Queryable().Where(x => x.Status == EKnowledgeStatus.OnShelf && x.Title == kn.Title).AnyAsync();
|
|
|
+ var any = await _knowledgeRepository.Queryable().Where(x => x.Status == EKnowledgeStatus.OnShelf && x.Title == kn.Title).AnyAsync();
|
|
|
if (any) throw UserFriendlyException.SameMessage("当前知识标题存在重复标题!");
|
|
|
|
|
|
//Code为空,从新生成Code
|
|
@@ -141,13 +174,14 @@ namespace Hotline.Api.Controllers
|
|
|
kn.InitId();
|
|
|
if (dto.Data.Files.Any()) kn.FileJson = await _fileRepository.AddFileAsync(dto.Data.Files, kn.Id, "", HttpContext.RequestAborted);
|
|
|
await _knowledgeRepository.AddAsync(kn, HttpContext.RequestAborted);
|
|
|
+
|
|
|
if (dto.Data.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);
|
|
|
- }
|
|
|
- if (dto.Workflow != null && !string.IsNullOrEmpty(kn.Id))
|
|
|
+ List<KnowledgeRelationType> types = _mapper.Map<List<KnowledgeRelationType>>(dto.Data.KnowledgeType);
|
|
|
+ types.ForEach(x => x.KnowledgeId = kn.Id);
|
|
|
+ await _knowledgeRelationTypeRepository.AddRangeAsync(types, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ if (dto.Workflow != null && !string.IsNullOrEmpty(kn.Id))
|
|
|
{
|
|
|
var startDto = _mapper.Map<StartWorkflowDto>(dto.Workflow);
|
|
|
startDto.DefinitionModuleCode = WorkflowModuleConsts.KnowledgeAdd;
|
|
@@ -159,11 +193,10 @@ namespace Hotline.Api.Controllers
|
|
|
//knowledge.Status = EKnowledgeStatus.Auditing;
|
|
|
//await _knowledgeRepository.UpdateAsync(knowledge, HttpContext.RequestAborted);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
return kn.Id;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 知识库-知识下架
|
|
|
/// </summary>
|
|
@@ -253,22 +286,22 @@ namespace Hotline.Api.Controllers
|
|
|
_mapper.Map(dto.Data, knowledge);
|
|
|
//if (update.Tags.Any()) await _repositoryts.UpdateVectorAsync(update.Id, update.Tags, HttpContext.RequestAborted);
|
|
|
|
|
|
- if (dto.Data.Files.Any())
|
|
|
+ if (dto.Data.Files.Any())
|
|
|
knowledge.FileJson = await _fileRepository.AddFileAsync(dto.Data.Files, knowledge.Id, "", HttpContext.RequestAborted);
|
|
|
else
|
|
|
- knowledge.FileJson = new List<Share.Dtos.File.FileJson>();
|
|
|
- if (dto.Workflow != null) knowledge.Renewaln = knowledge.Status != EKnowledgeStatus.Drafts;
|
|
|
+ knowledge.FileJson = new List<Share.Dtos.File.FileJson>();
|
|
|
+ if (dto.Workflow != null) knowledge.Renewaln = knowledge.Status != EKnowledgeStatus.Drafts;
|
|
|
await _knowledgeRepository.UpdateAsync(knowledge, HttpContext.RequestAborted);
|
|
|
if (dto.Data.KnowledgeType.Any())
|
|
|
{
|
|
|
- var anyRelationTypes = await _knowledgeRelationTypeRepository.Queryable().Where(x => x.KnowledgeId == knowledge.Id).ToListAsync();
|
|
|
- if (anyRelationTypes.Any())
|
|
|
- await _knowledgeRelationTypeRepository.RemoveRangeAsync(anyRelationTypes);
|
|
|
- List<KnowledgeRelationType> types = _mapper.Map<List<KnowledgeRelationType>>(dto.Data.KnowledgeType);
|
|
|
- types.ForEach(x => x.KnowledgeId = update.Id);
|
|
|
- await _knowledgeRelationTypeRepository.AddRangeAsync(types, HttpContext.RequestAborted);
|
|
|
+ var anyRelationTypes = await _knowledgeRelationTypeRepository.Queryable().Where(x => x.KnowledgeId == knowledge.Id).ToListAsync();
|
|
|
+ if (anyRelationTypes.Any())
|
|
|
+ await _knowledgeRelationTypeRepository.RemoveRangeAsync(anyRelationTypes);
|
|
|
+ List<KnowledgeRelationType> types = _mapper.Map<List<KnowledgeRelationType>>(dto.Data.KnowledgeType);
|
|
|
+ types.ForEach(x => x.KnowledgeId = update.Id);
|
|
|
+ await _knowledgeRelationTypeRepository.AddRangeAsync(types, HttpContext.RequestAborted);
|
|
|
}
|
|
|
- if (dto.Workflow != null)
|
|
|
+ if (dto.Workflow != null)
|
|
|
{
|
|
|
if (knowledge.Status == EKnowledgeStatus.Drafts)
|
|
|
{
|
|
@@ -287,8 +320,30 @@ namespace Hotline.Api.Controllers
|
|
|
await StartFlow(knowledge.Id, WorkflowModuleConsts.KnowledgeUpdate, EKnowledgeApplyType.Update, startDto);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 批量审核
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("batch_audit")]
|
|
|
+ public async Task KnowledgeBatchAuditAsync()
|
|
|
+ {
|
|
|
+ // TODO: qcy 批量审核
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 根据知识标题自动分词并保存到关键词表中
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="title"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("participle")]
|
|
|
+ public async Task<IList<KnowledgeWordOutDto>> KnowledgeKeyWord([FromQuery]string title)
|
|
|
+ {
|
|
|
+ return await _knowApplication.TitleParticiple(title);
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 删除知识
|
|
@@ -344,11 +399,20 @@ namespace Hotline.Api.Controllers
|
|
|
[HttpGet("search_num/list")]
|
|
|
public async Task<PagedDto<KnowledgeDto>> SearchNumList([FromQuery] KnowledgeCollectListDto dto)
|
|
|
{
|
|
|
- var (total, items) = await _knowledgeRepository.Queryable(false, false, false)
|
|
|
+
|
|
|
+ var query = _knowledgeRepository.Queryable(false, true, false)
|
|
|
.Where(x => x.Status == EKnowledgeStatus.OnShelf)
|
|
|
+ .Where(m => m.IsDeleted == false)
|
|
|
.Where(x => (x.ExpiredTime != null && x.ExpiredTime >= DateTime.Now) || x.ExpiredTime == null)
|
|
|
- .OrderByDescending(x => x.SearchNum)
|
|
|
- .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
+ .OrderByDescending(x => x.SearchNum);
|
|
|
+
|
|
|
+ if (_sessionContext.OrgIsCenter == false)
|
|
|
+ {
|
|
|
+ query = query.Where(m => m.KnowledgeType.Any(a => a.IsDeleted == false && a.KnowledgeType.KnowledgeTypeOrgs
|
|
|
+ .Any(k => k.IsDeleted == false && k.OrgId.StartsWith(_sessionContext.OrgId))));
|
|
|
+ query = query.Where(m => m.Attribution == "部门知识库");
|
|
|
+ }
|
|
|
+ var (total, items) = await query.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
return new PagedDto<KnowledgeDto>(total, _mapper.Map<IReadOnlyList<KnowledgeDto>>(items));
|
|
|
}
|
|
|
|
|
@@ -362,7 +426,7 @@ namespace Hotline.Api.Controllers
|
|
|
{
|
|
|
//var know = await _knowledgeRepository.GetAsync(Id, HttpContext.RequestAborted);
|
|
|
var know = await _knowledgeDomainService.KnowledgeInfo(Id, HttpContext.RequestAborted);
|
|
|
- if (know is null)
|
|
|
+ if (know is null)
|
|
|
throw UserFriendlyException.SameMessage("知识查询失败!");
|
|
|
|
|
|
var knowledgeInfoDto = _mapper.Map<KnowledgeInfoDto>(know);
|
|
@@ -397,7 +461,7 @@ namespace Hotline.Api.Controllers
|
|
|
var knowledge = await _knowledgeDomainService.KnowledgeInfo(Id, HttpContext.RequestAborted);
|
|
|
if (knowledge is null)
|
|
|
throw UserFriendlyException.SameMessage("知识查询失败!");
|
|
|
- if (knowledge.Workflow != null)
|
|
|
+ if (knowledge.Workflow != null)
|
|
|
knowledge.IsCanHandle = knowledge.Workflow.IsCanHandle(_sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, _sessionContext.Roles);
|
|
|
//转化
|
|
|
var knowledgeShowInfoDto = _mapper.Map<KnowledgeInfoDto>(knowledge);
|
|
@@ -435,6 +499,26 @@ namespace Hotline.Api.Controllers
|
|
|
return knowledgeShowInfoDto;
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 知识详情--导出
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("info/export")]
|
|
|
+ public async Task<IActionResult> KnowledgeInfoExport([FromBody] KnowledgeInfoExportInDto dto)
|
|
|
+ {
|
|
|
+ if (dto.Ids.Length > 1)
|
|
|
+ {
|
|
|
+ var streams = await _knowApplication.KnowledgeInfoListExportAsync(dto, HttpContext.RequestAborted);
|
|
|
+ byte[] fileBytes = _wordHelperService.ConvertZipStream(streams);
|
|
|
+ var name = DateTime.Now.ToString("yyyyMMddHHmmss");
|
|
|
+ return File(fileBytes, "application/octet-stream", $"{name}.zip");
|
|
|
+ }
|
|
|
+
|
|
|
+ var info = await _knowledgeRepository.GetAsync(dto.Ids[0]) ?? throw UserFriendlyException.SameMessage("知识不存在");
|
|
|
+ return info.Content.HtmlToStream(dto.FileType).GetFileStreamResult(dto.FileType, "知识详情");
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 知识申请-关联知识-获取知识列表
|
|
|
/// </summary>
|
|
@@ -496,15 +580,20 @@ namespace Hotline.Api.Controllers
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
[HttpGet("knowledge-status-data")]
|
|
|
- public async Task<object> KnowledgeStatus()
|
|
|
+ public async Task<Dictionary<string, dynamic>> KnowledgeStatus()
|
|
|
{
|
|
|
- return new List<KeyValuePair<int, string>>
|
|
|
+ var tabNames = new List<KeyValuePair<int, string>>
|
|
|
{
|
|
|
- new KeyValuePair<int, string>(1, "审核中"),
|
|
|
new KeyValuePair<int, string>(3, "已上架"),
|
|
|
new KeyValuePair<int, string>(4, "已下架"),
|
|
|
+ new KeyValuePair<int, string>(1, "审核中"),
|
|
|
new KeyValuePair<int, string>(5, "审核不通过")
|
|
|
};
|
|
|
+
|
|
|
+ return _baseDataApplication
|
|
|
+ .FileType(EFileType.excel | EFileType.pdf)
|
|
|
+ .Add("tabNames", tabNames)
|
|
|
+ .Build();
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -515,68 +604,43 @@ namespace Hotline.Api.Controllers
|
|
|
[HttpGet]
|
|
|
public async Task<PagedDto<KnowledgeDataDto>> GetKnowList([FromQuery] KnowPagedListDto pagedDto)
|
|
|
{
|
|
|
- var typeSpliceName = string.Empty;
|
|
|
- var hotspotHotSpotFullName = string.Empty;
|
|
|
- if (!string.IsNullOrEmpty(pagedDto.KnowledgeTypeId))
|
|
|
- {
|
|
|
- var type = await _knowledgeTypeRepository.GetAsync(x => x.Id == pagedDto.KnowledgeTypeId);
|
|
|
- typeSpliceName = type?.SpliceName;
|
|
|
- }
|
|
|
- if (!string.IsNullOrEmpty(pagedDto.HotspotId))
|
|
|
- {
|
|
|
- var hotspot = await _hotspotTypeRepository.GetAsync(x => x.Id == pagedDto.HotspotId);
|
|
|
- hotspotHotSpotFullName = hotspot?.HotSpotFullName;
|
|
|
- }
|
|
|
- //var aa = _knowledgeRepository.Queryable().OrderByDescending(d => d.CreationTime).ToSql();
|
|
|
- var (total, temp) = await _knowledgeRepository.Queryable(false, false, false)
|
|
|
- .Includes(x => x.User)
|
|
|
- .Includes(x => x.SystemOrganize)
|
|
|
- .Includes(x => x.SourceOrganize)
|
|
|
- .Includes(x => x.HotspotType)
|
|
|
- .Includes(x => x.Workflow)
|
|
|
- .Includes(x=>x.KnowledgeType)
|
|
|
- //.Includes(x=>x.KnowledgeRelationTypes,t=> t.)
|
|
|
- .Where(x => x.IsDeleted == false)
|
|
|
- .Where(x=>x.KnowledgeType.Any(t=>t.KnowledgeType.KnowledgeTypeOrgs.Any(to=>to.OrgId == _sessionContext.RequiredOrgId) || t.KnowledgeType.KnowledgeTypeOrgs.Any() == false))
|
|
|
- .Where(x => (x.Status == EKnowledgeStatus.Drafts && x.CreatorId == _sessionContext.UserId) || (x.Status != EKnowledgeStatus.Drafts))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(pagedDto.Title), x => x.Title.Contains(pagedDto.Title!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(pagedDto.Keyword), x => x.Title.Contains(pagedDto.Keyword!) || x.CreatorName.Contains(pagedDto.Keyword!) || x.CreatorOrgName.Contains(pagedDto.Keyword!) || x.SourceOrganize.Name.Contains(pagedDto.Keyword!))
|
|
|
- .WhereIF(pagedDto.Status.HasValue && pagedDto.Status != EKnowledgeStatus.OffShelf, x => x.Status == pagedDto.Status && ((x.ExpiredTime != null && x.ExpiredTime > DateTime.Now) || x.ExpiredTime == null))
|
|
|
- .WhereIF(pagedDto.Status.HasValue && pagedDto.Status == EKnowledgeStatus.OffShelf, x => x.Status == pagedDto.Status || (x.ExpiredTime != null && x.ExpiredTime < DateTime.Now && x.Status != EKnowledgeStatus.Drafts))
|
|
|
- .WhereIF(pagedDto.IsPublic.HasValue, x => x.IsPublic == pagedDto.IsPublic)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(pagedDto.Summary), x => x.Summary != null && x.Summary.Contains(pagedDto.Summary!))
|
|
|
- //.WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => SqlFunc.JsonLike(x.KnowledgeType, typeSpliceName))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => x.KnowledgeType.Any(t=>t.KnowledgeTypeSpliceName.EndsWith(typeSpliceName)))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(hotspotHotSpotFullName), x => x.HotspotType.HotSpotFullName.EndsWith(hotspotHotSpotFullName!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateOrgId), x => x.SourceOrganizeId != null && x.SourceOrganizeId.EndsWith(pagedDto.CreateOrgId!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(pagedDto.ModuleCode), x => x.Workflow.ModuleCode == pagedDto.ModuleCode)
|
|
|
- .OrderByDescending(d => d.CreationTime)
|
|
|
- .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, HttpContext.RequestAborted);
|
|
|
- //temp.ForEach(x => x.IsCanHandle = x.Workflow.CanHandle(_sessionContext.RequiredUserId, _sessionContext.RequiredOrgId));
|
|
|
- //返回数据
|
|
|
- return new PagedDto<KnowledgeDataDto>(total, _mapper.Map<IReadOnlyList<KnowledgeDataDto>>(temp));
|
|
|
+ return (await _knowApplication.GetKnowList(pagedDto, HttpContext.RequestAborted))
|
|
|
+ .ToPaged();
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 知识查询-导出
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("export")]
|
|
|
+ public async Task<IActionResult> GetKnowListExportAsync([FromBody] ExportExcelDto<KnowPagedListDto> dto)
|
|
|
+ {
|
|
|
+ var items = (await _knowApplication.GetKnowList(dto.QueryDto, HttpContext.RequestAborted)).Item2;
|
|
|
+ return _exportApplication.GetExcelFile(dto, items, "知识明细导出");
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 知识检索
|
|
|
/// </summary>
|
|
|
- /// <param name="pagedDto"></param>
|
|
|
+ /// <param name="dto"></param>
|
|
|
/// <returns></returns>
|
|
|
[HttpGet("knowretrieval")]
|
|
|
- public async Task<PagedDto<KnowledgeRetrievalDataDto>> KnowRetrieval([FromQuery] KnowledgeRetrievalPagedListDto pagedDto)
|
|
|
+ public async Task<PagedDto<KnowledgeRetrievalDataDto>> KnowRetrieval([FromQuery] KnowledgeRetrievalPagedListDto dto)
|
|
|
{
|
|
|
var typeSpliceName = string.Empty;
|
|
|
var hotspotHotSpotFullName = string.Empty;
|
|
|
- if (!string.IsNullOrEmpty(pagedDto.KnowledgeTypeId))
|
|
|
+ if (!string.IsNullOrEmpty(dto.KnowledgeTypeId))
|
|
|
{
|
|
|
- var type = await _knowledgeTypeRepository.GetAsync(x => x.Id == pagedDto.KnowledgeTypeId);
|
|
|
+ var type = await _knowledgeTypeRepository.GetAsync(x => x.Id == dto.KnowledgeTypeId);
|
|
|
typeSpliceName = type?.SpliceName;
|
|
|
}
|
|
|
- if (!string.IsNullOrEmpty(pagedDto.HotspotId))
|
|
|
+ if (!string.IsNullOrEmpty(dto.HotspotId))
|
|
|
{
|
|
|
- var hotspot = await _hotspotTypeRepository.GetAsync(x => x.Id == pagedDto.HotspotId);
|
|
|
+ var hotspot = await _hotspotTypeRepository.GetAsync(x => x.Id == dto.HotspotId);
|
|
|
hotspotHotSpotFullName = hotspot?.HotSpotFullName;
|
|
|
}
|
|
|
+
|
|
|
var sugar = _knowledgeRepository
|
|
|
.Queryable(false, false, false)
|
|
|
.Includes(x => x.User)
|
|
@@ -585,20 +649,44 @@ namespace Hotline.Api.Controllers
|
|
|
.Where(x => x.IsDeleted == false)
|
|
|
.Where(x => x.Status == EKnowledgeStatus.OnShelf)
|
|
|
.Where(x => x.KnowledgeType.Any(t => t.KnowledgeType.KnowledgeTypeOrgs.Any(to => to.OrgId == _sessionContext.RequiredOrgId) || t.KnowledgeType.KnowledgeTypeOrgs.Any() == false))
|
|
|
- .WhereIF(pagedDto.RetrievalType == EKnowledgeRetrievalType.All && !string.IsNullOrEmpty(pagedDto.Keyword), d => d.Title.Contains(pagedDto.Keyword!) || d.Content.Contains(pagedDto.Keyword!))// || d.Additions.Contains(pagedDto.Keyword)
|
|
|
- .WhereIF(pagedDto.RetrievalType == EKnowledgeRetrievalType.Title && !string.IsNullOrEmpty(pagedDto.Keyword), d => d.Title.Contains(pagedDto.Keyword!))
|
|
|
- .WhereIF(pagedDto.RetrievalType == EKnowledgeRetrievalType.Content && !string.IsNullOrEmpty(pagedDto.Keyword), d => d.Content.Contains(pagedDto.Keyword!))
|
|
|
- .WhereIF(pagedDto.RetrievalType == EKnowledgeRetrievalType.Summary && !string.IsNullOrEmpty(pagedDto.Keyword), d => d.Summary != null && d.Summary.Contains(pagedDto.Keyword!))
|
|
|
- //.WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => SqlFunc.JsonLike(x.KnowledgeType, typeSpliceName))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => x.KnowledgeType.Any(t=>t.KnowledgeTypeSpliceName.EndsWith(typeSpliceName)))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(hotspotHotSpotFullName), x => x.HotspotType.HotSpotFullName.EndsWith(hotspotHotSpotFullName!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(pagedDto.HotspotName), x => x.HotspotType.HotSpotFullName.EndsWith(pagedDto.HotspotName!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateOrgId), x => x.CreatorOrgId != null && x.CreatorOrgId.EndsWith(pagedDto.CreateOrgId!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(pagedDto.Attribution), x => x.Attribution == pagedDto.Attribution!);
|
|
|
- switch (pagedDto.Sort)
|
|
|
+ // .WhereIF(dto.RetrievalType == EKnowledgeRetrievalType.All && !string.IsNullOrEmpty(dto.Keyword), d => d.Title.Contains(dto.Keyword!) || d.Content.Contains(dto.Keyword!))
|
|
|
+ //.WhereIF(dto.RetrievalType == EKnowledgeRetrievalType.Title && !string.IsNullOrEmpty(dto.Keyword), d => d.Title.Contains(dto.Keyword!))
|
|
|
+ //.WhereIF(dto.RetrievalType == EKnowledgeRetrievalType.Content && !string.IsNullOrEmpty(dto.Keyword), d => d.Content.Contains(dto.Keyword!))
|
|
|
+ //.WhereIF(dto.RetrievalType == EKnowledgeRetrievalType.Summary && !string.IsNullOrEmpty(dto.Keyword), d => d.Summary != null && d.Summary.Contains(dto.Keyword!))
|
|
|
+ //.WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => SqlFunc.JsonLike(x.KnowledgeType, typeSpliceName))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => x.KnowledgeType.Any(t => t.KnowledgeTypeSpliceName.EndsWith(typeSpliceName)))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(hotspotHotSpotFullName), x => x.HotspotType.HotSpotFullName.EndsWith(hotspotHotSpotFullName!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.HotspotName), x => x.HotspotType.HotSpotFullName.EndsWith(dto.HotspotName!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.CreateOrgId), x => x.CreatorOrgId != null && x.CreatorOrgId.EndsWith(dto.CreateOrgId!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Attribution), x => x.Attribution == dto.Attribution!);
|
|
|
+ if (dto.Keyword.NotNullOrEmpty())
|
|
|
+ {
|
|
|
+ var keywords = dto.Keyword!.SplitKeywords();
|
|
|
+ var exp = Expressionable.Create<Knowledge>();
|
|
|
+ foreach (var keyword in keywords)
|
|
|
+ {
|
|
|
+ if (dto.RetrievalType == EKnowledgeRetrievalType.All)
|
|
|
+ exp.Or(m => m.Title.Contains(keyword) || m.Content.Contains(keyword));
|
|
|
+ if (dto.RetrievalType == EKnowledgeRetrievalType.Title)
|
|
|
+ exp.Or(m => m.Title.Contains(keyword));
|
|
|
+ if (dto.RetrievalType == EKnowledgeRetrievalType.Content)
|
|
|
+ exp.Or(m => m.Content.Contains(keyword));
|
|
|
+ if (dto.RetrievalType == EKnowledgeRetrievalType.Summary)
|
|
|
+ exp.Or(m => m.Summary != null && m.Summary.Contains(keyword));
|
|
|
+ if (dto.RetrievalType == EKnowledgeRetrievalType.KeyWord)
|
|
|
+ {
|
|
|
+ var keywordEntity = await _knowledgeWordRepository.GetAsync(m => m.Tag == keyword && m.IsEnable == 0);
|
|
|
+ if (keywordEntity is null) continue;
|
|
|
+ exp.Or(m => SqlFunc.JsonArrayAny(m.Keywords, keywordEntity.Id));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sugar.Where(exp.ToExpression());
|
|
|
+ }
|
|
|
+
|
|
|
+ switch (dto.Sort)
|
|
|
{
|
|
|
case "2":
|
|
|
- sugar = sugar.OrderByDescending(p => p.Score);
|
|
|
+ sugar = sugar.OrderByDescending(p => p.CollectCount);
|
|
|
break;
|
|
|
case "3":
|
|
|
sugar = sugar.OrderByDescending(p => p.CreationTime);
|
|
@@ -607,10 +695,22 @@ namespace Hotline.Api.Controllers
|
|
|
sugar = sugar.OrderByDescending(p => p.PageView);
|
|
|
break;
|
|
|
}
|
|
|
- var (total, temp) = await sugar.ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize);
|
|
|
+ var (total, temp) = await sugar.ToPagedListAsync(dto.PageIndex, dto.PageSize);
|
|
|
return new PagedDto<KnowledgeRetrievalDataDto>(total, _mapper.Map<IReadOnlyList<KnowledgeRetrievalDataDto>>(temp));
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 知识检索页面基础数据
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("knowretrieval/base_data")]
|
|
|
+ public async Task<Dictionary<string, dynamic>> GetKnowretrievalBaseData()
|
|
|
+ {
|
|
|
+ return _baseDataApplication
|
|
|
+ .KnowledgeRetrievalType(new[] { 3, 4})
|
|
|
+ .Build();
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 获取知识审批信息
|
|
|
/// </summary>
|
|
@@ -626,7 +726,7 @@ namespace Hotline.Api.Controllers
|
|
|
.Includes(x => x.Workflow)
|
|
|
.Where(x => x.KnowledgeId == pagedDto.id)
|
|
|
.Where(x => x.IsDeleted == false)
|
|
|
- .OrderBy(x=>x.CreationTime)
|
|
|
+ .OrderBy(x => x.CreationTime)
|
|
|
.ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize);
|
|
|
return new PagedDto<KnowledgeWorkFlowDto>(total, _mapper.Map<IReadOnlyList<KnowledgeWorkFlowDto>>(temp));
|
|
|
}
|
|
@@ -643,7 +743,7 @@ namespace Hotline.Api.Controllers
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Title.Equals(dto.Title))
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.Summary), x => x.Summary.Equals(dto.Summary))
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.Content), x => x.Content.Equals(dto.Content))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Id),x=> x.Id != dto.Id)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Id), x => x.Id != dto.Id)
|
|
|
.AnyAsync();
|
|
|
return any;
|
|
|
}
|
|
@@ -718,7 +818,7 @@ namespace Hotline.Api.Controllers
|
|
|
.Includes(it => it.Knowledge)
|
|
|
.Includes(it => it.User)
|
|
|
.Includes(it => it.SystemOrganize)
|
|
|
- .Includes(it => it.Workflow, d=>d.Steps)
|
|
|
+ .Includes(it => it.Workflow, d => d.Steps)
|
|
|
.Where(it => it.WorkflowId != null)
|
|
|
.WhereIF(pagedDto.EKnowledgeApplyType.HasValue, d => d.WorkflowModuleStatus == pagedDto.EKnowledgeApplyType)
|
|
|
.WhereIF(pagedDto.EKnowledgeWorkFlowStatus.HasValue, d => d.WorkFlowApplyStatus == pagedDto.EKnowledgeWorkFlowStatus)
|
|
@@ -1032,9 +1132,9 @@ namespace Hotline.Api.Controllers
|
|
|
.Includes(x => x.Knowledge)
|
|
|
//.WhereIF(!string.IsNullOrEmpty(dto.KnowledgeTypeId), x => x.Knowledge.KnowledgeTypeId == dto.KnowledgeTypeId!)
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.CreatorName), x => x.CreatorName == dto.CreatorName!)
|
|
|
- //.WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => SqlFunc.JsonLike(x.Knowledge.KnowledgeType, typeSpliceName))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => x.Knowledge.KnowledgeType.Any(t=>t.KnowledgeTypeSpliceName.EndsWith(typeSpliceName)))
|
|
|
- .Where(x => !string.IsNullOrEmpty(x.Knowledge.Id))
|
|
|
+ //.WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => SqlFunc.JsonLike(x.Knowledge.KnowledgeType, typeSpliceName))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => x.Knowledge.KnowledgeType.Any(t => t.KnowledgeTypeSpliceName.EndsWith(typeSpliceName)))
|
|
|
+ .Where(x => !string.IsNullOrEmpty(x.Knowledge.Id))
|
|
|
.OrderByDescending(x => x.CreationTime)
|
|
|
.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
return new PagedDto<KnowledgeCorrectionDto>(total, _mapper.Map<IReadOnlyList<KnowledgeCorrectionDto>>(items));
|
|
@@ -1135,10 +1235,10 @@ namespace Hotline.Api.Controllers
|
|
|
}
|
|
|
var (total, items) = await _knowledgeQuestionsRepository.Queryable()
|
|
|
.Includes(x => x.Knowledge)
|
|
|
- //.WhereIF(!string.IsNullOrEmpty(dto.KnowledgeTypeId), x => x.Knowledge.KnowledgeTypeId == dto.KnowledgeTypeId!)
|
|
|
- //.WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => SqlFunc.JsonLike(x.Knowledge.KnowledgeType, typeSpliceName))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => x.Knowledge.KnowledgeType.Any(t=>t.KnowledgeTypeSpliceName.EndsWith(typeSpliceName)))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.CreatorName), x => x.CreatorName == dto.CreatorName!)
|
|
|
+ //.WhereIF(!string.IsNullOrEmpty(dto.KnowledgeTypeId), x => x.Knowledge.KnowledgeTypeId == dto.KnowledgeTypeId!)
|
|
|
+ //.WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => SqlFunc.JsonLike(x.Knowledge.KnowledgeType, typeSpliceName))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => x.Knowledge.KnowledgeType.Any(t => t.KnowledgeTypeSpliceName.EndsWith(typeSpliceName)))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.CreatorName), x => x.CreatorName == dto.CreatorName!)
|
|
|
.Where(x => !string.IsNullOrEmpty(x.Knowledge.Id))
|
|
|
.OrderByDescending(x => x.CreationTime)
|
|
|
.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
@@ -1174,6 +1274,7 @@ namespace Hotline.Api.Controllers
|
|
|
var (total, items) = await _knowledgeCollectRepository.Queryable()
|
|
|
.Includes(x => x.Knowledge)
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.Knowledge.Title.Contains(dto.Keyword!) || (x.Knowledge.Summary != null && x.Knowledge.Summary.Contains(dto.Keyword!)))
|
|
|
+ .WhereIF(dto.KnowledgeCollectGroupId.NotNullOrEmpty(), x => x.KnowledgeCollectGroupId == dto.KnowledgeCollectGroupId)
|
|
|
.Where(x => x.CreatorId == _sessionContext.UserId)
|
|
|
.Where(x => !string.IsNullOrEmpty(x.Knowledge.Id))
|
|
|
.Where(x => x.Collect!.Value)
|
|
@@ -1203,6 +1304,13 @@ namespace Hotline.Api.Controllers
|
|
|
var collectNew = _mapper.Map<KnowledgeCollect>(dto);
|
|
|
await _knowledgeCollectRepository.AddAsync(collectNew, HttpContext.RequestAborted);
|
|
|
}
|
|
|
+ var count = await _knowledgeCollectRepository.Queryable()
|
|
|
+ .Where(m => m.KnowledgeId == dto.KnowledgeId && m.Collect == true).CountAsync();
|
|
|
+
|
|
|
+ await _knowledgeRepository.Updateable()
|
|
|
+ .Where(m => m.Id == dto.KnowledgeId)
|
|
|
+ .SetColumns(m => m.CollectCount == count)
|
|
|
+ .ExecuteCommandAsync();
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -1313,5 +1421,152 @@ namespace Hotline.Api.Controllers
|
|
|
return new List<KnowledgeCommentDto>(_mapper.Map<IReadOnlyList<KnowledgeCommentDto>>(comments));
|
|
|
}
|
|
|
#endregion
|
|
|
+
|
|
|
+ #region 收藏分组
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 增加收藏分组
|
|
|
+ /// </summary>
|
|
|
+ [HttpPost("group")]
|
|
|
+ public async Task<KnowledgeCollectGroupOutDto> SaveKnowledgeCoolectGroupAsync([FromBody] KnowledgeCollectGroupInDto dto)
|
|
|
+ {
|
|
|
+ var entity = dto.Adapt<KnowledgeCollectGroup>();
|
|
|
+ if (await _knowledgeCollectGroupRepository
|
|
|
+ .Queryable()
|
|
|
+ .Where(m => m.Name == dto.Name && m.CreatorId == _sessionContext.UserId)
|
|
|
+ .AnyAsync() == true) throw UserFriendlyException.SameMessage("分组名重复, 请重新输入!");
|
|
|
+
|
|
|
+ var key = await _knowledgeCollectGroupRepository.AddAsync(entity);
|
|
|
+ if (key.IsNullOrEmpty()) throw UserFriendlyException.SameMessage("添加失败, 请重试");
|
|
|
+ var outDto = dto.Adapt<KnowledgeCollectGroupOutDto>();
|
|
|
+ outDto.Id = key;
|
|
|
+ return outDto;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 删除收藏分组
|
|
|
+ /// </summary>
|
|
|
+ [HttpDelete("group")]
|
|
|
+ public async Task DeleteKnowledgeCoolectGroupAsync([FromQuery] string id)
|
|
|
+ {
|
|
|
+ var entity = await _knowledgeCollectGroupRepository.Queryable()
|
|
|
+ .Where(m => m.Id == id && m.CreatorId == _sessionContext.UserId)
|
|
|
+ .FirstAsync() ?? throw new UserFriendlyException("数据不存在");
|
|
|
+
|
|
|
+ entity.IsDeleted = true;
|
|
|
+ await _knowledgeCollectGroupRepository.UpdateAsync(entity);
|
|
|
+ await _knowledgeCollectRepository.Updateable()
|
|
|
+ .Where(m => m.KnowledgeCollectGroupId == id && m.CreatorId == _sessionContext.UserId)
|
|
|
+ .SetColumns(m => m.IsDeleted == true)
|
|
|
+ .ExecuteCommandAsync();
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取分组收藏列表
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("group")]
|
|
|
+ public async Task<PagedDto<KnowledgeCollectGroupOutDto>> GetKnowledgeCollectGroupListAsync([FromQuery] KnowledgeCollectGroupListInDto dto)
|
|
|
+ {
|
|
|
+ return (await _knowledgeCollectGroupRepository.Queryable()
|
|
|
+ .WhereIF(dto.Keyword.NotNullOrEmpty(), m => m.Name.Contains(dto.Keyword))
|
|
|
+ .Where(m => m.CreatorId == _sessionContext.UserId)
|
|
|
+ .Select<KnowledgeCollectGroupOutDto>()
|
|
|
+ .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted)
|
|
|
+ ).ToPaged();
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region PageView 浏览记录
|
|
|
+ /// <summary>
|
|
|
+ /// 浏览记录集合
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("pageview")]
|
|
|
+ public async Task<PagedDto<PageViewOutDto>> GetPageViewListAsync([FromQuery] PageViewInDto dto)
|
|
|
+ {
|
|
|
+ return (await _knowApplication.GetPageViewListAsync(dto, HttpContext.RequestAborted))
|
|
|
+ .ToPaged();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 浏览记录集合-导出
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("pageview/export")]
|
|
|
+ public async Task<FileStreamResult> GetPageViewListAsync([FromBody] ExportExcelDto<PageViewInDto> dto)
|
|
|
+ {
|
|
|
+ var items = (await _knowApplication.GetPageViewListAsync(dto.QueryDto, HttpContext.RequestAborted))
|
|
|
+ .Item2;
|
|
|
+ return _exportApplication.GetExcelFile(dto, items, "浏览记录");
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 热词
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 新增热词
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("hotword")]
|
|
|
+ public async Task AddKnowledgeHotWordAsync([FromBody] AddKnowledgeHotWordInDto dto)
|
|
|
+ {
|
|
|
+ await _knowApplication.AddKnowledgeHotWordAsync(dto, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 新增热词页面基础数据
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("hotword/basedata")]
|
|
|
+ public async Task<Dictionary<string, dynamic>> AddKnowledgeHotWordBaseDataAsync()
|
|
|
+ {
|
|
|
+ return _baseDataApplication
|
|
|
+ .KnowledgeHotWordType()
|
|
|
+ .Build();
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 热词集合
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("hotword")]
|
|
|
+ public async Task<PagedDto<KnowledgeHotWordOutDto>> GetKnowledgeHotWordListAsync([FromQuery] KnowledgeHotWordInDto dto)
|
|
|
+ {
|
|
|
+ return (await _knowApplication.GetKnowledgeHotWordListAsync(dto, HttpContext.RequestAborted))
|
|
|
+ .ToPaged();
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 修改热词
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPut("hotword")]
|
|
|
+ public async Task UpdateKnowledgeHotWordAsync([FromBody] UpdateKnowledgeHotWordInDto dto)
|
|
|
+ {
|
|
|
+ await _knowApplication.UpdateKnowledgeHotWordAsync(dto, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 删除热词
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="id"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpDelete("hotword")]
|
|
|
+ public async Task DeleteKnowledgeHotWordAsync([FromQuery] string id)
|
|
|
+ {
|
|
|
+ await _knowledgeHotWordRepository
|
|
|
+ .RemoveAsync(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
}
|
|
|
}
|