From a138b2d1d1387dc59f3c7b95b08bc2f07ab2ca9a Mon Sep 17 00:00:00 2001 From: wxd <123@qq.com> Date: Wed, 25 Sep 2024 16:54:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=B1=E6=80=A5=E5=80=BC=E7=9F=AD=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CreateThirdPartySmsTaskInputDto.cs | 90 + .../Jobs/SmsSendJob.cs | 13 +- .../Jobs/SmsTaskJob.cs | 46 +- .../SmsTasks/SmsTaskAppService.cs | 63 + src/Shentun.Sms.DbMigrator/appsettings.json | 2 +- src/Shentun.Sms.Domain/SmsTasks/SmsTask.cs | 2 +- src/Shentun.Sms.Domain/SmsTypes/SmsType.cs | 6 + ...39_update_sms_type_template_id.Designer.cs | 2226 +++++++++++++++++ ...40924021839_update_sms_type_template_id.cs | 26 + .../Migrations/SmsDbContextModelSnapshot.cs | 5 + 10 files changed, 2451 insertions(+), 28 deletions(-) create mode 100644 src/Shentun.Sms.Application.Contracts/SmsTasks/CreateThirdPartySmsTaskInputDto.cs create mode 100644 src/Shentun.Sms.EntityFrameworkCore/Migrations/20240924021839_update_sms_type_template_id.Designer.cs create mode 100644 src/Shentun.Sms.EntityFrameworkCore/Migrations/20240924021839_update_sms_type_template_id.cs diff --git a/src/Shentun.Sms.Application.Contracts/SmsTasks/CreateThirdPartySmsTaskInputDto.cs b/src/Shentun.Sms.Application.Contracts/SmsTasks/CreateThirdPartySmsTaskInputDto.cs new file mode 100644 index 0000000..201f8da --- /dev/null +++ b/src/Shentun.Sms.Application.Contracts/SmsTasks/CreateThirdPartySmsTaskInputDto.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.Sms.SmsTasks +{ + public class CreateThirdPartySmsTaskInputDto + { + /// + /// 短信类别ID + /// + public Guid SmsTypeId { get; set; } + + /// + /// 人员ID + /// + public string PersonId { get; set; } + + /// + /// 姓名 + /// + public string PersonName { get; set; } + + /// + /// 手机号国家代码 + /// + public string CountryCode { get; set; } + + /// + /// 手机号 + /// + public string MobileTelephone { get; set; } + + /// + /// 短信内容 + /// + public string Content { get; set; } + + + /// + /// 应用ID + /// + public Guid SmsAppId { get; set; } + + + /// + /// 第三方系统唯一ID + /// + public string? ThirdId { get; set; } + + + + /// + /// 任务周期类别 + /// + public char TaskCycleType { get; set; } + + + /// + /// 任务表达式 + /// + public string? TaskCorn { get; set; } + + + /// + /// 停止执行时间 + /// + public string? StopTime { get; set; } + + + + /// + /// 发送者用户ID + /// + public string? SenderId { get; set; } + + /// + /// 发送者用户名 + /// + public string? SenderName { get; set; } + + /// + /// 计划发送时间集合 + /// + public List PlanSendTimes { get; set; } + + + + } +} diff --git a/src/Shentun.Sms.Application/Jobs/SmsSendJob.cs b/src/Shentun.Sms.Application/Jobs/SmsSendJob.cs index 2b50e2c..ac06606 100644 --- a/src/Shentun.Sms.Application/Jobs/SmsSendJob.cs +++ b/src/Shentun.Sms.Application/Jobs/SmsSendJob.cs @@ -14,6 +14,7 @@ using Microsoft.Extensions.Configuration; using Shentun.Sms.Service.Sms; using Volo.Abp.Caching; using Microsoft.Extensions.Logging; +using Shentun.Sms.SmsTypes; namespace Shentun.Sms.Jobs { @@ -31,6 +32,7 @@ namespace Shentun.Sms.Jobs private readonly SmsSendManager _smsSendManager; private readonly IConfiguration _configuration; private readonly SmsFactory _smsFactory; + private readonly IRepository _smsTypeRepository; private readonly ILogger _logger; public SmsSendJob( @@ -39,7 +41,8 @@ namespace Shentun.Sms.Jobs IConfiguration configuration, IRepository smsTaskRepository, ILogger logger, - SmsFactory smsFactory) + SmsFactory smsFactory, + IRepository smsTypeRepository) { _smsSendManager = smsSendManager; _smsSendRepository = smsSendRepository; @@ -47,6 +50,7 @@ namespace Shentun.Sms.Jobs _smsTaskRepository = smsTaskRepository; _logger = logger; _smsFactory = smsFactory; + _smsTypeRepository = smsTypeRepository; } public async Task DoWork() @@ -55,12 +59,15 @@ namespace Shentun.Sms.Jobs { var smsSendQuery = from a in await _smsSendRepository.GetQueryableAsync() join b in await _smsTaskRepository.GetQueryableAsync() on a.SmsTaskId equals b.Id + join smsType in await _smsTypeRepository.GetQueryableAsync() on b.SmsTypeId equals smsType.Id into smsTypeTemp + from smsTypeEmpty in smsTypeTemp.DefaultIfEmpty() where a.IsComplete == 'N' && a.IsActive == 'Y' && a.PlanSendTime < DateTime.Now select new { a, CountryCode = b.CountryCode, - Content = b.Content + Content = b.Content, + TemplateId = smsTypeEmpty == null ? "" : smsTypeEmpty.TemplateId }; @@ -70,7 +77,7 @@ namespace Shentun.Sms.Jobs { string CountryCode = item.CountryCode; string Content = item.Content; - _smsSendManager.SmsSendAsync(item.a, CountryCode, Content, ""); + _smsSendManager.SmsSendAsync(item.a, CountryCode, Content, item.TemplateId); smsSendUpdateList.Add(item.a); } diff --git a/src/Shentun.Sms.Application/Jobs/SmsTaskJob.cs b/src/Shentun.Sms.Application/Jobs/SmsTaskJob.cs index 76e2528..107d109 100644 --- a/src/Shentun.Sms.Application/Jobs/SmsTaskJob.cs +++ b/src/Shentun.Sms.Application/Jobs/SmsTaskJob.cs @@ -58,7 +58,7 @@ namespace Shentun.Sms.Jobs { try { - _logger.LogInformation("测试"); + //_logger.LogInformation("测试"); var smsTaskList = (from a in await _smsTaskRepository.GetQueryableAsync() join b in await _smsSendRepository.GetQueryableAsync() on a.Id equals b.SmsTaskId into bb from ab in bb.DefaultIfEmpty() @@ -144,31 +144,31 @@ namespace Shentun.Sms.Jobs var schedule = CronExpression.Parse(taskCorn, CronFormat.IncludeSeconds); var occurrences = schedule.GetOccurrences(DateTime.UtcNow, smsTask.StopTime.Value.ToUniversalTime()); //获取截止时间前所有的计划时间 - if (occurrences.Count() < 10) + //if (occurrences.Count() < 10) + //{ + foreach (var occurrence in occurrences) { - foreach (var occurrence in occurrences) + var smsSendEntity = new SmsSend { - var smsSendEntity = new SmsSend - { - Content = smsTask.Content, - IsActive = 'Y', - IsComplete = 'N', - SmsInterfaceId = SmsInterfaceId, - SmsTaskId = smsTask.Id, - MobileTelephone = smsTask.MobileTelephone, - PlanSendTime = occurrence - }; - - _smsSendManager.CreateAsync(smsSendEntity); - - smsSendList.Add(smsSendEntity); - - } - } - else - { - _logger.LogInformation($"------Id为【{smsTask.Id}】的SmsTask记录,Corn表达式记录超出10条,已跳过------当前时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}"); + Content = smsTask.Content, + IsActive = 'Y', + IsComplete = 'N', + SmsInterfaceId = SmsInterfaceId, + SmsTaskId = smsTask.Id, + MobileTelephone = smsTask.MobileTelephone, + PlanSendTime = occurrence + }; + + _smsSendManager.CreateAsync(smsSendEntity); + + smsSendList.Add(smsSendEntity); + } + //} + //else + //{ + // _logger.LogInformation($"------Id为【{smsTask.Id}】的SmsTask记录,Corn表达式记录超出10条,已跳过------当前时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}"); + //} } catch (Exception ex) { diff --git a/src/Shentun.Sms.Application/SmsTasks/SmsTaskAppService.cs b/src/Shentun.Sms.Application/SmsTasks/SmsTaskAppService.cs index e774d22..43cb71d 100644 --- a/src/Shentun.Sms.Application/SmsTasks/SmsTaskAppService.cs +++ b/src/Shentun.Sms.Application/SmsTasks/SmsTaskAppService.cs @@ -270,5 +270,68 @@ namespace Shentun.Sms.SmsTasks DataHelper.CheckEntityIsNull(input, "", "参数有误"); await _smsTaskManager.CheckIsDeleteAsync(input.Id); } + + /// + /// 创建第三方短信任务 危急值 非corn表达式形式 + /// + /// + [HttpPost] + public async Task CreateThirdPartySmsTaskAsync(CreateThirdPartySmsTaskInputDto input) + { + DataHelper.CheckEntityIsNull(input, "", "参数有误"); + + //创建时,默认启用,扫描生成短信发送记录后,禁用 + var smsTaskEntity = new SmsTask + { + Content = input.Content, + CountryCode = input.CountryCode, + IsActive = 'N', + MobileTelephone = input.MobileTelephone, + PersonId = input.PersonId, + PersonName = input.PersonName, + SenderId = input.SenderId, + SenderName = input.SenderName, + SmsAppId = input.SmsAppId, + SmsTypeId = input.SmsTypeId, + StopTime = !string.IsNullOrWhiteSpace(input.StopTime) ? DateTime.Parse(input.StopTime) : null, + TaskCorn = input.TaskCorn, + TaskCycleType = input.TaskCycleType, + ThirdId = input.ThirdId + }; + + smsTaskEntity = await _smsTaskManager.CreateAsync(smsTaskEntity); + + List smsSendList = new List(); + + if (input.PlanSendTimes.Any()) + { + + string SmsInterfaceId = _configuration.GetValue("Sms:SmsInterfaceId"); + + foreach (var item in input.PlanSendTimes) + { + var smsSendEntity = new SmsSend + { + Content = smsTaskEntity.Content, + IsActive = 'Y', + IsComplete = 'N', + MobileTelephone = smsTaskEntity.MobileTelephone, + PlanSendTime = Convert.ToDateTime(item), + SmsInterfaceId = SmsInterfaceId, + SmsTaskId = smsTaskEntity.Id + }; + + smsSendEntity = _smsSendManager.CreateAsync(smsSendEntity); + + smsSendList.Add(smsSendEntity); + } + + } + + await _smsTaskRepository.InsertAsync(smsTaskEntity); + + await _smsSendRepository.InsertManyAsync(smsSendList); + } + } } diff --git a/src/Shentun.Sms.DbMigrator/appsettings.json b/src/Shentun.Sms.DbMigrator/appsettings.json index d68b66b..64100b9 100644 --- a/src/Shentun.Sms.DbMigrator/appsettings.json +++ b/src/Shentun.Sms.DbMigrator/appsettings.json @@ -1,6 +1,6 @@ { "ConnectionStrings": { - "Default": "Host=62.156.10.86;Port=5432;Database=ShentunSms;User ID=postgres;Password=st123;" + "Default": "Host=192.168.2.181;Port=5432;Database=ShentunSms;User ID=postgres;Password=st123;" }, "OpenIddict": { "Applications": { diff --git a/src/Shentun.Sms.Domain/SmsTasks/SmsTask.cs b/src/Shentun.Sms.Domain/SmsTasks/SmsTask.cs index 3bb65ae..658016f 100644 --- a/src/Shentun.Sms.Domain/SmsTasks/SmsTask.cs +++ b/src/Shentun.Sms.Domain/SmsTasks/SmsTask.cs @@ -84,7 +84,7 @@ namespace Shentun.Sms.SmsTasks /// - /// 任务周期类别 0-及时发送 1-根据Cron表达式 + /// 任务周期类别 0-及时发送 1-根据Cron表达式 2-第三方任务计划 /// [Column("task_cycle_type")] public char TaskCycleType { get; set; } diff --git a/src/Shentun.Sms.Domain/SmsTypes/SmsType.cs b/src/Shentun.Sms.Domain/SmsTypes/SmsType.cs index 4a680d8..244e11c 100644 --- a/src/Shentun.Sms.Domain/SmsTypes/SmsType.cs +++ b/src/Shentun.Sms.Domain/SmsTypes/SmsType.cs @@ -40,6 +40,12 @@ namespace Shentun.Sms.SmsTypes [StringLength(50)] public string SimpleCode { get; set; } + /// + /// 模板ID + /// + [Column("template_id")] + [StringLength(50)] + public string TemplateId { get; set; } /// /// 排序 diff --git a/src/Shentun.Sms.EntityFrameworkCore/Migrations/20240924021839_update_sms_type_template_id.Designer.cs b/src/Shentun.Sms.EntityFrameworkCore/Migrations/20240924021839_update_sms_type_template_id.Designer.cs new file mode 100644 index 0000000..ffec305 --- /dev/null +++ b/src/Shentun.Sms.EntityFrameworkCore/Migrations/20240924021839_update_sms_type_template_id.Designer.cs @@ -0,0 +1,2226 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using Shentun.Sms.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; + +#nullable disable + +namespace Shentun.Sms.Migrations +{ + [DbContext(typeof(SmsDbContext))] + [Migration("20240924021839_update_sms_type_template_id")] + partial class update_sms_type_template_id + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.PostgreSql) + .HasAnnotation("ProductVersion", "6.0.5") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Shentun.Sms.SmsApps.SmsApp", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .IsRequired() + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("display_name") + .HasComment("名称"); + + b.Property("DisplayOrder") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(9999) + .HasColumnName("display_order") + .HasComment("排序"); + + b.Property("IsThisSystem") + .ValueGeneratedOnAdd() + .HasColumnType("character(1)") + .HasDefaultValue('N') + .HasColumnName("is_this_system") + .HasComment("是本系统"); + + b.Property("LastModificationTime") + .IsRequired() + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .IsRequired() + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("SimpleCode") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("simple_code") + .HasComment("简码"); + + b.HasKey("Id") + .HasName("pk_sms_app"); + + b.ToTable("sms_app"); + + b.HasComment("应用程序表"); + }); + + modelBuilder.Entity("Shentun.Sms.SmsInterfaces.SmsInterface", b => + { + b.Property("Id") + .HasMaxLength(3) + .HasColumnType("character(3)") + .HasColumnName("id") + .IsFixedLength() + .HasComment("001-腾讯,002-阿里,003-电信"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .IsRequired() + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("display_name") + .HasComment("名称"); + + b.Property("DisplayOrder") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(9999) + .HasColumnName("display_order") + .HasComment("排序"); + + b.Property("LastModificationTime") + .IsRequired() + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .IsRequired() + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("OrgName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("org_name") + .HasComment("发送单位名称"); + + b.Property("SimpleCode") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("simple_code") + .HasComment("简码"); + + b.HasKey("Id") + .HasName("pk_sms_interface"); + + b.ToTable("sms_interface"); + + b.HasComment("短信接口表"); + }); + + modelBuilder.Entity("Shentun.Sms.SmsSends.SmsSend", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("character varying(500)") + .HasColumnName("content") + .HasComment("短信内容"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .IsRequired() + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("IsActive") + .ValueGeneratedOnAdd() + .HasColumnType("character(1)") + .HasDefaultValue('N') + .HasColumnName("is_active") + .HasComment("是否启用"); + + b.Property("IsComplete") + .ValueGeneratedOnAdd() + .HasColumnType("character(1)") + .HasDefaultValue('N') + .HasColumnName("is_complete") + .HasComment("完成状态"); + + b.Property("LastModificationTime") + .IsRequired() + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .IsRequired() + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("MobileTelephone") + .IsRequired() + .HasMaxLength(11) + .HasColumnType("character varying(11)") + .HasColumnName("mobile_telephone") + .HasComment("手机号"); + + b.Property("PlanSendTime") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp without time zone") + .HasColumnName("plan_send_time") + .HasDefaultValueSql("now()") + .HasComment("计划发送时间"); + + b.Property("SmsInterfaceId") + .IsRequired() + .HasMaxLength(3) + .HasColumnType("character varying(3)") + .HasColumnName("sms_interface_id") + .HasComment("短信接口ID"); + + b.Property("SmsTaskId") + .HasColumnType("uuid") + .HasColumnName("sms_task_id") + .HasComment("短信任务ID"); + + b.HasKey("Id") + .HasName("pk_sms_send"); + + b.ToTable("sms_send"); + + b.HasComment("短信发送表"); + }); + + modelBuilder.Entity("Shentun.Sms.SmsTasks.SmsTask", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("character varying(500)") + .HasColumnName("content") + .HasComment("短信内容"); + + b.Property("CountryCode") + .IsRequired() + .HasMaxLength(3) + .HasColumnType("character varying(3)") + .HasColumnName("country_code") + .HasComment("手机号国家代码"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .IsRequired() + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("IsActive") + .ValueGeneratedOnAdd() + .HasColumnType("character(1)") + .HasDefaultValue('N') + .HasColumnName("is_active") + .HasComment("是否启用"); + + b.Property("LastModificationTime") + .IsRequired() + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .IsRequired() + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("MobileTelephone") + .IsRequired() + .HasMaxLength(11) + .HasColumnType("character varying(11)") + .HasColumnName("mobile_telephone") + .HasComment("手机号"); + + b.Property("PersonId") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("person_id") + .HasComment("人员ID"); + + b.Property("PersonName") + .HasMaxLength(16) + .HasColumnType("character varying(16)") + .HasColumnName("person_name") + .HasComment("姓名"); + + b.Property("SenderId") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("sender_id") + .HasComment("发送者用户ID"); + + b.Property("SenderName") + .HasMaxLength(16) + .HasColumnType("character varying(16)") + .HasColumnName("sender_name") + .HasComment("发送者用户名"); + + b.Property("SmsAppId") + .HasColumnType("uuid") + .HasColumnName("sms_app_id") + .HasComment("应用ID"); + + b.Property("SmsTypeId") + .HasColumnType("uuid") + .HasColumnName("sms_type_id") + .HasComment("短信类别ID"); + + b.Property("StopTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("stop_time") + .HasComment("停止执行时间"); + + b.Property("TaskCorn") + .HasMaxLength(200) + .HasColumnType("character varying(200)") + .HasColumnName("task_corn") + .HasComment("任务表达式"); + + b.Property("TaskCycleType") + .HasColumnType("character(1)") + .HasColumnName("task_cycle_type") + .HasComment("任务周期类别"); + + b.Property("ThirdId") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("third_id") + .HasComment("第三方系统唯一ID"); + + b.HasKey("Id") + .HasName("pk_sms_task"); + + b.ToTable("sms_task"); + + b.HasComment("短信任务计划表"); + }); + + modelBuilder.Entity("Shentun.Sms.SmsTypes.SmsType", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .IsRequired() + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("display_name") + .HasComment("名称"); + + b.Property("DisplayOrder") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(9999) + .HasColumnName("display_order") + .HasComment("排序"); + + b.Property("LastModificationTime") + .IsRequired() + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .IsRequired() + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("SimpleCode") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("simple_code") + .HasComment("简码"); + + b.Property("TemplateId") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("template_id"); + + b.HasKey("Id") + .HasName("pk_sms_type"); + + b.ToTable("sms_type"); + + b.HasComment("短信类型表"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("character varying(96)") + .HasColumnName("application_name"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("browser_info"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("client_id"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("client_ip_address"); + + b.Property("ClientName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("client_name"); + + b.Property("Comments") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("comments"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("correlation_id"); + + b.Property("Exceptions") + .HasColumnType("text") + .HasColumnName("exceptions"); + + b.Property("ExecutionDuration") + .HasColumnType("integer") + .HasColumnName("execution_duration"); + + b.Property("ExecutionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("execution_time"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("HttpMethod") + .HasMaxLength(16) + .HasColumnType("character varying(16)") + .HasColumnName("http_method"); + + b.Property("HttpStatusCode") + .HasColumnType("integer") + .HasColumnName("http_status_code"); + + b.Property("ImpersonatorTenantId") + .HasColumnType("uuid") + .HasColumnName("impersonator_tenant_id"); + + b.Property("ImpersonatorTenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("impersonator_tenant_name"); + + b.Property("ImpersonatorUserId") + .HasColumnType("uuid") + .HasColumnName("impersonator_user_id"); + + b.Property("ImpersonatorUserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("impersonator_user_name"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("tenant_name"); + + b.Property("Url") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("url"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("pk_abp_audit_logs"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("abp_audit_logs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("AuditLogId") + .HasColumnType("uuid") + .HasColumnName("audit_log_id"); + + b.Property("ExecutionDuration") + .HasColumnType("integer") + .HasColumnName("execution_duration"); + + b.Property("ExecutionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("execution_time"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("MethodName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("method_name"); + + b.Property("Parameters") + .HasMaxLength(2000) + .HasColumnType("character varying(2000)") + .HasColumnName("parameters"); + + b.Property("ServiceName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("service_name"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("Id") + .HasName("pk_abp_audit_log_actions"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("abp_audit_log_actions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("AuditLogId") + .HasColumnType("uuid") + .HasColumnName("audit_log_id"); + + b.Property("ChangeTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("change_time"); + + b.Property("ChangeType") + .HasColumnType("smallint") + .HasColumnName("change_type"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("entity_id"); + + b.Property("EntityTenantId") + .HasColumnType("uuid") + .HasColumnName("entity_tenant_id"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("entity_type_full_name"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("Id") + .HasName("pk_abp_entity_changes"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("abp_entity_changes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("EntityChangeId") + .HasColumnType("uuid") + .HasColumnName("entity_change_id"); + + b.Property("NewValue") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("new_value"); + + b.Property("OriginalValue") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("original_value"); + + b.Property("PropertyName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("property_name"); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("property_type_full_name"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("Id") + .HasName("pk_abp_entity_property_changes"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("abp_entity_property_changes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.BackgroundJobs.BackgroundJobRecord", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsAbandoned") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_abandoned"); + + b.Property("JobArgs") + .IsRequired() + .HasMaxLength(1048576) + .HasColumnType("character varying(1048576)") + .HasColumnName("job_args"); + + b.Property("JobName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("job_name"); + + b.Property("LastTryTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_try_time"); + + b.Property("NextTryTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("next_try_time"); + + b.Property("Priority") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((byte)15) + .HasColumnName("priority"); + + b.Property("TryCount") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)0) + .HasColumnName("try_count"); + + b.HasKey("Id") + .HasName("pk_abp_background_jobs"); + + b.HasIndex("IsAbandoned", "NextTryTime"); + + b.ToTable("abp_background_jobs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("provider_key"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("provider_name"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("value"); + + b.HasKey("Id") + .HasName("pk_abp_feature_values"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("abp_feature_values", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("description"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsStatic") + .HasColumnType("boolean") + .HasColumnName("is_static"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("name"); + + b.Property("Regex") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("regex"); + + b.Property("RegexDescription") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("regex_description"); + + b.Property("Required") + .HasColumnType("boolean") + .HasColumnName("required"); + + b.Property("ValueType") + .HasColumnType("integer") + .HasColumnName("value_type"); + + b.HasKey("Id") + .HasName("pk_abp_claim_types"); + + b.ToTable("abp_claim_types", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("SourceTenantId") + .HasColumnType("uuid") + .HasColumnName("source_tenant_id"); + + b.Property("SourceUserId") + .HasColumnType("uuid") + .HasColumnName("source_user_id"); + + b.Property("TargetTenantId") + .HasColumnType("uuid") + .HasColumnName("target_tenant_id"); + + b.Property("TargetUserId") + .HasColumnType("uuid") + .HasColumnName("target_user_id"); + + b.HasKey("Id") + .HasName("pk_abp_link_users"); + + b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") + .IsUnique(); + + b.ToTable("abp_link_users", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsDefault") + .HasColumnType("boolean") + .HasColumnName("is_default"); + + b.Property("IsPublic") + .HasColumnType("boolean") + .HasColumnName("is_public"); + + b.Property("IsStatic") + .HasColumnType("boolean") + .HasColumnName("is_static"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("name"); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("normalized_name"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("Id") + .HasName("pk_abp_roles"); + + b.HasIndex("NormalizedName"); + + b.ToTable("abp_roles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("claim_type"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("claim_value"); + + b.Property("RoleId") + .HasColumnType("uuid") + .HasColumnName("role_id"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("Id") + .HasName("pk_abp_role_claims"); + + b.HasIndex("RoleId"); + + b.ToTable("abp_role_claims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("Action") + .HasMaxLength(96) + .HasColumnType("character varying(96)") + .HasColumnName("action"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("character varying(96)") + .HasColumnName("application_name"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("browser_info"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("client_id"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("client_ip_address"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("correlation_id"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("Identity") + .HasMaxLength(96) + .HasColumnType("character varying(96)") + .HasColumnName("identity"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("tenant_name"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("pk_abp_security_logs"); + + b.HasIndex("TenantId", "Action"); + + b.HasIndex("TenantId", "ApplicationName"); + + b.HasIndex("TenantId", "Identity"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("abp_security_logs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("access_failed_count"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("deleter_id"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("deletion_time"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("email_confirmed"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsActive") + .HasColumnType("boolean") + .HasColumnName("is_active"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_deleted"); + + b.Property("IsExternal") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_external"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("lockout_enabled"); + + b.Property("LockoutEnd") + .HasColumnType("timestamp with time zone") + .HasColumnName("lockout_end"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("name"); + + b.Property("NormalizedEmail") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("normalized_email"); + + b.Property("NormalizedUserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("normalized_user_name"); + + b.Property("PasswordHash") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("password_hash"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("character varying(16)") + .HasColumnName("phone_number"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("phone_number_confirmed"); + + b.Property("SecurityStamp") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("security_stamp"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("surname"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("two_factor_enabled"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("pk_abp_users"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("abp_users", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("claim_type"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("claim_value"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_abp_user_claims"); + + b.HasIndex("UserId"); + + b.ToTable("abp_user_claims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("login_provider"); + + b.Property("ProviderDisplayName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("provider_display_name"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(196) + .HasColumnType("character varying(196)") + .HasColumnName("provider_key"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("UserId", "LoginProvider") + .HasName("pk_abp_user_logins"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("abp_user_logins", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uuid") + .HasColumnName("organization_unit_id"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("OrganizationUnitId", "UserId") + .HasName("pk_abp_user_organization_units"); + + b.HasIndex("UserId", "OrganizationUnitId"); + + b.ToTable("abp_user_organization_units", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("RoleId") + .HasColumnType("uuid") + .HasColumnName("role_id"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("UserId", "RoleId") + .HasName("pk_abp_user_roles"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("abp_user_roles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("login_provider"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.Property("Value") + .HasColumnType("text") + .HasColumnName("value"); + + b.HasKey("UserId", "LoginProvider", "Name") + .HasName("pk_abp_user_tokens"); + + b.ToTable("abp_user_tokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(95) + .HasColumnType("character varying(95)") + .HasColumnName("code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("deleter_id"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("deletion_time"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("display_name"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_deleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("ParentId") + .HasColumnType("uuid") + .HasColumnName("parent_id"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("Id") + .HasName("pk_abp_organization_units"); + + b.HasIndex("Code"); + + b.HasIndex("ParentId"); + + b.ToTable("abp_organization_units", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uuid") + .HasColumnName("organization_unit_id"); + + b.Property("RoleId") + .HasColumnType("uuid") + .HasColumnName("role_id"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("OrganizationUnitId", "RoleId") + .HasName("pk_abp_organization_unit_roles"); + + b.HasIndex("RoleId", "OrganizationUnitId"); + + b.ToTable("abp_organization_unit_roles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ClientId") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("client_id"); + + b.Property("ClientSecret") + .HasColumnType("text") + .HasColumnName("client_secret"); + + b.Property("ClientUri") + .HasColumnType("text") + .HasColumnName("client_uri"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("ConsentType") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("consent_type"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("deleter_id"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("deletion_time"); + + b.Property("DisplayName") + .HasColumnType("text") + .HasColumnName("display_name"); + + b.Property("DisplayNames") + .HasColumnType("text") + .HasColumnName("display_names"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_deleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("LogoUri") + .HasColumnType("text") + .HasColumnName("logo_uri"); + + b.Property("Permissions") + .HasColumnType("text") + .HasColumnName("permissions"); + + b.Property("PostLogoutRedirectUris") + .HasColumnType("text") + .HasColumnName("post_logout_redirect_uris"); + + b.Property("Properties") + .HasColumnType("text") + .HasColumnName("properties"); + + b.Property("RedirectUris") + .HasColumnType("text") + .HasColumnName("redirect_uris"); + + b.Property("Requirements") + .HasColumnType("text") + .HasColumnName("requirements"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("type"); + + b.HasKey("Id") + .HasName("pk_open_iddict_applications"); + + b.HasIndex("ClientId"); + + b.ToTable("open_iddict_applications", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ApplicationId") + .HasColumnType("uuid") + .HasColumnName("application_id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationDate") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_date"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("deleter_id"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("deletion_time"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_deleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("Properties") + .HasColumnType("text") + .HasColumnName("properties"); + + b.Property("Scopes") + .HasColumnType("text") + .HasColumnName("scopes"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("status"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("character varying(400)") + .HasColumnName("subject"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("type"); + + b.HasKey("Id") + .HasName("pk_open_iddict_authorizations"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("open_iddict_authorizations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Scopes.OpenIddictScope", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("deleter_id"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("deletion_time"); + + b.Property("Description") + .HasColumnType("text") + .HasColumnName("description"); + + b.Property("Descriptions") + .HasColumnType("text") + .HasColumnName("descriptions"); + + b.Property("DisplayName") + .HasColumnType("text") + .HasColumnName("display_name"); + + b.Property("DisplayNames") + .HasColumnType("text") + .HasColumnName("display_names"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_deleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("Name") + .HasMaxLength(200) + .HasColumnType("character varying(200)") + .HasColumnName("name"); + + b.Property("Properties") + .HasColumnType("text") + .HasColumnName("properties"); + + b.Property("Resources") + .HasColumnType("text") + .HasColumnName("resources"); + + b.HasKey("Id") + .HasName("pk_open_iddict_scopes"); + + b.HasIndex("Name"); + + b.ToTable("open_iddict_scopes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ApplicationId") + .HasColumnType("uuid") + .HasColumnName("application_id"); + + b.Property("AuthorizationId") + .HasColumnType("uuid") + .HasColumnName("authorization_id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationDate") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_date"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("deleter_id"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("deletion_time"); + + b.Property("ExpirationDate") + .HasColumnType("timestamp without time zone") + .HasColumnName("expiration_date"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_deleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("Payload") + .HasColumnType("text") + .HasColumnName("payload"); + + b.Property("Properties") + .HasColumnType("text") + .HasColumnName("properties"); + + b.Property("RedemptionDate") + .HasColumnType("timestamp without time zone") + .HasColumnName("redemption_date"); + + b.Property("ReferenceId") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("reference_id"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("status"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("character varying(400)") + .HasColumnName("subject"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("type"); + + b.HasKey("Id") + .HasName("pk_open_iddict_tokens"); + + b.HasIndex("AuthorizationId"); + + b.HasIndex("ReferenceId"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("open_iddict_tokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("provider_key"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("provider_name"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.HasKey("Id") + .HasName("pk_abp_permission_grants"); + + b.HasIndex("TenantId", "Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("abp_permission_grants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("provider_key"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("provider_name"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("character varying(2048)") + .HasColumnName("value"); + + b.HasKey("Id") + .HasName("pk_abp_settings"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("abp_settings", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Property("Id") + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("concurrency_stamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("creation_time"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("creator_id"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("deleter_id"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("deletion_time"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("extra_properties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_deleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_modification_time"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("last_modifier_id"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("pk_abp_tenants"); + + b.HasIndex("Name"); + + b.ToTable("abp_tenants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("tenant_id"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("name"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("value"); + + b.HasKey("TenantId", "Name") + .HasName("pk_abp_tenant_connection_strings"); + + b.ToTable("abp_tenant_connection_strings", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_audit_log_actions_abp_audit_logs_audit_log_id"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_entity_changes_abp_audit_logs_audit_log_id"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_entity_property_changes_abp_entity_changes_entity_chang~"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_role_claims_abp_roles_role_id"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_user_claims_abp_users_user_id"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_user_logins_abp_users_user_id"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_user_organization_units_abp_organization_units_organizati~"); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("OrganizationUnits") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_user_organization_units_abp_users_user_id"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_user_roles_abp_roles_role_id"); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_user_roles_abp_users_user_id"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_user_tokens_abp_users_user_id"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("ParentId") + .HasConstraintName("fk_abp_organization_units_abp_organization_units_parent_id"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany("Roles") + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_organization_unit_roles_abp_organization_units_organiza~"); + + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_organization_unit_roles_abp_roles_role_id"); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId") + .HasConstraintName("fk_open_iddict_authorizations_open_iddict_applications_applica~"); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId") + .HasConstraintName("fk_open_iddict_tokens_open_iddict_applications_application_id"); + + b.HasOne("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", null) + .WithMany() + .HasForeignKey("AuthorizationId") + .HasConstraintName("fk_open_iddict_tokens_open_iddict_authorizations_authorization~"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.HasOne("Volo.Abp.TenantManagement.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_abp_tenant_connection_strings_abp_tenants_tenant_id"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Navigation("Actions"); + + b.Navigation("EntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Navigation("PropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Navigation("Claims"); + + b.Navigation("Logins"); + + b.Navigation("OrganizationUnits"); + + b.Navigation("Roles"); + + b.Navigation("Tokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Navigation("Roles"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Navigation("ConnectionStrings"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Shentun.Sms.EntityFrameworkCore/Migrations/20240924021839_update_sms_type_template_id.cs b/src/Shentun.Sms.EntityFrameworkCore/Migrations/20240924021839_update_sms_type_template_id.cs new file mode 100644 index 0000000..645a4a2 --- /dev/null +++ b/src/Shentun.Sms.EntityFrameworkCore/Migrations/20240924021839_update_sms_type_template_id.cs @@ -0,0 +1,26 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Shentun.Sms.Migrations +{ + public partial class update_sms_type_template_id : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "template_id", + table: "sms_type", + type: "character varying(50)", + maxLength: 50, + nullable: true); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "template_id", + table: "sms_type"); + } + } +} diff --git a/src/Shentun.Sms.EntityFrameworkCore/Migrations/SmsDbContextModelSnapshot.cs b/src/Shentun.Sms.EntityFrameworkCore/Migrations/SmsDbContextModelSnapshot.cs index 2b84eb1..a5d2b1a 100644 --- a/src/Shentun.Sms.EntityFrameworkCore/Migrations/SmsDbContextModelSnapshot.cs +++ b/src/Shentun.Sms.EntityFrameworkCore/Migrations/SmsDbContextModelSnapshot.cs @@ -422,6 +422,11 @@ namespace Shentun.Sms.Migrations .HasColumnName("simple_code") .HasComment("简码"); + b.Property("TemplateId") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("template_id"); + b.HasKey("Id") .HasName("pk_sms_type");