فهرست منبع

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

Dun.Jason 1 سال پیش
والد
کامیت
c0170fbc88

+ 9 - 2
src/Hotline.Api/Controllers/OrderController.cs

@@ -2398,7 +2398,7 @@ public class OrderController : BaseController
         //{
         //    throw UserFriendlyException.SameMessage("该工单存在正在审核中的延期,不能办理");
         //}
-        if (await _orderSendBackAuditRepository.AnyAsync(x => x.OrderId == order.Id && x.State == ESendBackAuditState.Apply, HttpContext.RequestAborted))
+        if (order != null && await _orderSendBackAuditRepository.AnyAsync(x => x.OrderId == order.Id && x.State == ESendBackAuditState.Apply, HttpContext.RequestAborted))
         {
             throw UserFriendlyException.SameMessage("该工单存在正在审核中的退回,不能办理");
         }
@@ -2618,7 +2618,7 @@ public class OrderController : BaseController
     {
         var oneSendBack = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.OneOrgSendBack)?.SettingValue[0]);
         var twoSendBack = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.TwoOrgSendBack)?.SettingValue[0]);
-        if (oneSendBack || twoSendBack)
+		if (oneSendBack || twoSendBack)
         {
             var workflow =
                 await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withSteps: true, cancellationToken: HttpContext.RequestAborted);
@@ -2636,6 +2636,12 @@ public class OrderController : BaseController
             if (sendBack)
 	            throw UserFriendlyException.SameMessage("当前工单已经生成退回记录");
 
+            var order = await _orderRepository
+	            .Queryable()
+	            .Includes(d => d.Workflow)
+	            .FirstAsync(d => d.Id == workflow.ExternalId);
+            if (order.Workflow.IsInCountersign) throw UserFriendlyException.SameMessage("工单会签中,无法进行退回!");
+
 			var applyOrg = _organizeRepository.Get(currentStep.AcceptorOrgId);
             var sendBackOrg = _organizeRepository.Get(prevStep.AcceptorOrgId);
             if ((twoSendBack && 2.Equals(applyOrg.Level) && 1.Equals(sendBackOrg.Level) && !sendBackOrg.IsCenter) 
@@ -2719,6 +2725,7 @@ public class OrderController : BaseController
             .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart)
             .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd)
             .WhereIF(dto.State.HasValue, d => d.State == dto.State)
+            .Where(x=>x.SendBackOrgId == _sessionContext.OrgId)
             .OrderByDescending(x => x.CreationTime)
             .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
 

+ 1 - 1
src/Hotline.Application/Handlers/FlowEngine/WorkflowRecallHandler.cs

@@ -63,7 +63,7 @@ public class WorkflowRecallHandler : INotificationHandler<RecallNotify>
 
                 await _orderRepository.UpdateAsync(order, cancellationToken);
 
-                if (data.External.TimeLimit.HasValue && data.External.TimeLimitUnit.HasValue)
+                if (data.External != null && data.External.TimeLimit.HasValue && data.External.TimeLimitUnit.HasValue)
                 {
                     var expiredTime = _timeLimitDomainService.CalcEndTime(DateTime.Now,
                         data.External.TimeLimitUnit.Value,

+ 10 - 3
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -488,7 +488,7 @@ namespace Hotline.FlowEngine.Workflows
             //    _sessionContext.RequiredOrgId, _sessionContext.OrgName,
             //    _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
             //    currentStep, nextSteps?.FirstOrDefault());
-            
+
 
             //指派实际办理节点
             if (workflow.FlowType is EFlowType.Handle &&
@@ -1844,7 +1844,12 @@ namespace Hotline.FlowEngine.Workflows
                 //1. create terminal trace 2. 撤回至startStep
                 var newStep = await DuplicateStepWithTraceAsync(workflow, startCountersignStep, EWorkflowTraceStatus.Normal, cancellationToken);
 
-                if (startCountersignStep.IsCountersignEndStep)
+                //当topcsStep结束cs时,实际办理节点应该更新为newStep
+                if (startCountersignStep.Id == workflow.TopCountersignStepId)
+                    workflow.UpdateActualStepWhenAssign(newStep, startCountersignStep.HandlerOrgName, startCountersignStep.HandlerOrgId);
+
+                //csEndStep又开启了cs,在结束会签时,如果该节点是topcs的end节点, workflow.topcsStep应该更新为前一cs开启stepId
+                if (startCountersignStep.IsTopCountersignEndStep(workflow.TopCountersignStepId))
                     workflow.TopCountersignStepId = startCountersignStep.CountersignStartStepId;
 
                 if (workflow.CheckIfCountersignOver())
@@ -1883,7 +1888,7 @@ namespace Hotline.FlowEngine.Workflows
 
         private void EndStepByTerminalCs(WorkflowStep step, List<WorkflowTrace> traces, ref List<WorkflowStep> updateSteps, ref List<WorkflowTrace> updateTraces)
         {
-            if (step.Status is EWorkflowStepStatus.Handled) return;
+            var isHandled = step.Status is EWorkflowStepStatus.Handled;
             var opinion = $"会签未办理完成,由 {_sessionContext.OrgName} 的 {_sessionContext.UserName} 终止办理";
             if (step.IsStartCountersign)
             {
@@ -1901,6 +1906,8 @@ namespace Hotline.FlowEngine.Workflows
             }
             updateSteps.Add(step);
 
+            if (isHandled) return;
+
             var trace = traces.FirstOrDefault(d => d.StepId == step.Id);
             if (trace != null)
             {