Yue 3 жил өмнө
parent
commit
ed13101c90

+ 9 - 2
SourceCode/Zero/VberYue.Zero/AppService/Workflows/WorkflowAppServiceBase.cs

@@ -1,10 +1,14 @@
-using Abp.Application.Services.Dto;
+using System.Dynamic;
+
+using Abp.Application.Services.Dto;
 using Abp.Domain.Repositories;
 using Abp.Json;
 
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.EntityFrameworkCore;
 
+using Newtonsoft.Json;
+
 using VberZero.AppService.Base;
 using VberZero.AppService.Base.Dto;
 using VberZero.AppService.Workflows.Dto;
@@ -213,7 +217,10 @@ public class WorkflowAppServiceBase : VzCrudAppServiceBase<WorkflowDefinitionInf
     /// <returns></returns>
     public async Task StartAsync(StartWorkflowInput input)
     {
-        await _workflowManager.StartWorkflow(input.Id, input.Version, input.Inputs);
+        string id = DateTime.Now.ToString("yyyyMMddHHmmssffff");
+        dynamic data = new ExpandoObject();
+        data.WorkflowId = id;
+        await _workflowManager.StartWorkflow(input.Id, input.Version, input.Inputs, JsonConvert.SerializeObject(data));
     }
 
     /// <summary>

+ 27 - 0
SourceCode/Zero/VberYue.Zero/Workflows/VbWorkflowPersistenceProvider.cs

@@ -3,8 +3,13 @@ using Abp.Domain.Repositories;
 using Abp.Domain.Uow;
 using Abp.Linq;
 
+using Newtonsoft.Json;
+
+using System.Dynamic;
+
 using VberZero.Authorization;
 using VberZero.Session;
+using VberZero.Tools.StringModel;
 using VberZero.Workflow;
 using VberZero.Workflow.DesignInfo;
 using VberZero.Workflow.Persistence;
@@ -25,6 +30,14 @@ public class VbWorkflowPersistenceProvider : VberPersistenceProvider
     public override async Task<string> CreateNewWorkflow(WorkflowInstance workflow, CancellationToken cancellationToken = new())
     {
         var entity = GenerateWorkflow(workflow);
+        if (workflow.Reference.NotEmpty())
+        {
+            var customId = GetWorkflowIdFromReference(workflow.Reference);
+            if (customId.NotEmpty())
+            {
+                entity.Id = customId;
+            }
+        }
         if (AbpSession.UserId.HasValue)
         {
             var name = AbpSession.GetClaimValue(VzClaimTypes.RealName);
@@ -34,4 +47,18 @@ public class VbWorkflowPersistenceProvider : VberPersistenceProvider
         await CurrentUnitOfWork.SaveChangesAsync();
         return workflow.Id;
     }
+
+    protected virtual string GetWorkflowIdFromReference(string reference)
+    {
+        try
+        {
+            dynamic dyObj = JsonConvert.DeserializeObject<ExpandoObject>(reference);
+            return dyObj.WorkflowId.ToString();
+        }
+        catch (Exception e)
+        {
+            Console.WriteLine(e);
+            return null;
+        }
+    }
 }

+ 1 - 1
SourceCode/Zero/Workflow/VberYue.Workflow/IVberWorkflowManager.cs

@@ -27,6 +27,6 @@ namespace VberZero.Workflow
 
         Task DeleteAsync(string id);
 
-        Task StartWorkflow(string id, int version, Dictionary<string, object> inputs);
+        Task<string> StartWorkflow(string id, int version, Dictionary<string, object> inputs, string reference = null);
     }
 }

+ 2 - 2
SourceCode/Zero/Workflow/VberYue.Workflow/VberWorkflowManager.cs

@@ -168,13 +168,13 @@ public class VberWorkflowManager : DomainService, IVberWorkflowManager, ITransie
     /// 启动工作流
     /// </summary>
     /// <returns></returns>
-    public virtual async Task StartWorkflow(string id, int version, Dictionary<string, object> inputs)
+    public virtual async Task<string> StartWorkflow(string id, int version, Dictionary<string, object> inputs, string reference = null)
     {
         if (!_registry.IsRegistered(id, version))
         {
             throw new UserFriendlyException("工作流未定义!");
         }
-        await _workflowHost.StartWorkflow(id, version, inputs);
+        return await _workflowHost.StartWorkflow(id, version, inputs, reference);
     }
 
     /// <summary>