Parcourir la source

Merge branch 'test' of http://110.188.24.182:10023/Fengwo/hotline into test

田爽 il y a 1 mois
Parent
commit
15d6e0c081

+ 121 - 94
src/Hotline.Api/Controllers/OrderController.cs

@@ -1337,7 +1337,7 @@ public class OrderController : BaseController
             Histories = histories,
             IsCanUpdate = isCanUpdate
         };
-        if (_appOptions.Value.IsLuZhou 
+        if (_appOptions.Value.IsLuZhou
             && !_sessionContext.OrgIsCenter
             && rsp.OrderVisitModel.Order.IsSecret)
         {
@@ -2693,7 +2693,7 @@ public class OrderController : BaseController
                 {
                     var mes = "超过截至甄别时间不能申请甄别!";
                     mes = _appOptions.Value.IsLuZhou ? "回访完成的次月第一个工作日后不能再申请甄别!" : mes;
-					throw UserFriendlyException.SameMessage(mes);
+                    throw UserFriendlyException.SameMessage(mes);
                 }
             }
         }
@@ -3034,6 +3034,31 @@ public class OrderController : BaseController
         await _workflowDomainService.NextAsync(dto, cancellationToken: HttpContext.RequestAborted);
     }
 
+    /// <summary>
+    /// 甄别审批退回(返回前一节点)
+    /// </summary>
+    [HttpPost("screen/previous")]
+    [LogFilterAlpha("甄别审批退回")]
+    public async Task Previous([FromBody] PreviousWorkflowDto dto)
+    {
+        /*
+         *甄别退回到最开始节点到部门 todo 重构放在调用处判断  
+           if (workflow.FlowType == EFlowType.Review && workflow.ModuleCode == WorkflowModuleConsts.OrderScreen)
+           {
+           	newPrevStep.FlowAssignType = newPrevStep.StepType == EStepType.Start ? EFlowAssignType.Org : prevStep.FlowAssignType;
+           }
+         */
+        
+        await _workflowDomainService.PreviousAsync(dto,
+            newStepConfig: (workflow, currentStep, prevStepDefine, prevStep, newPrevStep) =>
+            {
+                newPrevStep.FlowAssignType = prevStepDefine.BusinessType is EBusinessType.Department
+                    ? EFlowAssignType.Org
+                    : prevStep.FlowAssignType;
+            },
+            cancellationToken: HttpContext.RequestAborted);
+    }
+
 
     #endregion
 
