xf 2 år sedan
förälder
incheckning
3d5bb347fc

+ 1 - 1
src/Hotline.Api/Controllers/OrderController.cs

@@ -195,7 +195,7 @@ public class OrderController : BaseController
         if (order.Status != EOrderStatus.Temporary || !string.IsNullOrEmpty(order.WorkflowId))
             throw UserFriendlyException.SameMessage("工单已发起流程");
 
-        var definition = await _definitionDomainService.GetLastVersionDefinitionByModuleCodeAsync(
+        var definition = await _definitionDomainService.GetLastEnableByModuleCodeAsync(
             WorkflowModuleConsts.OrderManage, HttpContext.RequestAborted);
         if (definition is null)
             throw UserFriendlyException.SameMessage("未配置流程模板");

+ 1 - 1
src/Hotline.Api/Controllers/PbxController.cs

@@ -251,7 +251,7 @@ namespace Hotline.Api.Controllers
             else
             {
                 var startWorkflowDto = _mapper.Map<StartWorkflowDto>(dto);
-                var definition = await _definitionDomainService.GetLastVersionDefinitionByModuleCodeAsync(
+                var definition = await _definitionDomainService.GetLastEnableByModuleCodeAsync(
                     WorkflowModuleConsts.TelRestApply, HttpContext.RequestAborted);
                 if (definition is null)
                     throw UserFriendlyException.SameMessage("未配置流程模板");

+ 3 - 3
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -58,8 +58,8 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
             throw new UserFriendlyException("非法参数");
 
         var definition = string.IsNullOrEmpty(dto.DefinitionCode)
-            ? await _definitionDomainService.GetLastVersionDefinitionByModuleCodeAsync(dto.DefinitionModuleCode, cancellationToken)
-            : await _definitionDomainService.GetLastVersionDefinitionAsync(dto.DefinitionCode, cancellationToken);
+            ? await _definitionDomainService.GetLastEnableByModuleCodeAsync(dto.DefinitionModuleCode, cancellationToken)
+            : await _definitionDomainService.GetLastEnableAsync(dto.DefinitionCode, cancellationToken);
         if (definition == null)
             throw new UserFriendlyException("无效模板名称");
         if (definition.Status != EDefinitionStatus.Enable)
@@ -107,7 +107,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     public async Task<IReadOnlyList<NextStepOptions>> GetStartOptionsAsync(string moduleCode, CancellationToken cancellationToken)
     {
         var definition =
-            await _definitionDomainService.GetLastVersionDefinitionByModuleCodeAsync(moduleCode, cancellationToken);
+            await _definitionDomainService.GetLastEnableByModuleCodeAsync(moduleCode, cancellationToken);
         if (definition == null)
             throw new UserFriendlyException($"无效模块编码, modeuleCode: {moduleCode}", "无效模块编码");
         var startStep = definition.Steps.FirstOrDefault(d => d.StepType == EStepType.Start);

+ 30 - 8
src/Hotline/FlowEngine/Definitions/DefinitionDomainService.cs

@@ -73,30 +73,52 @@ public class DefinitionDomainService : IDefinitionDomainService, IScopeDependenc
         await PublishAsync(id, cancellationToken);
     }
 
+    /// <summary>
+    /// 查询最大版本号(含启用、禁用)
+    /// </summary>
+    /// <param name="code"></param>
+    /// <param name="cancellationToken"></param>
+    /// <returns></returns>
     public async Task<int> GetLastVersionAsync(string code, CancellationToken cancellationToken)
     {
-        var definition = await GetLastVersionDefinitionAsync(code, cancellationToken);
-        return definition?.Version ?? 0;
+        return await _definitionRepository.Queryable()
+            .Where(d => d.Code == code)
+            .MaxAsync(d => d.Version);
+
+        //var definition = await GetLastVersionDefinitionAsync(code, enable, cancellationToken);
+        //return definition?.Version ?? 0;
     }
 
-    public async Task<Definition?> GetLastVersionDefinitionAsync(string code, CancellationToken cancellationToken)
+    /// <summary>
+    /// 查询已启用的最后版本
+    /// </summary>
+    /// <param name="moduleCode"></param>
+    /// <param name="cancellationToken"></param>
+    /// <returns></returns>
+    public async Task<Definition?> GetLastEnableByModuleCodeAsync(string moduleCode, CancellationToken cancellationToken)
     {
         return await _definitionRepository.Queryable()
-            .Where(d => d.Code == code)
+            .Where(d => d.ModuleCode == moduleCode && d.Status == EDefinitionStatus.Enable)
             .OrderByDescending(d => d.Version)
             .Take(1)
             .FirstAsync();
     }
 
-    public async Task<Definition?> GetLastVersionDefinitionByModuleCodeAsync(string moduleCode, CancellationToken cancellationToken)
+    /// <summary>
+    /// 查询已启用的最后版本
+    /// </summary>
+    /// <param name="code"></param>
+    /// <param name="cancellationToken"></param>
+    /// <returns></returns>
+    public async Task<Definition?> GetLastEnableAsync(string code, CancellationToken cancellationToken)
     {
         return await _definitionRepository.Queryable()
-            .Where(d => d.ModuleCode == moduleCode)
+            .Where(d => d.Code == code && d.Status == EDefinitionStatus.Enable)
             .OrderByDescending(d => d.Version)
             .Take(1)
             .FirstAsync();
     }
-
+    
     /// <summary>
     /// 未开启的流程,查找第2个节点的模板配置信息,用作开始流程的时候传参
     /// </summary>
@@ -105,7 +127,7 @@ public class DefinitionDomainService : IDefinitionDomainService, IScopeDependenc
     /// <returns></returns>
     public async Task<IReadOnlyList<StepDefine>> GetSecondStepsAsync(string definitionCode, CancellationToken cancellationToken)
     {
-        var definition = await GetLastVersionDefinitionAsync(definitionCode, cancellationToken);
+        var definition = await GetLastEnableAsync(definitionCode, cancellationToken);
         if (definition == null)
             throw new UserFriendlyException($"无效模板编码, code:{definitionCode}", "无效模板编码");
         return definition.FindSteps(definition.FindStartStep().NextSteps);

+ 22 - 2
src/Hotline/FlowEngine/Definitions/IDefinitionDomainService.cs

@@ -16,9 +16,29 @@ namespace Hotline.FlowEngine.Definitions
         /// </summary>
         Task PublishAsync(AddDefinitionDto dto, CancellationToken cancellationToken);
 
+        /// <summary>
+        /// 查询最大版本号(含启用、禁用)
+        /// </summary>
+        /// <param name="code"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
         Task<int> GetLastVersionAsync(string code, CancellationToken cancellationToken);
-        Task<Definition?> GetLastVersionDefinitionAsync(string code, CancellationToken cancellationToken);
-        Task<Definition?> GetLastVersionDefinitionByModuleCodeAsync(string moduleCode, CancellationToken cancellationToken);
+
+        /// <summary>
+        /// 查询已启用的最后版本
+        /// </summary>
+        /// <param name="code"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        Task<Definition?> GetLastEnableAsync(string code, CancellationToken cancellationToken);
+
+        /// <summary>
+        /// 查询已启用的最后版本
+        /// </summary>
+        /// <param name="moduleCode"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        Task<Definition?> GetLastEnableByModuleCodeAsync(string moduleCode, CancellationToken cancellationToken);
 
         /// <summary>
         /// 禁用指定业务模块下所有模板