diff --git a/aspnet-core/LINGYUN.MicroService.Workflow.sln b/aspnet-core/LINGYUN.MicroService.Workflow.sln index 3035cd55e..e8ff83fd7 100644 --- a/aspnet-core/LINGYUN.MicroService.Workflow.sln +++ b/aspnet-core/LINGYUN.MicroService.Workflow.sln @@ -73,6 +73,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IM", "modules\common\LINGYUN.Abp.IM\LINGYUN.Abp.IM.csproj", "{8BE6BA3E-048E-4FC7-81DD-7FCD29AE2126}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Elsa.Activities.Emailing", "modules\elsa\LINGYUN.Abp.Elsa.Activities.Emailing\LINGYUN.Abp.Elsa.Activities.Emailing.csproj", "{9E213E6F-77CB-4068-93EB-465C47FDA8FA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Elsa.Activities", "modules\elsa\LINGYUN.Abp.Elsa.Activities\LINGYUN.Abp.Elsa.Activities.csproj", "{EEE9DF30-1901-4070-8E03-A8D8A0E10E34}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -187,6 +191,14 @@ Global {8BE6BA3E-048E-4FC7-81DD-7FCD29AE2126}.Debug|Any CPU.Build.0 = Debug|Any CPU {8BE6BA3E-048E-4FC7-81DD-7FCD29AE2126}.Release|Any CPU.ActiveCfg = Release|Any CPU {8BE6BA3E-048E-4FC7-81DD-7FCD29AE2126}.Release|Any CPU.Build.0 = Release|Any CPU + {9E213E6F-77CB-4068-93EB-465C47FDA8FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9E213E6F-77CB-4068-93EB-465C47FDA8FA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9E213E6F-77CB-4068-93EB-465C47FDA8FA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9E213E6F-77CB-4068-93EB-465C47FDA8FA}.Release|Any CPU.Build.0 = Release|Any CPU + {EEE9DF30-1901-4070-8E03-A8D8A0E10E34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EEE9DF30-1901-4070-8E03-A8D8A0E10E34}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EEE9DF30-1901-4070-8E03-A8D8A0E10E34}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EEE9DF30-1901-4070-8E03-A8D8A0E10E34}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -222,6 +234,8 @@ Global {18A20311-84D8-49C4-B7BA-1187FF25E9BC} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} {2C3FABD7-808B-47B5-A194-849A1738E9A2} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} {8BE6BA3E-048E-4FC7-81DD-7FCD29AE2126} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} + {9E213E6F-77CB-4068-93EB-465C47FDA8FA} = {F1CCBEC7-ACAB-4DC5-909E-D8CC2E1B7EEC} + {EEE9DF30-1901-4070-8E03-A8D8A0E10E34} = {F1CCBEC7-ACAB-4DC5-909E-D8CC2E1B7EEC} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {6BB7A5DE-DA12-44DC-BC9B-0F6CA524346F} diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities.Emailing/FodyWeavers.xml b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities.Emailing/FodyWeavers.xml new file mode 100644 index 000000000..c485a4548 --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities.Emailing/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities.Emailing/FodyWeavers.xsd b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities.Emailing/FodyWeavers.xsd new file mode 100644 index 000000000..11da52550 --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities.Emailing/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities.Emailing/LINGYUN.Abp.Elsa.Activities.Emailing.csproj b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities.Emailing/LINGYUN.Abp.Elsa.Activities.Emailing.csproj new file mode 100644 index 000000000..917fb0f23 --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities.Emailing/LINGYUN.Abp.Elsa.Activities.Emailing.csproj @@ -0,0 +1,20 @@ + + + + + + + netstandard2.1 + + enable + + + + + + + + + + + diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities.Emailing/LINGYUN/Abp/Elsa/Activities/Emailing/AbpElsaActivitiesEmailingModule.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities.Emailing/LINGYUN/Abp/Elsa/Activities/Emailing/AbpElsaActivitiesEmailingModule.cs new file mode 100644 index 000000000..e9d04d1d5 --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities.Emailing/LINGYUN/Abp/Elsa/Activities/Emailing/AbpElsaActivitiesEmailingModule.cs @@ -0,0 +1,11 @@ +using Volo.Abp.Modularity; +using Volo.Abp.Emailing; + +namespace LINGYUN.Abp.Elsa.Activities.Emailing; + +[DependsOn( + typeof(AbpElsaModule), + typeof(AbpEmailingModule))] +public class AbpElsaActivitiesEmailingModule : AbpModule +{ +} diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities.Emailing/LINGYUN/Abp/Elsa/Activities/Emailing/Activities/SendEmailing.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities.Emailing/LINGYUN/Abp/Elsa/Activities/Emailing/Activities/SendEmailing.cs new file mode 100644 index 000000000..376326e6b --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities.Emailing/LINGYUN/Abp/Elsa/Activities/Emailing/Activities/SendEmailing.cs @@ -0,0 +1,81 @@ +using Elsa; +using Elsa.ActivityResults; +using Elsa.Attributes; +using Elsa.Design; +using Elsa.Expressions; +using Elsa.Providers.WorkflowStorage; +using Elsa.Services; +using Elsa.Services.Models; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Emailing; +using Volo.Abp.TextTemplating; + +namespace LINGYUN.Abp.Elsa.Activities.Emailing; + +/// +/// 发送邮件 +/// +/// +/// 与elsa基础SendEmail命名冲突,故改名 +/// 此活动使用abp框架内置邮件发送接口 +/// +[Action( + Category = "Emailing", + Description = "Send an email message.", + Outcomes = new[] { OutcomeNames.Done })] +public class SendEmailing : Activity +{ + private readonly IEmailSender _emailSender; + private readonly ITemplateRenderer _templateRenderer; + + public SendEmailing( + IEmailSender emailSender, + ITemplateRenderer templateRenderer) + { + _emailSender = emailSender; + _templateRenderer = templateRenderer; + } + + [ActivityInput(Hint = "The recipients email addresses.", UIHint = ActivityInputUIHints.MultiText, DefaultSyntax = SyntaxNames.Json, SupportedSyntaxes = new[] { SyntaxNames.Json, SyntaxNames.JavaScript })] + public ICollection To { get; set; } = new List(); + + [ActivityInput(Hint = "The subject of the email message.", SupportedSyntaxes = new[] { SyntaxNames.JavaScript, SyntaxNames.Liquid })] + public string? Subject { get; set; } + + [ActivityInput(Hint = "The body of the email message.", UIHint = ActivityInputUIHints.MultiLine, SupportedSyntaxes = new[] { SyntaxNames.JavaScript, SyntaxNames.Liquid })] + public string? Body { get; set; } + + [ActivityInput(Hint = "The body of the email message.", UIHint = ActivityInputUIHints.MultiLine, SupportedSyntaxes = new[] { SyntaxNames.JavaScript, SyntaxNames.Liquid })] + public string? Culture { get; set; } + + [ActivityInput(Hint = "The template name of render the email message.", UIHint = ActivityInputUIHints.MultiLine, SupportedSyntaxes = new[] { SyntaxNames.JavaScript, SyntaxNames.Liquid })] + public string? Template { get; set; } + + [ActivityInput( + Hint = "Model parameters used to format the contents of the template.", + UIHint = ActivityInputUIHints.MultiLine, + SupportedSyntaxes = new[] { SyntaxNames.JavaScript, SyntaxNames.Liquid }, + DefaultWorkflowStorageProvider = TransientWorkflowStorageProvider.ProviderName + )] + public object? Model { get; set; } + + protected async override ValueTask OnExecuteAsync(ActivityExecutionContext context) + { + var to = To.JoinAsString(";"); + var content = Body; + + if (!Template.IsNullOrWhiteSpace()) + { + content = await _templateRenderer.RenderAsync( + Template, + Model, + Culture); + } + + await _emailSender.SendAsync(to, Subject, content); + + return Done(); + } +} diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities.Emailing/LINGYUN/Abp/Elsa/Activities/Emailing/Startup.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities.Emailing/LINGYUN/Abp/Elsa/Activities/Emailing/Startup.cs new file mode 100644 index 000000000..7c8c1de85 --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities.Emailing/LINGYUN/Abp/Elsa/Activities/Emailing/Startup.cs @@ -0,0 +1,16 @@ +using Elsa.Attributes; +using Elsa.Options; +using Elsa.Services.Startup; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace LINGYUN.Abp.Elsa.Activities.Emailing; + +[Feature("Emailing")] +public class Startup : StartupBase +{ + public override void ConfigureElsa(ElsaOptionsBuilder elsa, IConfiguration configuration) + { + elsa.AddEmailingActivities(); + } +} diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities.Emailing/Microsoft/Extensions/DependencyInjection/EmailingServiceCollectionExtensions.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities.Emailing/Microsoft/Extensions/DependencyInjection/EmailingServiceCollectionExtensions.cs new file mode 100644 index 000000000..7e5d812dc --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities.Emailing/Microsoft/Extensions/DependencyInjection/EmailingServiceCollectionExtensions.cs @@ -0,0 +1,15 @@ +using Elsa.Options; +using LINGYUN.Abp.Elsa.Activities.Emailing; + +namespace Microsoft.Extensions.DependencyInjection; + +public static class EmailingServiceCollectionExtensions +{ + public static ElsaOptionsBuilder AddEmailingActivities(this ElsaOptionsBuilder options) + { + options + .AddActivity(); + + return options; + } +} diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities/FodyWeavers.xml b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities/FodyWeavers.xml new file mode 100644 index 000000000..c485a4548 --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities/FodyWeavers.xsd b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities/FodyWeavers.xsd new file mode 100644 index 000000000..11da52550 --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities/LINGYUN.Abp.Elsa.Activities.csproj b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities/LINGYUN.Abp.Elsa.Activities.csproj new file mode 100644 index 000000000..73b071bda --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities/LINGYUN.Abp.Elsa.Activities.csproj @@ -0,0 +1,25 @@ + + + + + + + netstandard2.1 + + Enable + + + + + + + + + + + + + + + + diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities/LINGYUN/Abp/Elsa/Activities/AbpElsaActivitiesModule.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities/LINGYUN/Abp/Elsa/Activities/AbpElsaActivitiesModule.cs new file mode 100644 index 000000000..470c82f5d --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.Activities/LINGYUN/Abp/Elsa/Activities/AbpElsaActivitiesModule.cs @@ -0,0 +1,40 @@ +using Elsa; +using Elsa.Options; +using LINGYUN.Abp.Elsa.Activities.BlobStoring; +using LINGYUN.Abp.Elsa.Activities.Emailing; +using LINGYUN.Abp.Elsa.Activities.IM; +using LINGYUN.Abp.Elsa.Activities.Notifications; +using LINGYUN.Abp.Elsa.Activities.Sms; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Modularity; + +namespace LINGYUN.Abp.Elsa.Activities; + +[DependsOn( + typeof(AbpElsaModule), + typeof(AbpElsaActivitiesBlobStoringModule), + typeof(AbpElsaActivitiesEmailingModule), + typeof(AbpElsaActivitiesIMModule), + typeof(AbpElsaActivitiesNotificationsModule), + typeof(AbpElsaActivitiesSmsModule))] +public class AbpElsaActivitiesModule : AbpModule +{ + public override void PreConfigureServices(ServiceConfigurationContext context) + { + var configuration = context.Services.GetConfiguration(); + var elsaSection = configuration.GetSection("Elsa"); + var startups = new[] + { + typeof(Emailing.Startup), + typeof(BlobStoring.Startup), + typeof(Notifications.Startup), + typeof(Sms.Startup), + typeof(IM.Startup), + }; + + PreConfigure(elsa => + { + elsa.AddFeatures(startups, configuration); + }); + } +} diff --git a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/LY.MicroService.WorkflowManagement.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/LY.MicroService.WorkflowManagement.HttpApi.Host.csproj index b0208c7f0..e1eca37e6 100644 --- a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/LY.MicroService.WorkflowManagement.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/LY.MicroService.WorkflowManagement.HttpApi.Host.csproj @@ -46,10 +46,7 @@ - - - - + diff --git a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.Configure.cs b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.Configure.cs index d836d3fe4..858243af4 100644 --- a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.Configure.cs +++ b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.Configure.cs @@ -73,10 +73,6 @@ public partial class WorkflowManagementHttpApiHostModule typeof(Elsa.Activities.Webhooks.Startup), typeof(Elsa.Webhooks.Persistence.EntityFramework.MySql.Startup), typeof(Elsa.WorkflowSettings.Persistence.EntityFramework.MySql.Startup), - typeof(LINGYUN.Abp.Elsa.Activities.BlobStoring.Startup), - typeof(LINGYUN.Abp.Elsa.Activities.Notifications.Startup), - typeof(LINGYUN.Abp.Elsa.Activities.Sms.Startup), - typeof(LINGYUN.Abp.Elsa.Activities.IM.Startup), }; PreConfigure(elsa => diff --git a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.cs index 9c03f3791..1e3d59b19 100644 --- a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.cs @@ -1,14 +1,16 @@ -using LINGYUN.Abp.AspNetCore.Mvc.Localization; +using Elsa; +using LINGYUN.Abp.AspNetCore.Mvc.Localization; using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.BlobStoring.OssManagement; using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.Elsa; +using LINGYUN.Abp.Elsa.Activities; using LINGYUN.Abp.ExceptionHandling.Emailing; using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore; using LINGYUN.Abp.Saas.EntityFrameworkCore; using LINGYUN.Abp.Serilog.Enrichers.Application; using LINGYUN.Abp.Serilog.Enrichers.UniqueId; -using LINGYUN.Abp.Elsa; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; @@ -27,8 +29,6 @@ using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.SettingManagement.EntityFrameworkCore; using Volo.Abp.Swashbuckle; -using LINGYUN.Abp.Elsa.Activities.BlobStoring; -using Elsa; namespace LY.MicroService.WorkflowManagement; @@ -40,7 +40,7 @@ namespace LY.MicroService.WorkflowManagement; typeof(AbpBlobStoringOssManagementModule), typeof(AbpElsaModule), typeof(AbpElsaServerModule), - typeof(AbpElsaActivitiesBlobStoringModule), + typeof(AbpElsaActivitiesModule), typeof(AbpEntityFrameworkCoreMySQLModule), typeof(AbpAspNetCoreAuthenticationJwtBearerModule), typeof(AbpEmailingExceptionHandlingModule), diff --git a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/appsettings.Development.json b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/appsettings.Development.json index 6b07c000b..f42c473b1 100644 --- a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/appsettings.Development.json +++ b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/appsettings.Development.json @@ -41,6 +41,7 @@ "Conductor": true, "Telnyx": true, "BlobStoring": true, + "Emailing": true, "Notification": true, "Sms": true, "IM": true,