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