ソースを参照

Merge branch 'master' of http://git.12345lm.cn/Fengwo/hotline

Dun.Jason 1 年間 前
コミット
ceeeedf301

+ 4 - 3
src/Hotline.Api/Controllers/OrderController.cs

@@ -1082,7 +1082,7 @@ public class OrderController : BaseController
             var nextDto = new NextWorkflowDto
             {
                 WorkflowId = orderDelay.WorkflowId,
-                StepExpiredTime = orderDelay.Workflow.ExpiredTime,
+                //StepExpiredTime = orderDelay.Workflow.ExpiredTime,
                 NextStepCode = nextStep.Key,
                 NextStepName = nextStep.Value,
                 NextMainHandler = nextStep.Key,
@@ -1134,7 +1134,7 @@ public class OrderController : BaseController
             .Includes(x => x.OrderVisit)
             .Includes(x => x.OrderVisit, y => y.Order)
             .Includes(x => x.OrderVisit, y => y.Employee)
-            .Where(x => x.OrderVisit.VisitState != EVisitState.None);
+            .Where(x => x.OrderVisit.VisitState != EVisitState.None && x.OrderVisit.IsCanHandle);
         if (_sessionContext.OrgId != null && !_sessionContext.OrgId.StartsWith("001"))
         {
             query.WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.OrderVisit.Order.Title.Contains(dto.Keyword!) || d.OrderVisit.Order.No.Contains(dto.Keyword!))
@@ -1214,7 +1214,8 @@ public class OrderController : BaseController
         var workflowId = string.Empty;
         try
         {
-            var startDto = _mapper.Map<StartWorkflowDto>(dto.Workflow);
+            await _orderRepository.OrderScreenRevisionVisit(visit.Id, false, HttpContext.RequestAborted);
+			var startDto = _mapper.Map<StartWorkflowDto>(dto.Workflow);
             startDto.DefinitionModuleCode = WorkflowModuleConsts.OrderScreen;
             startDto.Title = dto.Data.Content;
             workflowId = await _workflowApplication.StartWorkflowAsync(startDto, id, cancellationToken: HttpContext.RequestAborted);

+ 22 - 11
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -438,7 +438,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         //        .ToList();
         return new NextStepsDto
         {
-            Steps = await GetConfigStepsAsync(startStepDefine.StepType, startStepDefine.BusinessType, firstStepDefines, cancellationToken)
+            Steps = await GetConfigStepsAsync(definition.FlowType, startStepDefine.StepType, startStepDefine.BusinessType, firstStepDefines, cancellationToken)
         };
         //dto.Steps = steps;
         //return dto;
@@ -508,7 +508,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         if (!nextDefines.Any())
             throw new UserFriendlyException("未正确配置下一节点");
 
-        dto.Steps = await GetConfigStepsAsync(currentStep.StepType, currentStep.BusinessType, nextDefines, cancellationToken);
+        dto.Steps = await GetConfigStepsAsync(workflow.FlowType, currentStep.StepType, currentStep.BusinessType, nextDefines, cancellationToken);
 
         if (currentStep.IsInCountersign() && currentStep.IsTopCountersignEndStep(workflow.TopCountersignStepId))
         {
@@ -542,16 +542,22 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
             throw new UserFriendlyException("无效当前节点编号");
         return new NextStepsDto
         {
-            Steps = await GetRecallConfigStepsAsync(workflow.Status is EWorkflowStatus.Completed, currentStep.BusinessType, stepDefines, cancellationToken)
+            Steps = await GetRecallConfigStepsAsync(workflow.Status is EWorkflowStatus.Completed,
+                workflow.FlowType, currentStep.BusinessType, stepDefines, cancellationToken)
         };
     }
 
-    private async Task<IReadOnlyList<NextStepOption>> GetRecallConfigStepsAsync(bool isWorkflowFiled, EBusinessType currentBusinessType, List<StepDefine> stepDefines, CancellationToken cancellationToken)
+    private async Task<IReadOnlyList<NextStepOption>> GetRecallConfigStepsAsync(
+        bool isWorkflowFiled,
+        EFlowType flowType,
+        EBusinessType currentBusinessType,
+        List<StepDefine> stepDefines,
+        CancellationToken cancellationToken)
     {
         var stepOptions = new List<NextStepOption>();
         foreach (var stepDefine in stepDefines)
         {
-            var nextStepOption = await GetConfigStepAsync(stepDefine, cancellationToken);
+            var nextStepOption = await GetConfigStepAsync(flowType, stepDefine, cancellationToken);
             if (stepDefine.StepType is EStepType.End)
             {
                 stepOptions.Add(nextStepOption);
@@ -614,13 +620,17 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         await _workflowDomainService.RejectAsync(workflow, basicDto, cancellationToken);
     }
 
-    private async Task<List<NextStepOption>> GetConfigStepsAsync(EStepType currentStepType,
-        EBusinessType currentBusinessType, List<StepDefine> stepDefines, CancellationToken cancellationToken)
+    private async Task<List<NextStepOption>> GetConfigStepsAsync(
+        EFlowType flowType,
+        EStepType currentStepType,
+        EBusinessType currentBusinessType,
+        List<StepDefine> stepDefines,
+        CancellationToken cancellationToken)
     {
         var stepOptions = new List<NextStepOption>();
         foreach (var stepDefine in stepDefines)
         {
-            var nextStepOption = await GetConfigStepAsync(stepDefine, cancellationToken);
+            var nextStepOption = await GetConfigStepAsync(flowType, stepDefine, cancellationToken);
             if (stepDefine.StepType is EStepType.End)
             {
                 stepOptions.Add(nextStepOption);
@@ -635,7 +645,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         return stepOptions;
     }
 
-    public async Task<NextStepOption> GetConfigStepAsync(StepDefine stepDefine, CancellationToken cancellationToken)
+    public async Task<NextStepOption> GetConfigStepAsync(EFlowType flowType, StepDefine stepDefine, CancellationToken cancellationToken)
     {
         var handlers = new List<Kv>();
         if (stepDefine.StepType is EStepType.End)
@@ -668,8 +678,9 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                     .ToListAsync(cancellationToken);
                 var users1 = roles.SelectMany(d => d.Accounts).Select(d => d.User);
 
-                //解决当前为一级部门选择中心汇总
-                if (stepDefine.StepType != EStepType.Summary || stepDefine.BusinessType != EBusinessType.Center)
+                //工单办理:除当前为一级部门选择中心汇总,其余只能选下级部门
+                if (flowType is EFlowType.Handle
+                    && (stepDefine.StepType != EStepType.Summary || stepDefine.BusinessType != EBusinessType.Center))
                     users1 = users1.Where(d => d.OrgId.StartsWith(levelOneOrgCode));
 
                 handlers = users1.Select(d => new Kv(d.Id, d.Name)).ToList();

+ 2 - 2
src/Hotline.Application/Handlers/FlowEngine/EndWorkflowHandler.cs

@@ -117,7 +117,6 @@ public class EndWorkflowHandler : INotificationHandler<EndWorkflowNotify>
                 {
                     if (isReviewPass)
                     {
-
                         screen.Status = EScreenStatus.End;
                         screen.ReplyContent = workflow.ActualOpinion;
                         await _orderScreenRepository.UpdateAsync(screen, cancellationToken);
@@ -157,7 +156,8 @@ public class EndWorkflowHandler : INotificationHandler<EndWorkflowNotify>
                     }
                     else
                     {
-                        screen.Status = EScreenStatus.Refuse;
+	                    await _orderRepository.OrderScreenRevisionVisit(screen.VisitId, true, cancellationToken);
+						screen.Status = EScreenStatus.Refuse;
                         screen.ReplyContent = workflow.ActualOpinion;
                         await _orderScreenRepository.UpdateAsync(screen, cancellationToken);
                     }

+ 4 - 0
src/Hotline.Repository.SqlSugar/Orders/OrderRepository.cs

@@ -257,5 +257,9 @@ namespace Hotline.Repository.SqlSugar.Orders
 			}
 		}
 
+        public async Task OrderScreenRevisionVisit(string VisitId, bool canHandle, CancellationToken cancellationToken) {
+
+            await Db.Updateable<OrderVisit>().SetColumns(x => x.IsCanHandle == canHandle).Where(x=>x.Id == VisitId).ExecuteCommandAsync(cancellationToken);
+        }
 	}
 }

+ 5 - 4
src/Hotline.Share/Dtos/FlowEngine/NextWorkflowDto.cs

@@ -9,10 +9,11 @@ public class NextWorkflowDto : BasicWorkflowDto
 {
     public string WorkflowId { get; set; }
 
-    /// <summary>
-    /// 下一节点到期时间(节点期满时间)
-    /// </summary>
-    public DateTime StepExpiredTime { get; set; }
+    ///// <summary>
+    ///// 下一节点到期时间(节点期满时间)
+    ///// 需求调整
+    ///// </summary>
+    //public DateTime StepExpiredTime { get; set; }
 
     #region 手动填入办理人信息
 

+ 5 - 0
src/Hotline.Share/Dtos/Knowledge/KnowledgeDataDto.cs

@@ -116,6 +116,11 @@ namespace Hotline.Share.Dtos.Knowledge
         /// </summary>
         public bool IsCanHandle { get; set; }
 
+        /// <summary>
+        /// 知识归属
+        /// </summary>
+        public string? Attribution { get; set; }
+
 		public WorkflowDto? Workflow { get; set; }
 	}
 

+ 23 - 24
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -99,7 +99,7 @@ namespace Hotline.FlowEngine.Workflows
 
             //firststeps
             var firstSteps = await CreateNextStepsAsync(workflow, firstStepDefine, startStep, dto, flowAssignInfo,
-                workflow.ExpiredTime, cancellationToken);
+                cancellationToken);
             if (firstSteps.Any())
                 workflow.Steps.AddRange(firstSteps);
 
@@ -369,7 +369,7 @@ namespace Hotline.FlowEngine.Workflows
 
             //创建下一/N个节点(会签汇总节点:会签未全部办理时不创建,最后一个会签办理节点创建会签汇总节点)
             var nextSteps = await CreateNextStepsAsync(workflow, nextStepDefine, currentStep, dto, flowAssignInfo,
-                dto.StepExpiredTime, cancellationToken);
+                cancellationToken);
 
             //赋值当前节点的下级办理节点
             if (dto.IsStartCountersign
@@ -512,7 +512,8 @@ namespace Hotline.FlowEngine.Workflows
                 if (lastStep is null || lastStep.StepType is EStepType.End)
                     throw new UserFriendlyException($"流程流转数据异常,未结束流程出现endStep, flowId: {workflow.Id}", "流程流转数据异常");
 
-                var targetSteps = await CreateConfigStepsAsync(workflow, targetStepDefine, lastStep, dto, flowAssignInfo, workflow.ExpiredTime, cancellationToken);
+                var targetSteps = await CreateConfigStepsAsync(workflow, targetStepDefine, lastStep, dto,
+                    flowAssignInfo, cancellationToken);
                 targetStep = targetSteps.First();
 
                 workflow.EndCountersign();
@@ -757,7 +758,7 @@ namespace Hotline.FlowEngine.Workflows
         /// 创建下1/N个节点
         /// </summary>
         private async Task<List<WorkflowStep>> CreateNextStepsAsync(Workflow workflow, StepDefine nextStepDefine,
-            WorkflowStep currentStep, BasicWorkflowDto dto, FlowAssignInfo flowAssignInfo, DateTime expiredTime,
+            WorkflowStep currentStep, BasicWorkflowDto dto, FlowAssignInfo flowAssignInfo,
             CancellationToken cancellationToken)
         {
             List<WorkflowStep> nextSteps = new();
@@ -773,13 +774,13 @@ namespace Hotline.FlowEngine.Workflows
                         {
                             //todo 依据会签策略创建会签下一级节点
                             nextSteps = await CreateCountersignStepsAsync(workflow, nextStepDefine, currentStep, dto,
-                                flowAssignInfo.FlowAssignType, expiredTime, cancellationToken);
+                                flowAssignInfo.FlowAssignType, cancellationToken);
                         }
                         else
                         {
                             //todo 创建普通节点(根据配置)
                             nextSteps = await CreateConfigStepsAsync(workflow, nextStepDefine, currentStep, dto,
-                                flowAssignInfo, expiredTime, cancellationToken);
+                                flowAssignInfo, cancellationToken);
                         }
                     }
                     else
@@ -790,7 +791,7 @@ namespace Hotline.FlowEngine.Workflows
                         if (csStartStep is null)
                             throw new UserFriendlyException("未查询到会签节点");
 
-                        nextSteps = await CreateCsEndStepsByPrevStepAsync(workflow, csStartStep, dto, expiredTime,
+                        nextSteps = await CreateCsEndStepsByPrevStepAsync(workflow, csStartStep, dto,
                             cancellationToken);
                     }
                 }