@@ -3387,13 +3412,13 @@ public class OrderController : BaseController
                     //中心催办
                     if (_sessionContext.OrgIsCenter)
                     {
-						//泸州任务 303 当前节点处于承办部门,不管是几级部门,催办对象都是当前接办部门所属的一级部门的所有部门经办人
-						if (_appOptions.Value.IsLuZhou && !string.IsNullOrEmpty(order.OrgLevelOneCode) && order.OrgLevelOneCode != "001")
-						{
-							model.OrgId = order.OrgLevelOneCode;
-							model.OrgName = order.OrgLevelOneName;
-						}
-						if (dto.AcceptSms)
+                        //泸州任务 303 当前节点处于承办部门,不管是几级部门,催办对象都是当前接办部门所属的一级部门的所有部门经办人
+                        if (_appOptions.Value.IsLuZhou && !string.IsNullOrEmpty(order.OrgLevelOneCode) && order.OrgLevelOneCode != "001")
+                        {
+                            model.OrgId = order.OrgLevelOneCode;
+                            model.OrgName = order.OrgLevelOneName;
+                        }
+                        if (dto.AcceptSms)
                         {
                             try
                             {
@@ -3426,40 +3451,41 @@ public class OrderController : BaseController
                         }
                     }
                     //部门催办
-                    else {
-						if (dto.AcceptSms)
-						{
-							try
-							{
-								//查询部门所有账号
-								var userlist = work.FlowAssignType == EFlowAssignType.User || work.FlowAssignType == EFlowAssignType.Role 
+                    else
+                    {
+                        if (dto.AcceptSms)
+                        {
+                            try
+                            {
+                                //查询部门所有账号
+                                var userlist = work.FlowAssignType == EFlowAssignType.User || work.FlowAssignType == EFlowAssignType.Role
                                     ? await _userRepository.Queryable().Where(x => x.Id == workflowStepHandler.UserId).ToListAsync() :
-                                    await _userRepository.Queryable().Where(x => x.OrgId  == workflowStepHandler.OrgId).ToListAsync();
-								foreach (var user in userlist)
-								{
-									//发送短信
-									var messageDto = new Share.Dtos.Push.MessageDto
-									{
-										PushBusiness = EPushBusiness.OrderUrge,
-										ExternalId = order.Id,
-										OrderId = order.Id,
-										PushPlatform = EPushPlatform.Sms,
-										Remark = order.Title,
-										Name = user.Name,
-										TemplateCode = "1002",
-										Params = new List<string>() { order.No },
-										TelNumber = user.PhoneNo,
-									};
-									await _mediator.Publish(new PushMessageNotify(messageDto), HttpContext.RequestAborted);
-								}
-							}
-							catch
-							{
-							}
-						}
-					}
-					await _orderUrgeRepository.AddAsync(model, HttpContext.RequestAborted);
-				}
+                                    await _userRepository.Queryable().Where(x => x.OrgId == workflowStepHandler.OrgId).ToListAsync();
+                                foreach (var user in userlist)
+                                {
+                                    //发送短信
+                                    var messageDto = new Share.Dtos.Push.MessageDto
+                                    {
+                                        PushBusiness = EPushBusiness.OrderUrge,
+                                        ExternalId = order.Id,
+                                        OrderId = order.Id,
+                                        PushPlatform = EPushPlatform.Sms,
+                                        Remark = order.Title,
+                                        Name = user.Name,
+                                        TemplateCode = "1002",
+                                        Params = new List<string>() { order.No },
+                                        TelNumber = user.PhoneNo,
+                                    };
+                                    await _mediator.Publish(new PushMessageNotify(messageDto), HttpContext.RequestAborted);
+                                }
+                            }
+                            catch
+                            {
+                            }
+                        }
+                    }
+                    await _orderUrgeRepository.AddAsync(model, HttpContext.RequestAborted);
+                }
 
 
             }
@@ -3481,9 +3507,9 @@ public class OrderController : BaseController
         var order = await _orderRepository.GetAsync(dto.OrderId, HttpContext.RequestAborted);
         if (order is null)
             throw UserFriendlyException.SameMessage("无效工单");
-		var work = await _workflowStepRepository.GetAsync(p => p.Id == order.ActualHandleStepId, HttpContext.RequestAborted);
-		var workflowStepHandler = work.GetWorkflowStepHandler();
-		foreach (var item in dto.UrgeOrgDtos)
+        var work = await _workflowStepRepository.GetAsync(p => p.Id == order.ActualHandleStepId, HttpContext.RequestAborted);
+        var workflowStepHandler = work.GetWorkflowStepHandler();
+        foreach (var item in dto.UrgeOrgDtos)
         {
             var model = _mapper.Map<OrderUrge>(dto);
             model.OrgId = item.OrgId;
@@ -3495,13 +3521,13 @@ public class OrderController : BaseController
             if (dto.Files.Any())
                 model.FileJson =
                     await _fileRepository.AddFileAsync(dto.Files, model.Id, "", HttpContext.RequestAborted);
-			//泸州任务 303 当前节点处于承办部门,不管是几级部门,催办对象都是当前接办部门所属的一级部门的所有部门经办人
-			if (_appOptions.Value.IsLuZhou && !string.IsNullOrEmpty(order.OrgLevelOneCode) && order.OrgLevelOneCode != "001")
-			{
-				model.OrgId = order.OrgLevelOneCode;
-				model.OrgName = order.OrgLevelOneName;
-			}
-			await _orderUrgeRepository.AddAsync(model, HttpContext.RequestAborted);
+            //泸州任务 303 当前节点处于承办部门,不管是几级部门,催办对象都是当前接办部门所属的一级部门的所有部门经办人
+            if (_appOptions.Value.IsLuZhou && !string.IsNullOrEmpty(order.OrgLevelOneCode) && order.OrgLevelOneCode != "001")
+            {
+                model.OrgId = order.OrgLevelOneCode;
+                model.OrgName = order.OrgLevelOneName;
+            }
+            await _orderUrgeRepository.AddAsync(model, HttpContext.RequestAborted);
             if (_sessionContext.OrgIsCenter)
             {
                 if (dto.AcceptSms)
@@ -3536,39 +3562,40 @@ public class OrderController : BaseController
                     }
                 }
             }
