Explorar el Código

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

Dun.Jason hace 1 año
padre
commit
c09186e01d

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

@@ -3734,15 +3734,16 @@ public class OrderController : BaseController
     /// <param name="id"></param>
     /// <returns></returns>
     [HttpGet("repeatable_event")]
-    public async Task<RepeatableEvent> CitizenEntity([FromQuery] RepeatableEventEntityDto dto)
+    public async Task<RepeatableEventDto> CitizenEntity([FromQuery] RepeatableEventEntityDto dto)
     {
-        return await _repeatableEventRepository.Queryable()
+        var repeatableEvent = await _repeatableEventRepository.Queryable()
             .Includes(x =>
                 x.Details.WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.Order.Title.Contains(dto.Keyword!))
                     .ToList())
             .Includes(x => x.Details, y => y.Order)
             .FirstAsync(x => x.Id == dto.Id);
-    }
+        return _mapper.Map<RepeatableEventDto>(repeatableEvent);
+	}
 
     #endregion
 

+ 6 - 5
src/Hotline/FlowEngine/Workflows/IWorkflowDomainService.cs

@@ -209,14 +209,15 @@ namespace Hotline.FlowEngine.Workflows
             Workflow workflow, string operaterId, string operaterOrgId);
 
         /// <summary>
-        /// 查询派单池中待办流程节点id
+        /// 查询派单池中流程节点id
         /// </summary>
-        Task<IReadOnlyList<string>> GetUnhandleStepIdsFromSendPoolAsync(string handlerId,
-            CancellationToken cancellationToken);
+        Task<IReadOnlyList<string>> GetUnhandleStepIdsFromSendPoolAsync(string sendPoolId, CancellationToken cancellationToken);
 
         /// <summary>
-        /// 批量改变办理对象
+        /// 批量改派工单至指定用户
         /// </summary>
-        Task ChangeHandlerRangeAsync(IReadOnlyList<(string userId, IReadOnlyList<string> stepIds)> handlers);
+        Task ChangeHandlerRangeAsync(string sendPoolId,
+            IReadOnlyList<(string userId, string username, IReadOnlyList<string> stepIds)> handlers,
+            CancellationToken cancellationToken);
     }
 }

+ 39 - 7
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -2,6 +2,7 @@
 using Hotline.FlowEngine.Definitions;
 using Hotline.FlowEngine.Notifications;
 using Hotline.FlowEngine.WorkflowModules;
+using Hotline.Orders;
 using Hotline.SeedData;
 using Hotline.Settings;
 using Hotline.Share.Dtos;
@@ -12,6 +13,7 @@ using Hotline.Users;
 using MapsterMapper;
 using MediatR;
 using Microsoft.Extensions.Logging;
+using SqlSugar;
 using XF.Domain.Authentications;
 using XF.Domain.Dependency;
 using XF.Domain.Entities;
@@ -614,6 +616,7 @@ namespace Hotline.FlowEngine.Workflows
             {
                 prevStep = workflow.Steps.FirstOrDefault(d => d.Id == currentStep.PrevStepId);
             }
+
             if (prevStep == null)
                 throw UserFriendlyException.SameMessage("未查询到前一节点");
 
@@ -629,19 +632,48 @@ namespace Hotline.FlowEngine.Workflows
         }
 
         /// <summary>
-        /// 查询派单池中待办流程节点id
+        /// 查询派单池中流程节点id
         /// </summary>
-        public Task<IReadOnlyList<string>> GetUnhandleStepIdsFromSendPoolAsync(string handlerId, CancellationToken cancellationToken)
+        public async Task<IReadOnlyList<string>> GetUnhandleStepIdsFromSendPoolAsync(string sendPoolId, CancellationToken cancellationToken)
         {
-            throw new NotImplementedException();
+            return await _workflowStepRepository.Queryable()
+                .Where(d => d.Handlers.Any(x => x.Key == sendPoolId))
+                .Select(d => d.Id)
+                .ToListAsync(cancellationToken);
         }
 
         /// <summary>
         /// 批量改变办理对象
         /// </summary>
