Browse Source

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

qinchaoyue 1 month ago
parent
commit
c4e6ac11cd

+ 8 - 3
src/Hotline.Api/Controllers/ArticleController.cs

@@ -424,8 +424,13 @@ namespace Hotline.Api.Controllers
                     await _circularRecordDomainService.RecordOrgHandle(new List<string> { _sessionContext.RequiredOrgId }, false, "", "", cancellationToken: HttpContext.RequestAborted);
                 }
             }
-
-            return _mapper.Map<CircularDto>(model);
+            var res = _mapper.Map<CircularDto>(model);
+			if (res.FileJson != null && res.FileJson.Any())
+			{
+				var ids = res.FileJson.Select(x => x.Id).ToList();
+				res.Files = await _fileRepository.GetFilesAsync(ids, HttpContext.RequestAborted);
+			}
+			return res;
         }
 
         /// <summary>
@@ -497,7 +502,7 @@ namespace Hotline.Api.Controllers
                 BulletinDto.Files = await _fileRepository.GetFilesAsync(ids, HttpContext.RequestAborted);
             }
 
-            return _mapper.Map<BulletinDto>(BulletinDto);
+            return BulletinDto;
         }
 
         /// <summary>

+ 90 - 31
src/Hotline.Api/Controllers/OrderController.cs

@@ -1,4 +1,5 @@
-using DotNetCore.CAP;
+using DocumentFormat.OpenXml.Spreadsheet;
+using DotNetCore.CAP;
 using FluentValidation;
 using Hotline.Api.Filter;
 using Hotline.Application.CallCenter;
@@ -70,6 +71,7 @@ using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.Extensions.Options;
 using MiniExcelLibs;
+using NPOI.SS.Formula.Functions;
 using SqlSugar;
 using System.Text;
 using System.Text.Json;
@@ -80,6 +82,7 @@ using XF.Domain.Exceptions;
 using XF.Domain.Repository;
 using XF.Utility.EnumExtensions;
 using OrderDto = Hotline.Share.Dtos.Order.OrderDto;
+using UserInfo = Hotline.Share.Dtos.FlowEngine.UserInfo;
 
 namespace Hotline.Api.Controllers;
 
@@ -1334,7 +1337,9 @@ public class OrderController : BaseController
             Histories = histories,
             IsCanUpdate = isCanUpdate
         };
-        if (_appOptions.Value.IsLuZhou && rsp.OrderVisitModel.Order.IsSecret)
+        if (_appOptions.Value.IsLuZhou 
+            && !_sessionContext.OrgIsCenter
+            && rsp.OrderVisitModel.Order.IsSecret)
         {
             rsp.OrderVisitModel.Order.FromPhone = "****";//rsp.OrderVisitModel.Order.FromPhone?.Replace(rsp.OrderVisitModel.Order.FromPhone.Substring(3, 4), "****");
             rsp.OrderVisitModel.Order.Contact = "****"; //rsp.OrderVisitModel.Order.Contact?.Replace(rsp.OrderVisitModel.Order.Contact.Substring(3, 4), "****");
@@ -2059,10 +2064,10 @@ public class OrderController : BaseController
             }
         }
 
-		if (_appOptions.Value.IsLuZhou && delaydto.DelayNum > order.TimeLimitCount) throw UserFriendlyException.SameMessage("申请天数需小于等于工单办理时限!");
+        if (_appOptions.Value.IsLuZhou && delaydto.DelayNum > order.TimeLimitCount) throw UserFriendlyException.SameMessage("申请天数需小于等于工单办理时限!");
 