@@ -799,14 +800,14 @@ namespace Hotline.FlowEngine.Workflows
                     if (dto.BackToCountersignEnd)
                     {
                         //todo check if cs all complete, create next
-                        nextSteps = await CreateCsEndStepsByPrevStepAsync(workflow, currentStep, dto, expiredTime,
+                        nextSteps = await CreateCsEndStepsByPrevStepAsync(workflow, currentStep, dto,
                             cancellationToken);
                     }
                     else
                     {
                         //todo 依据会签策略创建会签下一级节点
                         nextSteps = await CreateCountersignStepsAsync(workflow, nextStepDefine, currentStep, dto,
-                            flowAssignInfo.FlowAssignType, expiredTime, cancellationToken);
+                            flowAssignInfo.FlowAssignType, cancellationToken);
                     }
                 }
             }
@@ -814,20 +815,19 @@ namespace Hotline.FlowEngine.Workflows
             {
                 //todo 依据会签策略创建会签下一级节点
                 nextSteps = await CreateCountersignStepsAsync(workflow, nextStepDefine, currentStep, dto,
-                    flowAssignInfo.FlowAssignType, expiredTime, cancellationToken);
+                    flowAssignInfo.FlowAssignType, cancellationToken);
             }
             else if (currentStep.InstanceMode is EInstanceMode.Dynamic && !currentStep.DynamicShouldTerminal())
             {
                 //todo 创建动态下一级节点
                 nextSteps = await CreateStepsAsync(workflow, nextStepDefine, currentStep, dto,
                     flowAssignInfo.FlowAssignType, dto.NextHandlers, null, EWorkflowStepStatus.WaitForAccept,
-                    ECountersignPosition.None, expiredTime, false, cancellationToken);
+                    ECountersignPosition.None, false, cancellationToken);
             }
             else
             {
                 //todo 创建普通节点(根据配置)
-                nextSteps = await CreateConfigStepsAsync(workflow, nextStepDefine, currentStep, dto, flowAssignInfo,
-                    expiredTime, cancellationToken);
+                nextSteps = await CreateConfigStepsAsync(workflow, nextStepDefine, currentStep, dto, flowAssignInfo, cancellationToken);
             }
 
             return nextSteps;