-        public Task ChangeHandlerRangeAsync(IReadOnlyList<(string userId, IReadOnlyList<string> stepIds)> handlers)
+        public async Task ChangeHandlerRangeAsync(string sendPoolId,
+            IReadOnlyList<(string userId, string username, IReadOnlyList<string> stepIds)> handlers,
+            CancellationToken cancellationToken)
         {
-            throw new NotImplementedException();
+            var stepsIds = handlers.SelectMany(d => d.stepIds).ToList();
+            var steps = await _workflowStepRepository.Queryable()
+                .Includes(d => d.Workflow)
+                .Where(d => stepsIds.Contains(d.Id))
+                .ToListAsync(cancellationToken);
+            foreach (var handler in handlers)
+            {
+                var thisHandlers = new List<Kv> { new(handler.userId, handler.username) };
+                var thisSteps = steps.Where(d => handler.stepIds.Contains(d.Id)).ToList();
+                foreach (var thisStep in thisSteps)
+                {
+                    thisStep.Handlers = thisHandlers;
+                    // update workflow
+                    thisStep.Workflow.FlowedUserIds.Remove(sendPoolId);
+                    thisStep.Workflow.FlowedUserIds.Add(handler.userId);
+                    var handlerUser = thisStep.Workflow.HandlerUsers.FirstOrDefault(d => d.Key == sendPoolId);
+                    if (handlerUser == null) continue;
+                    handlerUser.Key = handler.userId;
+                    handlerUser.Value = handler.username;
+                }
+            }
+
+            await _workflowStepRepository.UpdateNav(steps)
+                .Include(d => d.Workflow)
+                .ExecuteCommandAsync();
         }
 
         /// <summary>
@@ -1057,8 +1089,8 @@ namespace Hotline.FlowEngine.Workflows
             var workflow = await GetWorkflowAsync(workflowId, cancellationToken: cancellationToken);
             return new Kv(workflow.ActualHandleOrgCode, workflow.ActualHandleOrgName);
         }
-        
-        
+
+
         /// <summary>
         /// 流程结束
         /// </summary>

+ 7 - 3
src/Hotline/FlowEngine/Workflows/WorkflowStep.cs

@@ -20,6 +20,7 @@ public class WorkflowStep : StepBasicEntity
     /// 前一级节点Id,会签汇总节点无此字段(因可能有多个上级来源)
     /// </summary>
     public string? PrevStepId { get; set; }
+
     public string? PrevStepCode { get; set; }
 
     /// <summary>
@@ -88,6 +89,9 @@ public class WorkflowStep : StepBasicEntity
 
     #endregion
 
+    [Navigate(NavigateType.ManyToOne, nameof(WorkflowId))]
+    public Workflow Workflow { get; set; }
+
     #region Method
 
     /// <summary>
@@ -267,7 +271,7 @@ public class WorkflowStep : StepBasicEntity
     t:检查是否到结束标识(检查当前办理节点的办理对象与结束标识(orglevel:int)是否一致)
       t:返回配置的下一节点(看作单次实例化,当前节点已办完)//definitionId,stepCodes,按配置走
       f:按配置的重复实例化策略结合当前操作人,生成如:{x:X级部门办理},{0:中心办理},最高级最多只能到中心,按动态策略走,动态策略枚举
-  是否处于会签中 
+  是否处于会签中
     t:按会签策略的下一级 + 上一级(isCSEnd会签汇总节点标记),并对上一级选项打上标记,如:{x:X级部门办理},{0:中心办理},按动态策略走,动态策略枚举
     f:按照definition(按配置走)
   返回当前节点的配置下一步
@@ -288,9 +292,9 @@ next: (nextStepCode/x, userId[]/orgId[],dto.other)
       t:检查是否到结束标识(参数orgId==mark?)
         t:(参数时stepcode)按配置创建
         f:(参数是x级部门)按动态实例化策略创建
-    是否处于会签中 
+    是否处于会签中
       t: 是否返回上一级汇总 (isCSEnd)
-        t:  1.update上一级的会签完成情况[] 
+        t:  1.update上一级的会签完成情况[]
             2.如果会签全完成,创建新的待办汇总节点(IsCountersignSummaryStep = true)?更新发起节点状态?thk
       f: 创建新的下一步节点
  */

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

@@ -54,6 +54,7 @@ namespace Hotline.Orders
         Task<string> AddOrderComplementAsync(AddOrderComplementDto dto, CancellationToken cancellationToken);
 
         #endregion
+        
         #region 平均派单
         /// <summary>
         /// 平均派单

+ 5 - 0
src/Hotline/Orders/OrderDefaults.cs

@@ -11,6 +11,11 @@ namespace Hotline.Orders
         internal class SourceChannel
         {
             public const string DianHua = "RGDH";
+
+            /// <summary>
+            /// 派单池id(用作派单池的用户id)
+            /// </summary>
+            public const string SendPoolId = "08dbd926-c5ba-4b3d-86bd-a67b7bfb6bc3";
         }
     }
 }