-		//验证延期次数
-		var setting = _systemSettingCacheManager.GetSetting(SettingConstants.DelayNum);
+        //验证延期次数
+        var setting = _systemSettingCacheManager.GetSetting(SettingConstants.DelayNum);
         if (int.Parse(setting?.SettingValue[0]) != 0 && !_sessionContext.OrgIsCenter)
         {
             int count = await _orderDelayRepository.CountAsync(x =>
@@ -2555,7 +2560,8 @@ public class OrderController : BaseController
             .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
         var data = _mapper.Map<List<OrderVisitDetailDto>>(items);
         var isAdmin = _orderDomainService.IsCheckAdmin();
-        data.ForEach(d => d.IsShowOperate = dto.ScreenType == EOrderScreenType.Org && (isAdmin == true || (d.VisitOrgCode == _sessionContext.OrgId)));
+        data.ForEach(d => d.IsShowOperate = (dto.ScreenType == EOrderScreenType.Org && d.VisitOrgCode == _sessionContext.OrgId)
+        || isAdmin == true || (dto.ScreenType == EOrderScreenType.Seat));
         return new PagedDto<OrderVisitDetailDto>(total, data);
     }
 
@@ -2974,11 +2980,11 @@ public class OrderController : BaseController
         var screen = await _orderScreenRepository.GetAsync(id);
         var steps = await _workflowStepRepository.Queryable().Where(x => x.WorkflowId == screen.WorkflowId).ToListAsync();
         var allFiles = new List<FileDto>();
-        if (screen != null)
-        {
-            var ids = screen.FileJson.Select(x => x.Id).ToList();
-            allFiles = await _fileRepository.GetFilesAsync(ids, HttpContext.RequestAborted);
-        }
+        //if (screen != null)
+        //{
+        //    var ids = screen.FileJson.Select(x => x.Id).ToList();
+        //    allFiles = await _fileRepository.GetFilesAsync(ids, HttpContext.RequestAborted);
+        //}
         foreach (var step in steps)
         {
             if (step.FileJson != null && step.FileJson.Any())
@@ -6224,15 +6230,14 @@ public class OrderController : BaseController
             var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) = await _workflowDomainService.RecallAsync(recall,
                 dto.NextHandlers.FirstOrDefault(), EWorkflowTraceType.Recall,
                 order.ExpiredTime, order.Status >= EOrderStatus.Filed, EHandleMode.Recall,
-                async (workflow, currentStep, targetStepDefine, targetStep, targetStepNew) =>
+                (workflow, currentStep, targetStepDefine, targetStep, targetStepNew) =>
                 {
                     var basicWorkflowDto = _mapper.Map<BasicWorkflowDto>(dto);
                     var stepAssignInfo = _orderApplication.GetOrderRecallAssignInfoAsync(workflow, targetStepDefine, targetStep,
-                        basicWorkflowDto, HttpContext.RequestAborted).Result;
+                        basicWorkflowDto, HttpContext.RequestAborted).Result; //todo 优化异步
                     if (stepAssignInfo is null) return;
                     var validator = new StepAssignInfoValidator();
-                    await validator.ValidateAndThrowAsync(stepAssignInfo, HttpContext.RequestAborted);
-
+                    validator.ValidateAndThrow(stepAssignInfo);
                     targetStepNew.Assign(stepAssignInfo);
                 },
                 HttpContext.RequestAborted);
@@ -6401,7 +6406,7 @@ public class OrderController : BaseController
                 DateTime startTime = DateTime.Now;
                 DateTime beginTime = DateTime.Now;
 
-				if (order.CenterToOrgTime.HasValue && order.FileOrgIsCenter.HasValue &&  !order.FileOrgIsCenter.Value)
+                if (order.CenterToOrgTime.HasValue && order.FileOrgIsCenter.HasValue && !order.FileOrgIsCenter.Value)
                 {
                     startTime = order.CenterToOrgTime.Value;
                 }
@@ -6414,8 +6419,8 @@ public class OrderController : BaseController
                 {
                     startTime = order.ExpiredTime.Value;
                     beginTime = startTime;
-				}
-                
+                }
+
                 var expiredTime = await _expireTime.CalcEndTime(beginTime, startTime, order.AcceptTypeCode);
                 if (dto.TimeLimit.HasValue && dto.TimeLimit.Value > 0)
                 {
@@ -6451,26 +6456,26 @@ public class OrderController : BaseController
                 }
             }
 