-            else {
-				if (dto.AcceptSms)
-				{
-					try
-					{
-						//查询部门所有账号
-						var userlist = work.FlowAssignType == EFlowAssignType.User || work.FlowAssignType == EFlowAssignType.Role
-							? await _userRepository.Queryable().Where(x => x.Id == workflowStepHandler.UserId).ToListAsync() :
-							await _userRepository.Queryable().Where(x => x.OrgId == workflowStepHandler.OrgId).ToListAsync();
-						foreach (var user in userlist)
-						{
-							//发送短信
-							var messageDto = new Share.Dtos.Push.MessageDto
-							{
-								PushBusiness = EPushBusiness.OrderUrge,
-								ExternalId = order.Id,
-								OrderId = order.Id,
-								PushPlatform = EPushPlatform.Sms,
-								Remark = order.Title,
-								Name = user.Name,
-								TemplateCode = "1002",
-								Params = new List<string>() { order.No },
-								TelNumber = user.PhoneNo,
-							};
-							await _mediator.Publish(new PushMessageNotify(messageDto), HttpContext.RequestAborted);
-						}
-					}
-					catch
-					{
-					}
-				}
-			}
-            
+            else
+            {
+                if (dto.AcceptSms)
+                {
+                    try
+                    {
+                        //查询部门所有账号
+                        var userlist = work.FlowAssignType == EFlowAssignType.User || work.FlowAssignType == EFlowAssignType.Role
+                            ? await _userRepository.Queryable().Where(x => x.Id == workflowStepHandler.UserId).ToListAsync() :
+                            await _userRepository.Queryable().Where(x => x.OrgId == workflowStepHandler.OrgId).ToListAsync();
+                        foreach (var user in userlist)
+                        {
+                            //发送短信
+                            var messageDto = new Share.Dtos.Push.MessageDto
+                            {
+                                PushBusiness = EPushBusiness.OrderUrge,
+                                ExternalId = order.Id,
+                                OrderId = order.Id,
+                                PushPlatform = EPushPlatform.Sms,
+                                Remark = order.Title,
+                                Name = user.Name,
+                                TemplateCode = "1002",
+                                Params = new List<string>() { order.No },
+                                TelNumber = user.PhoneNo,
+                            };
+                            await _mediator.Publish(new PushMessageNotify(messageDto), HttpContext.RequestAborted);
+                        }
+                    }
+                    catch
+                    {
+                    }
+                }
+            }
+
             var setting = _systemSettingCacheManager.GetSetting(SettingConstants.CityBaseConfiguration)?.SettingValue[0];
             CityBaseConfiguration cityBase = JsonSerializer.Deserialize<CityBaseConfiguration>(setting);
             //推省上
@@ -7301,11 +7328,11 @@ public class OrderController : BaseController
         }
     }
 