@@ -839,7 +839,7 @@ namespace Hotline.FlowEngine.Workflows
             WorkflowStep prevStep,
             BasicWorkflowDto dto,
             EFlowAssignType flowAssignType,
-            DateTime expiredTime,
+            //DateTime expiredTime,
             CancellationToken cancellationToken
         )
         {
@@ -847,14 +847,14 @@ namespace Hotline.FlowEngine.Workflows
 
             return CreateStepsAsync(workflow, stepDefine, prevStep, dto, flowAssignType, dto.NextHandlers, countersignId,
                   EWorkflowStepStatus.WaitForAccept, prevStep.GetNextStepCountersignPosition(),
-                  expiredTime, false, cancellationToken);
+                   false, cancellationToken);
         }
 
         /// <summary>
         /// 根据传入节点的上一节点创建会签汇总节点(汇总传入节点的前一节点)
         /// </summary>
         private async Task<List<WorkflowStep>> CreateCsEndStepsByPrevStepAsync(Workflow workflow, WorkflowStep step,
-            BasicWorkflowDto dto, DateTime expiredTime, CancellationToken cancellationToken)
+            BasicWorkflowDto dto, CancellationToken cancellationToken)
         {
             var prevStep = workflow.Steps.FirstOrDefault(d => d.Id == step.PrevStepId);
             if (prevStep is null)
@@ -864,7 +864,7 @@ namespace Hotline.FlowEngine.Workflows
             if (prevStep.StartedCountersignHasAllHandled())
             {
                 //todo 创建会签汇总节点
-                var countersignEndStep = await CreateCountersignEndStepAsync(prevStep, dto, expiredTime, cancellationToken);
+                var countersignEndStep = await CreateCountersignEndStepAsync(prevStep, dto, workflow.ExpiredTime, cancellationToken);
                 nextSteps = new List<WorkflowStep> { countersignEndStep };
 
                 //create trace
@@ -1241,7 +1241,7 @@ namespace Hotline.FlowEngine.Workflows
             //     targetPrevStepBox, targetPrevStep, traceStatus, workflow.ExpiredTime, cancellationToken);
 
             var targetStepsNew = await CreateConfigStepsAsync(workflow, targetStepDefine, targetPrevStep, dto,
-                flowAssignInfo, workflow.ExpiredTime, cancellationToken);
+                flowAssignInfo, cancellationToken);
 
             //更新当前办理节点信息
             workflow.UpdateWorkflowCurrentStepInfo(dto.IsStartCountersign,
@@ -1318,7 +1318,7 @@ namespace Hotline.FlowEngine.Workflows
             WorkflowStep prevStep,
             BasicWorkflowDto dto,
             FlowAssignInfo flowAssignInfo,
-            DateTime expiredTime,
+            //DateTime expiredTime,
             CancellationToken cancellationToken)
         {
             List<Kv> handlers;
@@ -1334,8 +1334,7 @@ namespace Hotline.FlowEngine.Workflows
             }
 
             return await CreateStepsAsync(workflow, stepDefine, prevStep, dto, flowAssignInfo.FlowAssignType, handlers,
-                null, EWorkflowStepStatus.WaitForAccept, ECountersignPosition.None, expiredTime, true,
-                 cancellationToken);
+                null, EWorkflowStepStatus.WaitForAccept, ECountersignPosition.None, true, cancellationToken);
         }
 
         private async Task<List<WorkflowStep>> CreateStepsAsync(
@@ -1348,7 +1347,7 @@ namespace Hotline.FlowEngine.Workflows
             string? countersignId,
             EWorkflowStepStatus stepStatus,
             ECountersignPosition csPosition,
-            DateTime expiredTime,
+            //DateTime expiredTime,
             bool isOrigin,
             CancellationToken cancellationToken
             )
