ソースを参照

修改高效办成一件事

tangjiang 5 ヶ月 前
コミット
a90dd6b543

+ 93 - 45
src/Hotline/KnowledgeBase/KnowledgeDomainService.cs

@@ -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")  //修改知识推送

+ 5 - 0
src/Hotline/Settings/SettingConstants.cs

@@ -585,5 +585,10 @@ namespace Hotline.Settings
         /// 取消发布功能总开关
         /// </summary>
         public const string CancelPublishOrderEnabled = "CancelPublishOrderEnabled";
+
+        /// <summary>
+        /// 高效办成一件事
+        /// </summary>
+        public const string EfficientlyAccomplish = "EfficientlyAccomplish";
     }
 }