-			// if (dto.BusinessType == EBusinessType.Send && recall.NextHandlers.Any())
-			// {
-			//     var flowStepHandler = recall.NextHandlers.FirstOrDefault();
-			//     await _orderRepository.Updateable().SetColumns(o => new Orders.Order()
-			//             { CenterToOrgHandlerId = flowStepHandler.UserId, CenterToOrgHandlerName = flowStepHandler.Username })
-			//         .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
-			// }
-			DateTime endTime = order.ExpiredTime!.Value;
-			var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) =
+            // if (dto.BusinessType == EBusinessType.Send && recall.NextHandlers.Any())
+            // {
+            //     var flowStepHandler = recall.NextHandlers.FirstOrDefault();
+            //     await _orderRepository.Updateable().SetColumns(o => new Orders.Order()
+            //             { CenterToOrgHandlerId = flowStepHandler.UserId, CenterToOrgHandlerName = flowStepHandler.Username })
+            //         .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+            // }
+            DateTime endTime = order.ExpiredTime!.Value;
+            var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) =
                 await _workflowDomainService.RecallAsync(
                     recall, recall.NextHandlers.FirstOrDefault(), EWorkflowTraceType.Redo,
                     endTime, order.Status >= EOrderStatus.Filed, EHandleMode.Redo,
-                    async (workflow, currentStep, targetStepDefine, targetStep, targetStepNew) =>
+                    (workflow, currentStep, targetStepDefine, targetStep, targetStepNew) =>
                     {
                         var stepAssignInfo = recall.NextHandlers.FirstOrDefault()
-                                             ?? await _orderApplication.GetOrderRecallAssignInfoAsync(workflow, targetStepDefine, targetStep,
-                                                 recall, HttpContext.RequestAborted);
+                                             ?? _orderApplication.GetOrderRecallAssignInfoAsync(workflow, targetStepDefine, targetStep,
+                                                 recall, HttpContext.RequestAborted).Result; //todo 优化异步
                         if (stepAssignInfo is null) return;
                         var validator = new StepAssignInfoValidator();
-                        await validator.ValidateAndThrowAsync(stepAssignInfo, HttpContext.RequestAborted);
+                        validator.ValidateAndThrow(stepAssignInfo);
                         targetStepNew.Assign(stepAssignInfo);
                     }, HttpContext.RequestAborted);
 
@@ -7188,6 +7193,60 @@ public class OrderController : BaseController
         }
     }
 
+	/// <summary>
+	/// 批量重提   根据传入的工单编号特提所有工单
+	/// </summary>
+	/// <returns></returns>
+	[HttpPost("order_batch_special")]
+    [AllowAnonymous]
+    public async Task BatchSpecial([FromBody] OrderBatchSpecialDto model)
+    {
+        var orders = await _orderRepository.Queryable(isAdmin: true)
+            .Includes(o => o.Workflow)
+            .Includes(o => o.OrderVisits)
+            .Where(o => (o.CounterSignType == null || o.CounterSignType == ECounterSignType.Department))
+            .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)
+                .FirstAsync(HttpContext.RequestAborted);
+            if (nextStep is null)
+                continue;
+            var dto = new OrderReTransactDto
+            {
+                AlterTime = true,
+                BusinessType = EBusinessType.Department,
+                FlowDirection = EFlowDirection.FiledToOrg,
+                HandlerType = EHandlerType.OrgLevel,
+                NextHandlers = new List<StepAssignInfo>
+                {
+                    new()
+                    {
+                        Key = nextStep.HandlerOrgId, Value = nextStep.HandlerOrgName,
+                        OrgId = nextStep.HandlerOrgId, OrgName = nextStep.HandlerOrgName,
+                        FlowAssignType = EFlowAssignType.Org
+                    }
+                },
+                NextStepCode = nextStep.Code,
+                NextStepName = nextStep.Name,
+                OrderId = order.Id,
+                Cause = "不满意二次办理",
+                Reason = "部门回访不满意  批量特提",
+                SpecialType = ESpecialType.SendBack,
+                StepType = EStepType.Normal,
+                TimeLimit = 5,
+                TimeLimitUnit = ETimeType.WorkDay,
+                WorkflowId = order.WorkflowId
+            };
+            await Add(dto);
+        }
+    }
+
     #endregion
 
     #region 市民信息

+ 24 - 1
src/Hotline.Application/Handlers/FlowEngine/WorkflowEndHandler.cs

@@ -19,6 +19,7 @@ using Hotline.Share.Dtos.FlowEngine.Workflow;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.TrCallCenter;
 using Hotline.Share.Enums.CallCenter;
+using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Order;
 using Hotline.Share.Tools;
 using Hotline.Snapshot.Notifications;
@@ -171,6 +172,26 @@ public class WorkflowEndHandler : INotificationHandler<EndWorkflowNotify>
                     order.FileOrgIsCenter = notification.Trace.HandlerOrgIsCenter;
                     order.FileOpinion = notification.Dto.Opinion;
 