@@ -1364,7 +1363,7 @@ namespace Hotline.FlowEngine.Workflows
                 {
                     var step = CreateStep(stepDefine, prevStep, workflow.Id, flowAssignType, new List<Kv> { handler },
                         dto.NextStepCode, dto.NextMainHandler, countersignId,
-                        stepStatus, csPosition, expiredTime, dto.NextStepName, isOrigin);
+                        stepStatus, csPosition, workflow.ExpiredTime, dto.NextStepName, isOrigin);
 
                     steps.Add(step);
                 }
@@ -1373,7 +1372,7 @@ namespace Hotline.FlowEngine.Workflows
             {
                 var step = CreateStep(stepDefine, prevStep, workflow.Id, flowAssignType, handlers,
                     dto.NextStepCode, dto.NextMainHandler, countersignId,
-                    stepStatus, csPosition, expiredTime, dto.NextStepName, isOrigin);
+                    stepStatus, csPosition, workflow.ExpiredTime, dto.NextStepName, isOrigin);
 
                 steps.Add(step);
             }

+ 1 - 0
src/Hotline/Orders/IOrderRepository.cs

@@ -22,5 +22,6 @@ namespace Hotline.Orders
         Task<PagedDto<OrderDto>> GetAboutToExpireAsync(AboutToExpireListDto dto, CancellationToken cancellationToken);
         //Task<PagedDto<WorkflowOrderDto>> GetAboutToExpireNodeAsync(AboutToExpireListDto dto, CancellationToken cancellationToken);
         Task OrderParticiple(string inputStr, string orderId, CancellationToken cancellationToken);
+        Task OrderScreenRevisionVisit(string VisitId, bool canHandle, CancellationToken cancellationToken);
 	}
 }