-	/// <summary>
-	/// 批量重提   根据传入的工单编号特提所有工单
-	/// </summary>
-	/// <returns></returns>
-	[HttpPost("order_batch_special")]
+    /// <summary>
+    /// 批量重提   根据传入的工单编号特提所有工单
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("order_batch_special")]
     [AllowAnonymous]
     public async Task BatchSpecial([FromBody] OrderBatchSpecialDto model)
     {
@@ -7313,15 +7340,15 @@ public class OrderController : BaseController
             .Includes(o => o.Workflow)
             .Includes(o => o.OrderVisits)
             .Where(o => (o.CounterSignType == null || o.CounterSignType == ECounterSignType.Department))
-            .In(o=> o.No, model.No).ToListAsync();
+            .In(o => o.No, model.No).ToListAsync();
         if (!orders.Any())
             throw UserFriendlyException.SameMessage("未查询到工单信息!");
         foreach (var order in orders)
         {
             var nextStep = await _workflowTraceRepository.Queryable()
-				.LeftJoin<SystemOrganize>((step, o) => step.HandlerOrgId == o.Id)
-				.Where((step,o) =>  step.WorkflowId == order.WorkflowId && step.TraceStyle == ETraceStyle.Flow && step.StepType == EStepType.Normal
-					&&!string.IsNullOrEmpty(step.HandlerOrgId) && o.Level == 1 && step.BusinessType == EBusinessType.Department).OrderByDescending(step => step.CreationTime)
+                .LeftJoin<SystemOrganize>((step, o) => step.HandlerOrgId == o.Id)
+                .Where((step, o) => step.WorkflowId == order.WorkflowId && step.TraceStyle == ETraceStyle.Flow && step.StepType == EStepType.Normal
+                    && !string.IsNullOrEmpty(step.HandlerOrgId) && o.Level == 1 && step.BusinessType == EBusinessType.Department).OrderByDescending(step => step.CreationTime)
                 .FirstAsync(HttpContext.RequestAborted);
             if (nextStep is null)
                 continue;

+ 2 - 1
src/Hotline.Api/Controllers/WorkflowController.cs

@@ -354,10 +354,11 @@ public class WorkflowController : BaseController
     /// 退回(返回前一节点)
     /// </summary>
     [HttpPost("previous")]
+    [Obsolete("即将弃用")]
     [LogFilterAlpha("审核退回")]
     public async Task Previous([FromBody] PreviousWorkflowDto dto)
     {
-        await _workflowApplication.PreviousAsync(dto, cancellationToken: HttpContext.RequestAborted);
+        await _workflowDomainService.PreviousAsync(dto, cancellationToken: HttpContext.RequestAborted);
     }
 
     /// <summary>

+ 9 - 9
src/Hotline.Application/FlowEngine/IWorkflowApplication.cs

@@ -43,15 +43,15 @@ namespace Hotline.Application.FlowEngine
         ///// </summary>
         //Task<Workflow> NextAsync(NextWorkflowDto dto, DateTime? expiredTime = null, CancellationToken cancellationToken = default);
 
-        /// <summary>
-        /// 退回(返回前一节点)
-        /// </summary>
-        Task<(Workflow workflow, WorkflowStep currentStep, StepDefine prevDefine,
-                WorkflowStep prevStep, WorkflowStep newStep, EFlowDirection flowDirection)>
-            PreviousAsync(PreviousWorkflowDto dto, 
-                EHandleMode handleMode = EHandleMode.Previous,
-                Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? newStepConfig = null,
-                CancellationToken cancellationToken = default);
+        ///// <summary>
+        ///// 退回(返回前一节点)
+        ///// </summary>
+        //Task<(Workflow workflow, WorkflowStep currentStep, StepDefine prevDefine,
+        //        WorkflowStep prevStep, WorkflowStep newStep, EFlowDirection flowDirection)>
+        //    PreviousAsync(PreviousWorkflowDto dto, 
+        //        EHandleMode handleMode = EHandleMode.Previous,
+        //        Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? newStepConfig = null,
+        //        CancellationToken cancellationToken = default);
 
         /// <summary>
         /// 工单退回(返回前一节点)

+ 20 - 19
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -344,26 +344,27 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     //    return workflow;
     //}
 
-    /// <summary>
-    /// 退回(返回前一节点)
-    /// </summary>
-    public async Task<(Workflow workflow, WorkflowStep currentStep, StepDefine prevDefine,
-            WorkflowStep prevStep, WorkflowStep newStep, EFlowDirection flowDirection)>
-        PreviousAsync(PreviousWorkflowDto dto,
-            EHandleMode handleMode = EHandleMode.Previous,
-            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? newStepConfig = null,
-            CancellationToken cancellationToken = default)
-    {
-        var workflow = await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withDefine: true, withSteps: true,
-            withTraces: true, withCountersigns: true, cancellationToken: cancellationToken);
 
-        return await _workflowDomainService.PreviousAsync(workflow, dto, new OperatorInfo(
-            _sessionContext.RequiredUserId, _sessionContext.UserName,
-            _sessionContext.RequiredOrgId, _sessionContext.OrgName,
-            _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
-            _sessionContext.OrgIsCenter, _sessionContext.Roles,
-            _sessionContext.OrgLevel), handleMode, newStepConfig, cancellationToken);
-    }
+    ///// <summary>
+    ///// 退回(返回前一节点)
+    ///// </summary>
+    //public async Task<(Workflow workflow, WorkflowStep currentStep, StepDefine prevDefine,
+    //        WorkflowStep prevStep, WorkflowStep newStep, EFlowDirection flowDirection)>
+    //    PreviousAsync(PreviousWorkflowDto dto,
+    //        EHandleMode handleMode = EHandleMode.Previous,
+    //        Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? newStepConfig = null,
+    //        CancellationToken cancellationToken = default)
+    //{
+    //    var workflow = await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withDefine: true, withSteps: true,
+    //        withTraces: true, withCountersigns: true, cancellationToken: cancellationToken);
+
+    //    return await _workflowDomainService.PreviousAsync(workflow, dto, new OperatorInfo(
+    //        _sessionContext.RequiredUserId, _sessionContext.UserName,
+    //        _sessionContext.RequiredOrgId, _sessionContext.OrgName,
+    //        _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
+    //        _sessionContext.OrgIsCenter, _sessionContext.Roles,
+    //        _sessionContext.OrgLevel), handleMode, newStepConfig, cancellationToken);
+    //}
 
     /// <summary>
     /// 工单退回(返回前一节点)

+ 1 - 1
src/Hotline.Application/Subscribers/DatasharingSubscriber.cs

@@ -527,7 +527,7 @@ namespace Hotline.Application.Subscribers
                 PreviousWorkflowDto previous = new PreviousWorkflowDto();
                 previous.Opinion = dto.ProvinceScreenResult.AuditOpinion;
                 previous.WorkflowId = orderScreen.WorkflowId;
-                await _workflowApplication.PreviousAsync(previous, cancellationToken: cancellationToken);
+                await _workflowDomainService.PreviousAsync(previous, cancellationToken: cancellationToken);
             }
 
             if (int.Parse(dto.ProvinceScreenResult.AuditResult) > 0)

