|
@@ -1,7 +1,9 @@
|
|
|
using DotNetCore.CAP;
|
|
|
+using Hotline.Caching.Interfaces;
|
|
|
using Hotline.FlowEngine;
|
|
|
using Hotline.FlowEngine.WorkflowModules;
|
|
|
using Hotline.FlowEngine.Workflows;
|
|
|
+using Hotline.Settings;
|
|
|
using Hotline.Share.Dtos.Knowledge;
|
|
|
using Hotline.Share.Enums.KnowledgeBase;
|
|
|
using Hotline.Share.Mq;
|
|
@@ -21,6 +23,9 @@ namespace Hotline.KnowledgeBase
|
|
|
private readonly IRepository<KnowledgePv> _knowledgePVRepository;
|
|
|
private readonly IKnowledgeWorkFlowRepository _knowledgeWorkFlowRepository;
|
|
|
private readonly ICapPublisher _capPublisher;
|
|
|
+ private readonly ISystemSettingCacheManager _systemSettingCacheManager;
|
|
|
+ private readonly IRepository<KnowledgeRelationType> _relationTypeRepository;
|
|
|
+ private readonly IRepository<KnowledgeType> _knowledgeTypeRepository;
|
|
|
|
|
|
/// <summary>
|
|
|
///
|
|
@@ -30,14 +35,26 @@ namespace Hotline.KnowledgeBase
|
|
|
/// <param name="knowledgePVRepository"></param>
|
|
|
/// <param name="knowledgeWorkFlowRepository"></param>
|
|
|
/// <param name="capPublisher"></param>
|
|
|
- public KnowledgeDomainService(IKnowledgeRepository knowledgeRepository, IMapper mapper, IRepository<KnowledgePv> knowledgePVRepository
|
|
|
- , IKnowledgeWorkFlowRepository knowledgeWorkFlowRepository, ICapPublisher capPublisher)
|
|
|
+ /// <param name="systemSettingCacheManager"></param>
|
|
|
+ /// <param name="relationTypeRepository"></param>
|
|
|
+ /// <param name="knowledgeTypeRepository"></param>
|
|
|
+ public KnowledgeDomainService(IKnowledgeRepository knowledgeRepository,
|
|
|
+ IMapper mapper,
|
|
|
+ IRepository<KnowledgePv> knowledgePVRepository,
|
|
|
+ IKnowledgeWorkFlowRepository knowledgeWorkFlowRepository,
|
|
|
+ ICapPublisher capPublisher, ISystemSettingCacheManager systemSettingCacheManager,
|
|
|
+ IRepository<KnowledgeRelationType> relationTypeRepository,
|
|
|
+ IRepository<KnowledgeType> knowledgeTypeRepository
|
|
|
+ )
|
|
|
{
|
|
|
_knowledgeRepository = knowledgeRepository;
|
|
|
_mapper = mapper;
|
|
|
_knowledgePVRepository = knowledgePVRepository;
|
|
|
_knowledgeWorkFlowRepository = knowledgeWorkFlowRepository;
|
|
|
_capPublisher = capPublisher;
|
|
|
+ _systemSettingCacheManager = systemSettingCacheManager;
|
|
|
+ _relationTypeRepository = relationTypeRepository;
|
|
|
+ _knowledgeTypeRepository = knowledgeTypeRepository;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -49,8 +66,8 @@ namespace Hotline.KnowledgeBase
|
|
|
{
|
|
|
var know = await _knowledgeRepository.Queryable(false, false, false)
|
|
|
.Includes(x => x.Workflow, d => d.Steps)
|
|
|
- .Includes(x=>x.SourceOrganize)
|
|
|
- .Includes(x=>x.KnowledgeType).FirstAsync(p => p.Id == Id);
|
|
|
+ .Includes(x => x.SourceOrganize)
|
|
|
+ .Includes(x => x.KnowledgeType).FirstAsync(p => p.Id == Id);
|
|
|
if (know is null)
|
|
|
throw UserFriendlyException.SameMessage("知识查询失败!");
|
|
|
return know;
|
|
@@ -112,7 +129,7 @@ namespace Hotline.KnowledgeBase
|
|
|
knowledgeFlow.WorkflowId = workflowId;
|
|
|
knowledgeFlow.Flowed(flowedUserIds, flowedOrgIds, handlerUsers, handlerOrgs);
|
|
|
await _knowledgeWorkFlowRepository.UpdateAsync(knowledgeFlow, cancellationToken);
|
|
|
- var knowledge = await _knowledgeRepository.Queryable().Where(x=>x.Id == workflowExternalId).FirstAsync(cancellationToken);
|
|
|
+ var knowledge = await _knowledgeRepository.Queryable().Where(x => x.Id == workflowExternalId).FirstAsync(cancellationToken);
|
|
|
if (knowledge == null)
|
|
|
throw new UserFriendlyException($"无效知识编号, knowledgeId: {workflowExternalId}", "无效知识编号");
|
|
|
knowledge.WorkflowId = workflowId;
|
|
@@ -203,41 +220,41 @@ namespace Hotline.KnowledgeBase
|
|
|
/// <exception cref="UserFriendlyException"></exception>
|
|
|
public async Task TerminateWorkKnowledge(Workflow workflow, CancellationToken cancellationToken)
|
|
|
{
|
|
|
- //根据审批主表知识ID查询当前知识
|
|
|
- var knowledge = await _knowledgeRepository.GetAsync(p => p.Id == workflow.ExternalId, cancellationToken);
|
|
|
- if (knowledge == null)
|
|
|
- throw new UserFriendlyException($"知识查询失败");
|
|
|
+ //根据审批主表知识ID查询当前知识
|
|
|
+ var knowledge = await _knowledgeRepository.GetAsync(p => p.Id == workflow.ExternalId, cancellationToken);
|
|
|
+ if (knowledge == null)
|
|
|
+ throw new UserFriendlyException($"知识查询失败");
|
|
|
|
|
|
- //修改主表审批状态 根据流程ID查询审批主表
|
|
|
- var workFlow = await _knowledgeWorkFlowRepository.GetAsync(p => p.KnowledgeId == workflow.ExternalId, cancellationToken);
|
|
|
- if (workFlow == null)
|
|
|
- throw new UserFriendlyException($"知识查询失败, workflowId: {workflow.ExternalId}", "无效流程编号");
|
|
|
+ //修改主表审批状态 根据流程ID查询审批主表
|
|
|
+ var workFlow = await _knowledgeWorkFlowRepository.GetAsync(p => p.KnowledgeId == workflow.ExternalId, cancellationToken);
|
|
|
+ if (workFlow == null)
|
|
|
+ throw new UserFriendlyException($"知识查询失败, workflowId: {workflow.ExternalId}", "无效流程编号");
|
|
|
|
|
|
- //修改业务数据状态
|
|
|
- workFlow.WorkFlowApplyStatus = EKnowledgeWorkFlowStatus.Revoke;
|
|
|
- workFlow.ActualOpinion = workflow.ActualOpinion;
|
|
|
- await _knowledgeWorkFlowRepository.UpdateAsync(workFlow, cancellationToken);
|
|
|
+ //修改业务数据状态
|
|
|
+ workFlow.WorkFlowApplyStatus = EKnowledgeWorkFlowStatus.Revoke;
|
|
|
+ workFlow.ActualOpinion = workflow.ActualOpinion;
|
|
|
+ await _knowledgeWorkFlowRepository.UpdateAsync(workFlow, cancellationToken);
|
|
|
|
|
|
|
|
|
//现有知识状态更改为已撤回
|
|
|
knowledge.Status = EKnowledgeStatus.Revert;
|
|
|
await _knowledgeRepository.UpdateAsync(knowledge, cancellationToken);
|
|
|
|
|
|
- //switch (workFlow.WorkflowModuleStatus)
|
|
|
- // {
|
|
|
- // case EKnowledgeApplyType.Add:
|
|
|
- // //将知识保存为草稿
|
|
|
- // knowledge.Status = EKnowledgeStatus.Drafts;
|
|
|
- // await _knowledgeRepository.UpdateAsync(knowledge, cancellationToken);
|
|
|
- // break;
|
|
|
- // default:
|
|
|
- // //现有知识状态更改为已撤回
|
|
|
- // knowledge.Status = EKnowledgeStatus.Revert;
|
|
|
- // await _knowledgeRepository.UpdateAsync(knowledge, cancellationToken);
|
|
|
- // break;
|
|
|
-
|
|
|
-
|
|
|
- //}
|
|
|
+ //switch (workFlow.WorkflowModuleStatus)
|
|
|
+ // {
|
|
|
+ // case EKnowledgeApplyType.Add:
|
|
|
+ // //将知识保存为草稿
|
|
|
+ // knowledge.Status = EKnowledgeStatus.Drafts;
|
|
|
+ // await _knowledgeRepository.UpdateAsync(knowledge, cancellationToken);
|
|
|
+ // break;
|
|
|
+ // default:
|
|
|
+ // //现有知识状态更改为已撤回
|
|
|
+ // knowledge.Status = EKnowledgeStatus.Revert;
|
|
|
+ // await _knowledgeRepository.UpdateAsync(knowledge, cancellationToken);
|
|
|
+ // break;
|
|
|
+
|
|
|
+
|
|
|
+ //}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -250,20 +267,20 @@ namespace Hotline.KnowledgeBase
|
|
|
public async Task EndWorkKnowledge(Workflow workflow, CancellationToken cancellationToken)
|
|
|
{
|
|
|
|
|
|
- //修改主表审批状态 根据流程ID查询审批主表
|
|
|
- var workFlow = await _knowledgeWorkFlowRepository.GetAsync(p => p.KnowledgeId == workflow.ExternalId, cancellationToken);
|
|
|
- if (workFlow == null)
|
|
|
- throw new UserFriendlyException($"知识查询失败, workflowId: {workflow.ExternalId}", "无效流程编号");
|
|
|
+ //修改主表审批状态 根据流程ID查询审批主表
|
|
|
+ var workFlow = await _knowledgeWorkFlowRepository.GetAsync(p => p.KnowledgeId == workflow.ExternalId, cancellationToken);
|
|
|
+ if (workFlow == null)
|
|
|
+ throw new UserFriendlyException($"知识查询失败, workflowId: {workflow.ExternalId}", "无效流程编号");
|
|
|
|
|
|
- //根据审批主表知识ID查询当前知识
|
|
|
- // var knowledge = await _knowledgeRepository.GetAsync(p => p.Id == workFlow.KnowledgeId, cancellationToken);
|
|
|
+ //根据审批主表知识ID查询当前知识
|
|
|
+ // var knowledge = await _knowledgeRepository.GetAsync(p => p.Id == workFlow.KnowledgeId, cancellationToken);
|
|
|
|
|
|
- workFlow.HandleTime = DateTime.Now;
|
|
|
- workFlow.WorkFlowApplyStatus = EKnowledgeWorkFlowStatus.Success;
|
|
|
- workFlow.ActualOpinion = workflow.ActualOpinion;
|
|
|
- await _knowledgeWorkFlowRepository.UpdateAsync(workFlow, cancellationToken);
|
|
|
+ workFlow.HandleTime = DateTime.Now;
|
|
|
+ workFlow.WorkFlowApplyStatus = EKnowledgeWorkFlowStatus.Success;
|
|
|
+ workFlow.ActualOpinion = workflow.ActualOpinion;
|
|
|
+ await _knowledgeWorkFlowRepository.UpdateAsync(workFlow, cancellationToken);
|
|
|
|
|
|
- var knowledge = await _knowledgeRepository.Queryable(false, false, false)
|
|
|
+ var knowledge = await _knowledgeRepository.Queryable(false, false, false)
|
|
|
.Includes(it => it.SystemOrganize)
|
|
|
.Includes(it => it.HotspotType)
|
|
|
.Includes(it => it.User)
|
|
@@ -321,8 +338,39 @@ namespace Hotline.KnowledgeBase
|
|
|
var pushKnowledge = _mapper.Map<KnowledgeSendDto>(knowledge);
|
|
|
pushKnowledge.CategoryCode = "01";
|
|
|
pushKnowledge.CategoryName = "公共服务";
|
|
|
- //推送
|
|
|
- if (isSendType == "0") //新增知识推送
|
|
|
+
|
|
|
+ //高效办成一件事配置
|
|
|
+ var cancelPublishOrderEnabled = _systemSettingCacheManager.GetSetting(SettingConstants.EfficientlyAccomplish)?.SettingValue[0];
|
|
|
+ //获取到配置,执行下面
|
|
|
+ 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 = "高效办成一件事";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //推送
|
|
|
+ if (isSendType == "0") //新增知识推送
|
|
|
|
|
|
await _capPublisher.PublishAsync(EventNames.HotlineKnowledgeAdd, pushKnowledge, cancellationToken: cancellationToken);
|
|
|
else if (isSendType == "1") //修改知识推送
|