|
@@ -39,6 +39,8 @@ using XF.Domain.Authentications;
|
|
|
using XF.Domain.Exceptions;
|
|
|
using XF.Domain.Repository;
|
|
|
using XF.Utility.EnumExtensions;
|
|
|
+using System.Threading;
|
|
|
+using Hotline.Caching.Interfaces;
|
|
|
|
|
|
namespace Hotline.Api.Controllers
|
|
|
{
|
|
@@ -49,6 +51,7 @@ namespace Hotline.Api.Controllers
|
|
|
private readonly IExportApplication _exportApplication;
|
|
|
private readonly IRepository<KnowledgeHotWord> _knowledgeHotWordRepository;
|
|
|
private readonly IRepository<KnowledgeApprove> _knowledgeApproRepository;
|
|
|
+ private readonly ISystemSettingCacheManager _systemSettingCacheManager;
|
|
|
private readonly IRepository<KnowledgeWord> _knowledgeWordRepository;
|
|
|
private readonly IWordHelperService _wordHelperService;
|
|
|
private readonly BaseDataApplication _baseDataApplication;
|
|
@@ -82,29 +85,29 @@ namespace Hotline.Api.Controllers
|
|
|
|
|
|
|
|
|
public KnowledgeController(
|
|
|
- IKnowledgeRepository knowledgeRepository,
|
|
|
- ISessionContext sessionContext,
|
|
|
- IKnowledgeDomainService knowledgeDomainService,
|
|
|
- IMapper mapper,
|
|
|
- IKnowApplication knowApplication,
|
|
|
- IMediator mediator,
|
|
|
- IWorkflowApplication workflowApplication,
|
|
|
- IWorkflowDomainService workflowDomainService,
|
|
|
- IKnowledgeWorkFlowRepository knowledgeWorkFlowRepository,
|
|
|
- IRepository<User> userRepository,
|
|
|
- IRepository<KnowledgeType> knowledgeTypeRepository,
|
|
|
- IRepository<Hotspot> hotspotTypeRepository,
|
|
|
- IRepositoryTextSearch<KnowledgeTs> repositoryts,
|
|
|
- IRepository<KnowledgeWord> knowledgeWrodRepository,
|
|
|
- IRepository<KnowledgeQuestions> knowledgeQuestionsRepository,
|
|
|
- IRepository<KnowledgeCorrection> knowledgeCorrectionRepository,
|
|
|
- IRepository<KnowledgeCollect> knowledgeCollectRepository,
|
|
|
- ISystemDomainService systemDomainService,
|
|
|
- IRepository<KnowledgeComment> knowledgeCommentRepository,
|
|
|
- ISystemOrganizeRepository systemOrganizeRepository,
|
|
|
- IFileRepository fileRepository,
|
|
|
- ICapPublisher capPublisher,
|
|
|
- IRepository<KnowledgeRelationType> knowledgeRelationTypeRepository,
|
|
|
+ IKnowledgeRepository knowledgeRepository,
|
|
|
+ ISessionContext sessionContext,
|
|
|
+ IKnowledgeDomainService knowledgeDomainService,
|
|
|
+ IMapper mapper,
|
|
|
+ IKnowApplication knowApplication,
|
|
|
+ IMediator mediator,
|
|
|
+ IWorkflowApplication workflowApplication,
|
|
|
+ IWorkflowDomainService workflowDomainService,
|
|
|
+ IKnowledgeWorkFlowRepository knowledgeWorkFlowRepository,
|
|
|
+ IRepository<User> userRepository,
|
|
|
+ IRepository<KnowledgeType> knowledgeTypeRepository,
|
|
|
+ IRepository<Hotspot> hotspotTypeRepository,
|
|
|
+ IRepositoryTextSearch<KnowledgeTs> repositoryts,
|
|
|
+ IRepository<KnowledgeWord> knowledgeWrodRepository,
|
|
|
+ IRepository<KnowledgeQuestions> knowledgeQuestionsRepository,
|
|
|
+ IRepository<KnowledgeCorrection> knowledgeCorrectionRepository,
|
|
|
+ IRepository<KnowledgeCollect> knowledgeCollectRepository,
|
|
|
+ ISystemDomainService systemDomainService,
|
|
|
+ IRepository<KnowledgeComment> knowledgeCommentRepository,
|
|
|
+ ISystemOrganizeRepository systemOrganizeRepository,
|
|
|
+ IFileRepository fileRepository,
|
|
|
+ ICapPublisher capPublisher,
|
|
|
+ IRepository<KnowledgeRelationType> knowledgeRelationTypeRepository,
|
|
|
IBulletinApplication bulletinApplication,
|
|
|
IRepository<KnowledgeCollectGroup> knowledgeCollectGroupRepository,
|
|
|
IExportApplication exportApplication,
|
|
@@ -113,9 +116,10 @@ namespace Hotline.Api.Controllers
|
|
|
IRepository<KnowledgePv> knowledgePvepository,
|
|
|
IRepository<KnowledgeWord> knowledgeWordRepository,
|
|
|
IRepository<KnowledgeHotWord> knowledgeWordHotRepository,
|
|
|
- IOptionsSnapshot<AppConfiguration> appOptions,
|
|
|
+ IOptionsSnapshot<AppConfiguration> appOptions,
|
|
|
IRepository<KnowledgeHotWord> knowledgeHotWordRepository,
|
|
|
- IRepository<KnowledgeApprove> knowledgeApproRepository)
|
|
|
+ IRepository<KnowledgeApprove> knowledgeApproRepository,
|
|
|
+ ISystemSettingCacheManager _systemSettingCacheManager)
|
|
|
{
|
|
|
_knowledgeRepository = knowledgeRepository;
|
|
|
_sessionContext = sessionContext;
|
|
@@ -149,6 +153,7 @@ namespace Hotline.Api.Controllers
|
|
|
_knowledgeWordRepository = knowledgeWordRepository;
|
|
|
_knowledgeHotWordRepository = knowledgeHotWordRepository;
|
|
|
_knowledgeApproRepository = knowledgeApproRepository;
|
|
|
+ this._systemSettingCacheManager = _systemSettingCacheManager;
|
|
|
_appOptions = appOptions;
|
|
|
}
|
|
|
|
|
@@ -253,7 +258,7 @@ namespace Hotline.Api.Controllers
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- know.Status = EKnowledgeStatus.OffShelfAudit;
|
|
|
+ know.Status = EKnowledgeStatus.Auditing;
|
|
|
await _knowledgeRepository.UpdateAsync(know, HttpContext.RequestAborted);
|
|
|
|
|
|
var startDto = _mapper.Map<StartWorkflowDto>(dto.Workflow);
|
|
@@ -780,21 +785,24 @@ namespace Hotline.Api.Controllers
|
|
|
[HttpGet("knowledge-status-data")]
|
|
|
public Dictionary<string, dynamic> KnowledgeStatus()
|
|
|
{
|
|
|
- var tabNames = new List<KeyValuePair<int, string>>
|
|
|
- {
|
|
|
- new KeyValuePair<int, string>(3, "已上架"),
|
|
|
- new KeyValuePair<int, string>(4, "已下架"),
|
|
|
- new KeyValuePair<int, string>(1, "审核中"),
|
|
|
- new KeyValuePair<int, string>(8, "草稿"),
|
|
|
- new KeyValuePair<int, string>(-1, "全部")
|
|
|
- };
|
|
|
+ //var tabNames = new List<KeyValuePair<int, string>>
|
|
|
+ //{
|
|
|
+ // new KeyValuePair<int, string>(3, "已上架"),
|
|
|
+ // new KeyValuePair<int, string>(4, "已下架"),
|
|
|
+ // new KeyValuePair<int, string>(1, "审核中"),
|
|
|
+ // new KeyValuePair<int, string>(8, "草稿"),
|
|
|
+ // new KeyValuePair<int, string>(-1, "全部")
|
|
|
+ //};
|
|
|
+ var tabNames = EnumExts.GetDescriptions<EKnowledgeStatusRequest>();
|
|
|
+
|
|
|
+ //var tabNewDraftsNames = new List<KeyValuePair<int, string>>
|
|
|
+ //{
|
|
|
+ // new KeyValuePair<int, string>(-1, "全部"),
|
|
|
+ // new KeyValuePair<int, string>(0, "待提交"),
|
|
|
+ // new KeyValuePair<int, string>(5, "审核不通过"),
|
|
|
+ //};
|
|
|
+ var tabNewDraftsNames = EnumExts.GetDescriptions<EKnowledgeDraftTypeRequest>();
|
|
|
|
|
|
- var tabNewDraftsNames = new List<KeyValuePair<int, string>>
|
|
|
- {
|
|
|
- new KeyValuePair<int, string>(-1, "全部"),
|
|
|
- new KeyValuePair<int, string>(0, "待提交"),
|
|
|
- new KeyValuePair<int, string>(5, "审核不通过"),
|
|
|
- };
|
|
|
|
|
|
var tabAuditingNames = new List<KeyValuePair<string, string>>
|
|
|
{
|
|
@@ -1749,7 +1757,7 @@ namespace Hotline.Api.Controllers
|
|
|
public async Task<PagedDto<KnowledgeApproveDto>> QueryKnowledgeApprovePaged([FromQuery] QueryKnowledgeApprovePagedRequest request)
|
|
|
{
|
|
|
var query = _knowledgeApproRepository.Queryable()
|
|
|
- .Includes(d=>d.Knowledge)
|
|
|
+ .Includes(d => d.Knowledge)
|
|
|
.Includes(d => d.Creator);
|
|
|
if (request.HasApproved)
|
|
|
{
|
|
@@ -1787,6 +1795,132 @@ namespace Hotline.Api.Controllers
|
|
|
return _mapper.Map<IReadOnlyList<KnowledgeApproveDto>>(approves);
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 批量审核
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="request"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("approve-batch")]
|
|
|
+ public async Task ApproveBatch([FromBody] ApproveBatchRequest request)
|
|
|
+ {
|
|
|
+ var approves = await _knowledgeApproRepository.Queryable()
|
|
|
+ .Includes(d => d.Knowledge, x => x.KnowledgeTypes)
|
|
|
+ .Where(d => request.ApproveIds.Contains(d.Id))
|
|
|
+ .ToListAsync(HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ foreach (var approve in approves)
|
|
|
+ {
|
|
|
+ var kn = approve.Knowledge;
|
|
|
+ switch (approve.KnowledgeApproveType)
|
|
|
+ {
|
|
|
+ case EKnowledgeApproveType.Add:
|
|
|
+ case EKnowledgeApproveType.Update:
|
|
|
+ // t: 上架 f: 驳回
|
|
|
+ if (request.IsSuccess)
|
|
|
+ {
|
|
|
+ kn.OnShelf();
|
|
|
+ //todo 推送ds
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ kn.Status = EKnowledgeStatus.Revert;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case EKnowledgeApproveType.Delete:
|
|
|
+ // t: 先下架,再删除 f: 驳回
|
|
|
+ if (request.IsSuccess)
|
|
|
+ {
|
|
|
+ kn.OffShelf();
|
|
|
+ kn.SoftDelete();
|
|
|
+ //todo 推送ds
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ kn.Status = EKnowledgeStatus.Revert;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case EKnowledgeApproveType.OffShelf:
|
|
|
+ // t: 下架 f: 上架
|
|
|
+ if (request.IsSuccess)
|
|
|
+ {
|
|
|
+ kn.OffShelf();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ kn.Status = EKnowledgeStatus.OnShelf;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new ArgumentOutOfRangeException();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ var kns = approves.Select(d => d.Knowledge).ToList();
|
|
|
+ await _knowledgeRepository.UpdateRangeAsync(kns, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ //push to ds
|
|
|
+
|
|
|
+ //高效办成一件事配置
|
|
|
+
|
|
|
+ var pushApproves = approves.Where(d => d.KnowledgeApproveType != EKnowledgeApproveType.OffShelf)
|
|
|
+ .ToList();
|
|
|
+ if (!pushApproves.Any()) return;
|
|
|
+ var cancelPublishOrderEnabled = _systemSettingCacheManager.GetSetting(SettingConstants.EfficientlyAccomplish)?.SettingValue[0];
|
|
|
+ foreach (var pushApprove in pushApproves)
|
|
|
+ {
|
|
|
+ var pushKnowledge = _mapper.Map<KnowledgeSendDto>(pushApprove.Knowledge);
|
|
|
+ pushKnowledge.CategoryCode = "01";
|
|
|
+ pushKnowledge.CategoryName = "公共服务";
|
|
|
+
|
|
|
+ //获取到配置,执行下面
|
|
|
+ if (!string.IsNullOrEmpty(cancelPublishOrderEnabled))
|
|
|
+ {
|
|
|
+ var isEfficientlyAccomplish = false;
|
|
|
+ //根据知识ID查询所有的知识分类
|
|
|
+ var typeList = await _relationTypeRepository.Queryable().Where(p => p.KnowledgeId == knowledge.Id).ToListAsync(cancellationToken);
|
|
|
+ if (typeList != null && typeList.Any())
|
|
|
+ {
|
|
|
+ //遍历知识分类
|
|
|
+ foreach (var item in typeList)
|
|
|
+ {
|
|
|
+ //查询知识分类是否满足高效办成一件事
|
|
|
+ if (await _knowledgeTypeRepository.AnyAsync(p => p.Id == item.KnowledgeTypeId && p.SpliceName.StartsWith(cancelPublishOrderEnabled), cancellationToken))
|
|
|
+ {
|
|
|
+ //满足,跳出遍历
|
|
|
+ isEfficientlyAccomplish = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //是高效,处理默认值
|
|
|
+ if (isEfficientlyAccomplish)
|
|
|
+ {
|
|
|
+ pushKnowledge.CategoryCode = "25";
|
|
|
+ pushKnowledge.CategoryName = "高效办成一件事";
|
|
|
+ }
|
|
|
+
|
|
|
+ //
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ switch (pushApprove.KnowledgeApproveType)
|
|
|
+ {
|
|
|
+ case EKnowledgeApproveType.Add:
|
|
|
+ await _capPublisher.PublishAsync(EventNames.HotlineKnowledgeAdd, pushKnowledge, cancellationToken: cancellationToken);
|
|
|
+ break;
|
|
|
+ case EKnowledgeApproveType.Update:
|
|
|
+ await _capPublisher.PublishAsync(EventNames.HotlineKnowledgeUpdate, pushKnowledge, cancellationToken: cancellationToken);
|
|
|
+ break;
|
|
|
+ case EKnowledgeApproveType.Delete:
|
|
|
+ await _capPublisher.PublishAsync(EventNames.HotlineKnowledgeRemove, pushKnowledge, cancellationToken: cancellationToken);
|
|
|
+ break;
|
|
|
+ case EKnowledgeApproveType.OffShelf:
|
|
|
+ default:
|
|
|
+ throw new ArgumentOutOfRangeException();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
#endregion
|
|
|
}
|
|
|
}
|