+ 2 - 2
src/Hotline.Share/Dtos/FlowEngine/Workflow/PreviousWorkflowDto.cs

@@ -15,8 +15,8 @@ public class PreviousWorkflowDto : EndWorkflowIdDto
     /// <summary>
     /// 指定办理对象
     /// </summary>
-    public FlowStepHandler? Handler { get; set; }
-    // public StepAssignInfo? Handler { get; set; }
+    //public FlowStepHandler? Handler { get; set; }
+    public StepAssignInfo? Handler { get; set; }
 
     // /// <summary>
     // /// 逆向流程,节点指派方式

+ 10 - 0
src/Hotline/FlowEngine/Workflows/IWorkflowDomainService.cs

@@ -99,6 +99,16 @@ namespace Hotline.FlowEngine.Workflows
                 Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? newStepConfig = null,
                 CancellationToken cancellationToken = default);
 
+        /// <summary>
+        /// 退回
+        /// </summary>
+        Task<(Workflow workflow, WorkflowStep currentStep, StepDefine prevDefine,
+                WorkflowStep prevStep, WorkflowStep newStep, EFlowDirection flowDirection)>
+            PreviousAsync(PreviousWorkflowDto dto,
+                EHandleMode handleMode = EHandleMode.Previous,
+                Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? newStepConfig = null,
+                CancellationToken cancellationToken = default);
+
         /// <summary>
         /// 撤回(返回到之前任意节点)
         /// </summary>