+                    /*
+                     *需求:
+                     *1、判断工单属于哪种归档类型,需由谁归档来判断,热线中心归档的就叫中心归档件,部门归档就叫做部门归档件
+                       2、若工单发起过部门会签,最后由热线中心归档,应属于叫中心归档件和非会签件
+                       3、若工单发起过中心会签,最后由部门归档,应属于部门归档件和非会签件
+                     */
+                    if (_appOptions.Value.IsYiBin)
+                    {
+                        if (order.FileOrgIsCenter.Value)
+                        {
+                            if (order.CounterSignType is ECounterSignType.Department)
+                                order.CounterSignType = null;
+                        }
+                        else
+                        {
+                            if (order.CounterSignType is ECounterSignType.Center)
+                                order.CounterSignType = null;
+                        }
+                    }
+
                     //记录冗余归档数据
                     if (notification.Workflow.Steps.Any(x => x.BusinessType == Share.Enums.FlowEngine.EBusinessType.Send))
                     {
@@ -188,7 +209,9 @@ public class WorkflowEndHandler : INotificationHandler<EndWorkflowNotify>
                     //是否已解决
                     order.IsResolved = notification.Dto.External == null ? false : notification.Dto.External.IsResolved;
 
-                    await _orderRepository.UpdateAsync(order, cancellationToken);
+                    //await _orderRepository.UpdateAsync(order, cancellationToken);
+                    await _orderRepository.Updateable(order)
+                        .ExecuteCommandAsync(cancellationToken);
                     //var callRecord = await _trCallRecordRepository.GetAsync(p => p.CallAccept == order.CallId, cancellationToken); //由CallAccept改为OtherAccept
                     //var callRecord = await _trCallRecordRepository.GetAsync(p => p.OtherAccept == order.CallId, cancellationToken);
                     var orderFlowDto = new OrderFlowDto

+ 1 - 0
src/Hotline.Application/Orders/Handlers/OrderScreenHandler/OrderScreenNextWorkflowHandler.cs

@@ -82,6 +82,7 @@ public class OrderScreenNextWorkflowHandler : INotificationHandler<NextStepNotif
                                 {
                                     screenDto.Content = notification.Dto.Opinion;
 									screenDto.Files = new List<Share.Dtos.File.FileDto>();
+                                    screenDto.FileJson = screenDto.ProvinceFileJson;
 									if (screenDto.ProvinceFileJson.Any())
                                     {
                                         var fileIds = screenDto.ProvinceFileJson.Select(x => x.Id).ToList();

+ 15 - 12
src/Hotline.Application/Orders/OrderApplication.cs

@@ -64,6 +64,8 @@ using Hotline.Application.FlowEngine;
 using Hotline.Article;
 using Hotline.Share.Dtos.CallCenter;
 using DocumentFormat.OpenXml.Bibliography;
+using Hotline.Identity.Accounts;
+using Hotline.Identity.Roles;
 
 namespace Hotline.Application.Orders;
 
@@ -114,6 +116,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     private readonly IRepository<KnowledgeQuote> _knowledgeQuoteRepository;
     private readonly IRepository<OrderSpecial> _orderSpecialRepository;
     private readonly IRepository<User> _userRepository;
+    private readonly IRepository<Role> _roleRepository;
     private readonly IWorkflowApplication _workflowApplication;
     private readonly ICircularRecordDomainService _circularRecordDomainService;
     private readonly ISessionContextManager _sessionContextManager;
@@ -168,7 +171,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         ICircularRecordDomainService circularRecordDomainService,
         ISessionContextCreator sessionContextCreator,
         ISessionContextManager sessionContextManager,
-        IOrderVisitApplication orderVisitApplication
+        IOrderVisitApplication orderVisitApplication,
+        IRepository<Role> roleRepository
         )
     {
         _orderDomainService = orderDomainService;
@@ -219,7 +223,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         _circularRecordDomainService = circularRecordDomainService;
         _sessionContextManager = sessionContextManager;
         _orderVisitApplication = orderVisitApplication;
-    }
+        _roleRepository = roleRepository;
+	}
 
     /// <summary>
     /// 更新工单办理期满时间(延期调用,其他不调用)
@@ -4242,14 +4247,14 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             await _workflowDomainService.RecallAsync(
                 recall, recall.NextHandlers.FirstOrDefault(), EWorkflowTraceType.Recall,
                 order.ExpiredTime, order.Status >= EOrderStatus.Filed, EHandleMode.Recall,
-                async (workflow, currentStep, targetStepDefine, targetStep, targetStepNew) =>
+                (workflow, currentStep, targetStepDefine, targetStep, targetStepNew) =>
                 {
                     var stepAssignInfo = recall.NextHandlers.FirstOrDefault()
                                          ?? GetOrderRecallAssignInfoAsync(workflow, targetStepDefine, targetStep,
-                                             recall, cancellation).Result;
+                                             recall, cancellation).Result; //todo 优化异步
                     if (stepAssignInfo is null) return;
                     var validator = new StepAssignInfoValidator();
-                    await validator.ValidateAndThrowAsync(stepAssignInfo, cancellation);
+                    validator.ValidateAndThrow(stepAssignInfo);
                     targetStepNew.Assign(stepAssignInfo);
                 },
                 cancellation);