+ 30 - 11
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -903,6 +903,7 @@ namespace Hotline.FlowEngine.Workflows
 
         /// <summary>
         /// 退回(new)
+        /// workflow, currentStep, prevStepDefine, prevStep, newPrevStep
         /// </summary>
         public async Task<(Workflow workflow, WorkflowStep currentStep, StepDefine prevDefine,
                 WorkflowStep prevStep, WorkflowStep newStep, EFlowDirection flowDirection)>
@@ -990,17 +991,14 @@ namespace Hotline.FlowEngine.Workflows
             var newPrevStep = DuplicateStep(workflow, prevStepDefine, prevStep, EWorkflowTraceType.Previous, dto.ExpiredTime);
             newPrevStep.Assign(prevStep, EFlowAssignType.User);
 
-			//甄别退回到最开始节点到部门 todo 重构放在调用处判断  
-			if (workflow.FlowType == EFlowType.Review && workflow.ModuleCode == WorkflowModuleConsts.OrderScreen)
-			{
-				newPrevStep.FlowAssignType = newPrevStep.StepType == EStepType.Start ? EFlowAssignType.Org : prevStep.FlowAssignType;
-			}
-			//退给派单组节点,需按照平均分配原则派给一个派单员 禅道299 TODO
-			if (dto.Handler != null) //todo 改为按策略判断
-            {
-                var handle = dto.Handler;
-                newPrevStep.Assign(handle.UserId, handle.Username, handle.OrgId, handle.OrgName, handle.RoleId, handle.RoleName);
-            }
+			////甄别退回到最开始节点到部门 todo 重构放在调用处判断  
+			//if (workflow.FlowType == EFlowType.Review && workflow.ModuleCode == WorkflowModuleConsts.OrderScreen)
+			//{
+			//	newPrevStep.FlowAssignType = newPrevStep.StepType == EStepType.Start ? EFlowAssignType.Org : prevStep.FlowAssignType;
+			//}
+
+			if (dto.Handler != null)
+                newPrevStep.Assign(dto.Handler);
 
             //await Task.Run(() => newStepConfig?.Invoke(workflow, currentStep, prevStepDefine, prevStep, newPrevStep), cancellationToken);
             newStepConfig?.Invoke(workflow, currentStep, prevStepDefine, prevStep, newPrevStep);
@@ -1050,6 +1048,27 @@ namespace Hotline.FlowEngine.Workflows
             return (workflow, currentStep, prevStepDefine, prevStep, newPrevStep, flowDirection);
         }
 
+        /// <summary>
+        /// 退回
+        /// </summary>
+        public async Task<(Workflow workflow, WorkflowStep currentStep, StepDefine prevDefine, 
+                WorkflowStep prevStep, WorkflowStep newStep, EFlowDirection flowDirection)> 
+            PreviousAsync(PreviousWorkflowDto dto, 
+                EHandleMode handleMode = EHandleMode.Previous, 
+                Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? newStepConfig = null,
+            CancellationToken cancellationToken = default)
+        {
+            var workflow = await GetWorkflowAsync(dto.WorkflowId, withDefine: true, withSteps: true,
+                withTraces: true, withCountersigns: true, cancellationToken: cancellationToken);
+
+            return await PreviousAsync(workflow, dto, new OperatorInfo(
+                _sessionContext.RequiredUserId, _sessionContext.UserName,
+                _sessionContext.RequiredOrgId, _sessionContext.OrgName,
+                _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
+                _sessionContext.OrgIsCenter, _sessionContext.Roles,
+                _sessionContext.OrgLevel), handleMode, newStepConfig, cancellationToken);
+        }
+
         private async Task UpdateTracesStateAsync(List<WorkflowTrace> traces, EWorkflowTraceState traceState,
             CancellationToken cancellationToken)
         {