@@ -5328,13 +5333,12 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             (_, currentStep, _, prevStep, newStep, flowDirection) =
                 await _workflowApplication.PreviousAsync(sendBack.SendBackData,
                     userId, orgId, roles, handleMode,
-                    async (workflow1, currentStep1, prevStepDefine, prevStep1, newStep) =>
+                    (workflow1, currentStep1, prevStepDefine, prevStep1, newStep) =>
                     {
-                        var stepAssignInfo =
-                            GetOrderPreviousAssignInfoAsync(workflow1, prevStepDefine, prevStep1, cancellationToken).Result;
+                        var stepAssignInfo = GetOrderPreviousAssignInfoAsync(workflow1, prevStepDefine, prevStep1, cancellationToken).Result;//todo 优化异步
                         if (stepAssignInfo is null) return;
                         var validator = new StepAssignInfoValidator();
-                        await validator.ValidateAndThrowAsync(stepAssignInfo);
+                        validator.Validate(stepAssignInfo);
                         newStep.Assign(stepAssignInfo);
                     },
                     cancellationToken);
@@ -5390,9 +5394,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             }
             else if (newStep.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(newStep.RoleId))
             {
-
-                var users = await _userRepository.Queryable().Includes(x => x.Roles).Where(x => x.Roles.Where(x => x.Id == newStep.RoleId).Any()).ToListAsync();
-                foreach (var user in users)
+                var role = await _roleRepository.Queryable().Includes(x=> x.Accounts).FirstAsync(x => x.Name == newStep.RoleId, cancellationToken);
+                foreach (var user in role.Accounts)
                 {
                     await _circularRecordDomainService.OrderSendBackCircularMessage(user.Id, user.Name, order, cancellationToken);
                 }

+ 3 - 4
src/Hotline.Application/Orders/OrderSecondaryHandlingApplication.cs

@@ -236,15 +236,14 @@ namespace Hotline.Application.Orders
                 var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) = await _workflowDomainService.RecallAsync(recall,
                         recall.NextHandlers.FirstOrDefault(), EWorkflowTraceType.SecondHandle,
                         order.ExpiredTime, order.Status >= EOrderStatus.Filed, EHandleMode.SecondaryHandle,
-                        async (workflow, currentStep, targetStepDefine, targetStep, targetStepNew) =>
+                        (workflow, currentStep, targetStepDefine, targetStep, targetStepNew) =>
                         {
                             var basicWorkflowDto = _mapper.Map<BasicWorkflowDto>(dto);
                             var stepAssignInfo = _orderApplication.GetOrderRecallAssignInfoAsync(workflow, targetStepDefine, targetStep,
-                                basicWorkflowDto, cancellationToken).Result;
+                                basicWorkflowDto, cancellationToken).Result; //todo 优化异步
                             if (stepAssignInfo is null) return;
                             var validator = new StepAssignInfoValidator();
-                            await validator.ValidateAndThrowAsync(stepAssignInfo, cancellationToken);
-
+                            validator.ValidateAndThrow(stepAssignInfo);
                             targetStepNew.Assign(stepAssignInfo);
                         },
                         cancellationToken);

+ 6 - 0
src/Hotline.Share/Dtos/Order/OrderSpecialDto.cs

@@ -486,4 +486,10 @@ namespace Hotline.Share.Dtos.Order
 
 		public DateTime EndTime { get; set; }
 	}
+
+	public class OrderBatchSpecialDto
+	{
+		public List<string>  No { get; set; }
+
+	}
 }

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

@@ -981,12 +981,6 @@ namespace Hotline.FlowEngine.Workflows
             //        prevStep.BusinessType is EBusinessType.Send ? EFlowAssignType.User : EFlowAssignType.Org;
             //}
 
-            //甄别退回到最开始节点到部门 todo 重构放在调用处判断
-            if (workflow.FlowType == EFlowType.Review && workflow.ModuleCode == WorkflowModuleConsts.OrderScreen)
-            {
-                prevStep.FlowAssignType = prevStep.StepType == EStepType.Start ? EFlowAssignType.Org : prevStep.FlowAssignType;
-            }
-
             // dto.ReverseFlowStepAssignInfo ??= new ReverseFlowStepAssignInfo(EReverseFlowStepCreationPolicy.OriginStepUser);
             // //todo
             // var stepAssignInfo = GetStepAssignInfo(dto.ReverseFlowStepAssignInfo, prevStep, prevStepDefine);
@@ -995,8 +989,14 @@ namespace Hotline.FlowEngine.Workflows
             //复制上一个节点为待接办
             var newPrevStep = DuplicateStep(workflow, prevStepDefine, prevStep, EWorkflowTraceType.Previous, dto.ExpiredTime);
             newPrevStep.Assign(prevStep, EFlowAssignType.User);
-            //退给派单组节点,需按照平均分配原则派给一个派单员 禅道299 TODO
-            if (dto.Handler != null) //todo 改为按策略判断
+
+			//甄别退回到最开始节点到部门 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);
@@ -1728,7 +1728,8 @@ namespace Hotline.FlowEngine.Workflows
                 //     stepAssignInfo, traceType, expiredTime, stepConfig, cancellationToken);
 
                 targetStepNew = CreateStartStep(workflow, targetStepDefine, dto, assigner, stepAssignInfo, expiredTime);
-                await Task.Run(() => newStepConfig?.Invoke(workflow, currentStep, targetStepDefine, targetStep, targetStepNew), cancellationToken);
+                //await Task.Run(() => newStepConfig?.Invoke(workflow, currentStep, targetStepDefine, targetStep, targetStepNew), cancellationToken);
+                newStepConfig?.Invoke(workflow, currentStep, targetStepDefine, targetStep, targetStepNew);
                 await _workflowStepRepository.AddAsync(targetStepNew, cancellationToken);
                 workflow.Steps.Add(targetStepNew);
                 await CreateTraceAsync(workflow, targetStepNew, traceType, cancellationToken);
@@ -1742,7 +1743,8 @@ namespace Hotline.FlowEngine.Workflows
                 targetStepNew = CreateStep(workflow, targetStepDefine, targetPrevStep, stepAssignInfo, assigner,
                     dto.NextStepCode, null, EWorkflowStepStatus.WaitForAccept, ECountersignPosition.None, expiredTime,
                     dto.NextStepName, true, true, null, dto.BusinessType, dto.FlowDirection);
-                await Task.Run(() => newStepConfig?.Invoke(workflow, currentStep, targetStepDefine, targetStep, targetStepNew), cancellationToken);
+                //await Task.Run(() => newStepConfig?.Invoke(workflow, currentStep, targetStepDefine, targetStep, targetStepNew), cancellationToken);
+                newStepConfig?.Invoke(workflow, currentStep, targetStepDefine, targetStep, targetStepNew);
                 await _workflowStepRepository.AddAsync(targetStepNew, cancellationToken);
                 workflow.Steps.Add(targetStepNew);
                 await CreateTraceAsync(workflow, targetStepNew, traceType, cancellationToken);

+ 5 - 5
src/Hotline/Snapshot/ThirdAccount.cs

@@ -77,11 +77,11 @@ public class ThirdAccount : CreationSoftDeleteEntity
     [SugarColumn(ColumnDescription = "用户昵称")]
     public string? UserName { get; set; }
 
-    /// <summary>
-    /// 应用类型
-    /// </summary>
-    [SugarColumn(ColumnDescription = "应用类型", DefaultValue = "1")]
-    public EAppType AppType { get; set; }
+    ///// <summary>
+    ///// 应用类型
+    ///// </summary>
+    //[SugarColumn(ColumnDescription = "应用类型", DefaultValue = "1")]
+    //public EAppType AppType { get; set; }
 }
 
 public enum EAppType