From 6396dac27ca99e84a2e3c772fb079bceddf67ff8 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期一, 01 十二月 2025 18:17:45 +0800
Subject: [PATCH] feat:开发

---
 ApiTools.Database.Migrations/Migrations/20251201101428_CreateWxmpSubscribMessageLog.Designer.cs | 1054 +++++++++++++++++++++++++++++++++++++++++++++
 ApiTools.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs                        |   56 ++
 ApiTools.Web.Entry/Controllers/WxmpController.cs                                                |    2 
 ApiTools.Core/ApiTools.Core.xml                                                                 |   65 ++
 ApiTools.Database.Migrations/Migrations/20251201101428_CreateWxmpSubscribMessageLog.cs          |   48 ++
 ApiTools.Database.Migrations/REDEME.MD                                                          |    2 
 ApiTools.Application/WxUtils/Commands/WxmpSubscribMessageCommandHandler.cs                      |   32 +
 ApiTools.Core/Models/WxmpUtils/Commands/WxmpSubscribMessageNotifyCommand.cs                     |   28 +
 ApiTools.Core/Entities/LogRecords/WxmpSubscribMessageLog.cs                                     |   51 ++
 9 files changed, 1,329 insertions(+), 9 deletions(-)

diff --git a/ApiTools.Application/WxUtils/Commands/WxmpSubscribMessageCommandHandler.cs b/ApiTools.Application/WxUtils/Commands/WxmpSubscribMessageCommandHandler.cs
index bfdf10c..ee2ea78 100644
--- a/ApiTools.Application/WxUtils/Commands/WxmpSubscribMessageCommandHandler.cs
+++ b/ApiTools.Application/WxUtils/Commands/WxmpSubscribMessageCommandHandler.cs
@@ -1,6 +1,8 @@
 锘縰sing Aop.Api.Domain;
 using ApiTools.Core;
+using ApiTools.Core.Entities.LogRecords;
 using Furion;
+using Furion.DatabaseAccessor;
 using Furion.HttpRemote;
 using log4net.Core;
 using MediatR;
@@ -15,13 +17,15 @@
 namespace ApiTools.Application
 {
     public class WxmpSubscribMessageCommandHandler(
+            IRepository<WxmpSubscribMessageLog> repWxmpSubscribMessageLog,
             ILogger<WxmpSubscribMessageCommandHandler> logger,
             WxmpUtils utils,
             IHttpRemoteService httpRemoteService
         ) :
         IRequestHandler<SendWxmpSubscribMessageCommand, Guid>,
-        IRequestHandler<WxmpSubscribMessageNotifyCommand, bool>
+        IRequestHandler<WxmpSubscribMessageNotifyCommand, Guid>
     {
+        private readonly IRepository<WxmpSubscribMessageLog> repWxmpSubscribMessageLog = repWxmpSubscribMessageLog;
         private readonly ILogger<WxmpSubscribMessageCommandHandler> logger = logger;
         private readonly WxmpUtils utils = utils;
         private readonly IHttpRemoteService httpRemoteService = httpRemoteService;
@@ -42,7 +46,17 @@
                 WxmpCode = request.WxmpCode,
                 Touser = request.Touser,
             });
-            return Guid.Empty;
+            var log = new WxmpSubscribMessageLog
+            {
+                Code = request.WxmpCode,
+                OpenId = request.Touser,
+                SubscribeStatusString = "send",
+                TemplateId = request.TemplateId,
+                Page = request.Page,
+                Data = request.Data.ToJson()
+            };
+            await repWxmpSubscribMessageLog.InsertNowAsync(log);
+            return log.Id;
         }
 
         /// <summary>
@@ -51,7 +65,7 @@
         /// <param name="request"></param>
         /// <param name="cancellationToken"></param>
         /// <returns></returns>
-        public async Task<bool> Handle(WxmpSubscribMessageNotifyCommand request, CancellationToken cancellationToken)
+        public async Task<Guid> Handle(WxmpSubscribMessageNotifyCommand request, CancellationToken cancellationToken)
         {
             var env = App.GetConfig<string>("Environment");
             if (env == "Product")
@@ -67,7 +81,17 @@
 
                 }
             }
-            return true;
+
+            var log = new WxmpSubscribMessageLog
+            {
+                Code = request.Code,
+                OpenId = request.OpenId,
+                PopupScene = request.Content.PopupScene,
+                SubscribeStatusString = request.Content.SubscribeStatusString,
+                TemplateId = request.Content.TemplateId
+            };
+            await repWxmpSubscribMessageLog.InsertNowAsync(log);
+            return log.Id;
         }
     }
 }
diff --git a/ApiTools.Core/ApiTools.Core.xml b/ApiTools.Core/ApiTools.Core.xml
index 5d582b5..ce92f10 100644
--- a/ApiTools.Core/ApiTools.Core.xml
+++ b/ApiTools.Core/ApiTools.Core.xml
@@ -249,6 +249,46 @@
             鑰楁椂姣鏁�
             </summary>
         </member>
+        <member name="T:ApiTools.Core.Entities.LogRecords.WxmpSubscribMessageLog">
+            <summary>
+            寰俊璁㈤槄娑堟伅鏃ュ織
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.Entities.LogRecords.WxmpSubscribMessageLog.Code">
+            <summary>
+            灏忕▼搴忎唬鐮�
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.Entities.LogRecords.WxmpSubscribMessageLog.OpenId">
+            <summary>
+            鐢ㄦ埛寮�鏀綢d
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.Entities.LogRecords.WxmpSubscribMessageLog.PopupScene">
+            <summary>
+            鍦烘櫙
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.Entities.LogRecords.WxmpSubscribMessageLog.SubscribeStatusString">
+            <summary>
+            鐘舵��
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.Entities.LogRecords.WxmpSubscribMessageLog.TemplateId">
+            <summary>
+            妯℃澘Id
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.Entities.LogRecords.WxmpSubscribMessageLog.Page">
+            <summary>
+            鐐瑰嚮妯℃澘鍗$墖鍚庣殑璺宠浆椤甸潰锛屼粎闄愭湰灏忕▼搴忓唴鐨勯〉闈€�傛敮鎸佸甫鍙傛暟,锛堢ず渚媔ndex?foo=bar锛夈�傝瀛楁涓嶅~鍒欐ā鏉挎棤璺宠浆
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.Entities.LogRecords.WxmpSubscribMessageLog.Data">
+            <summary>
+            妯℃澘鍐呭锛屾牸寮忓舰濡倇 "phrase3": { "value": "瀹℃牳閫氳繃" }, "name1": { "value": "璁㈤槄" }, "date2": { "value": "2019-12-25 09:42" } }
+            </summary>
+        </member>
         <member name="T:ApiTools.Core.ScheduleJobTriggerTimeline">
             <summary>
             瀹氭椂浠诲姟-浣滀笟瑙﹀彂鍣ㄨ繍琛岃褰�
@@ -3333,6 +3373,16 @@
             鐢ㄦ埛寮�鏀綢d
             </summary>
         </member>
+        <member name="P:ApiTools.Core.WxmpSubscribMessageNotifyCommand.ToUserName">
+            <summary>
+            鎺ユ敹浜�
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.WxmpSubscribMessageNotifyCommand.FromUserName">
+            <summary>
+            鍙戦�佷汉
+            </summary>
+        </member>
         <member name="P:ApiTools.Core.WxmpSubscribMessageNotifyCommand.CreateTime">
             <summary>
             鍒涘缓鏃堕棿
@@ -3353,6 +3403,21 @@
             鍐呭
             </summary>
         </member>
+        <member name="P:ApiTools.Core.WxmpSubscribMessageNotifyCommandContent.PopupScene">
+            <summary>
+            鍦烘櫙
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.WxmpSubscribMessageNotifyCommandContent.SubscribeStatusString">
+            <summary>
+            鐘舵��
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.WxmpSubscribMessageNotifyCommandContent.TemplateId">
+            <summary>
+            妯℃澘Id
+            </summary>
+        </member>
         <member name="P:ApiTools.Core.WxmpSubscribMessageNotifyRequestQuery.signature">
             <summary>
             绛惧悕
diff --git a/ApiTools.Core/Entities/LogRecords/WxmpSubscribMessageLog.cs b/ApiTools.Core/Entities/LogRecords/WxmpSubscribMessageLog.cs
new file mode 100644
index 0000000..2bcd14f
--- /dev/null
+++ b/ApiTools.Core/Entities/LogRecords/WxmpSubscribMessageLog.cs
@@ -0,0 +1,51 @@
+锘縰sing Furion.DatabaseAccessor;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ApiTools.Core.Entities.LogRecords
+{
+    /// <summary>
+    /// 寰俊璁㈤槄娑堟伅鏃ュ織
+    /// </summary>
+    public class WxmpSubscribMessageLog : CommonEntity<MasterDbContextLocator>, IDbAuditLogIgnore
+    {
+        /// <summary>
+        /// 灏忕▼搴忎唬鐮�
+        /// </summary>
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 鐢ㄦ埛寮�鏀綢d
+        /// </summary>
+        public string OpenId { get; set; }
+
+        /// <summary>
+        /// 鍦烘櫙
+        /// </summary>
+        public string PopupScene { get; set; }
+
+        /// <summary>
+        /// 鐘舵��
+        /// </summary>
+        public string SubscribeStatusString { get; set; }
+
+        /// <summary>
+        /// 妯℃澘Id
+        /// </summary>
+        public string TemplateId { get; set; }
+
+        /// <summary>
+        /// 鐐瑰嚮妯℃澘鍗$墖鍚庣殑璺宠浆椤甸潰锛屼粎闄愭湰灏忕▼搴忓唴鐨勯〉闈€�傛敮鎸佸甫鍙傛暟,锛堢ず渚媔ndex?foo=bar锛夈�傝瀛楁涓嶅~鍒欐ā鏉挎棤璺宠浆
+        /// </summary>
+        public string Page { get; set; }
+
+        /// <summary>
+        /// 妯℃澘鍐呭锛屾牸寮忓舰濡倇 "phrase3": { "value": "瀹℃牳閫氳繃" }, "name1": { "value": "璁㈤槄" }, "date2": { "value": "2019-12-25 09:42" } }
+        /// </summary>
+        public string Data { get; set; }
+    }
+}
diff --git a/ApiTools.Core/Models/WxmpUtils/Commands/WxmpSubscribMessageNotifyCommand.cs b/ApiTools.Core/Models/WxmpUtils/Commands/WxmpSubscribMessageNotifyCommand.cs
index afad571..d662de4 100644
--- a/ApiTools.Core/Models/WxmpUtils/Commands/WxmpSubscribMessageNotifyCommand.cs
+++ b/ApiTools.Core/Models/WxmpUtils/Commands/WxmpSubscribMessageNotifyCommand.cs
@@ -12,7 +12,7 @@
     /// 寰俊灏忕▼搴忚闃呮秷鎭�氱煡
     /// </summary>
     [Resource([EnumResourceController.CommonServerWxmpUtils], AllowAnonymous = true)]
-    public class WxmpSubscribMessageNotifyCommand : IRequest<bool>
+    public class WxmpSubscribMessageNotifyCommand : IRequest<Guid>
     {
         /// <summary>
         /// 灏忕▼搴忎唬鐮�
@@ -22,7 +22,13 @@
         /// 鐢ㄦ埛寮�鏀綢d
         /// </summary>
         public string OpenId { get; set; }
+        /// <summary>
+        /// 鎺ユ敹浜�
+        /// </summary>
         public string ToUserName { get; set; }
+        /// <summary>
+        /// 鍙戦�佷汉
+        /// </summary>
         public string FromUserName { get; set; }
         /// <summary>
         /// 鍒涘缓鏃堕棿
@@ -39,7 +45,23 @@
         /// <summary>
         /// 鍐呭
         /// </summary>
-        [JsonProperty("debug_str")]
-        public string Content { get; set; }
+        [JsonProperty("List")]
+        public WxmpSubscribMessageNotifyCommandContent Content { get; set; }
+    }
+
+    public class WxmpSubscribMessageNotifyCommandContent
+    {
+        /// <summary>
+        /// 鍦烘櫙
+        /// </summary>
+        public string PopupScene { get; set; }
+        /// <summary>
+        /// 鐘舵��
+        /// </summary>
+        public string SubscribeStatusString { get; set; }
+        /// <summary>
+        /// 妯℃澘Id
+        /// </summary>
+        public string TemplateId { get; set; }
     }
 }
diff --git a/ApiTools.Database.Migrations/Migrations/20251201101428_CreateWxmpSubscribMessageLog.Designer.cs b/ApiTools.Database.Migrations/Migrations/20251201101428_CreateWxmpSubscribMessageLog.Designer.cs
new file mode 100644
index 0000000..ce3710b
--- /dev/null
+++ b/ApiTools.Database.Migrations/Migrations/20251201101428_CreateWxmpSubscribMessageLog.Designer.cs
@@ -0,0 +1,1054 @@
+锘�// <auto-generated />
+using System;
+using ApiTools.EntityFramework.Core;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace ApiTools.Database.Migrations.Migrations
+{
+    [DbContext(typeof(DefaultDbContext))]
+    [Migration("20251201101428_CreateWxmpSubscribMessageLog")]
+    partial class CreateWxmpSubscribMessageLog
+    {
+        /// <inheritdoc />
+        protected override void BuildTargetModel(ModelBuilder modelBuilder)
+        {
+#pragma warning disable 612, 618
+            modelBuilder
+                .HasAnnotation("ProductVersion", "9.0.2")
+                .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+            modelBuilder.Entity("ApiTools.Core.Channel", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Code")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("CreatedChannelId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDisabled")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("Name")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Channel");
+                });
+
+            modelBuilder.Entity("ApiTools.Core.ChannelWallet", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("Access")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("Balance")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<string>("Bank")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("BankBranch")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("ChannelId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Code")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("CreatedChannelId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("ErrorCode")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("FailReason")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Identity")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("Name")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("OutWalletId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("SignStatus")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ChannelId");
+
+                    b.ToTable("ChannelWallet");
+                });
+
+            modelBuilder.Entity("ApiTools.Core.ChannelWalletTransaction", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<decimal>("AfterBalance")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<decimal>("Amount")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<decimal>("Balance")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<string>("Code")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ConcurrencyLock")
+                        .HasColumnType("nvarchar(450)");
+
+                    b.Property<Guid?>("CreatedChannelId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Currency")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("EreceiptDownloadOssUrl")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("EreceiptDownloadUrl")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("EreceiptErrorMessage")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("EreceiptFileId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int?>("EreceiptStatus")
+                        .HasColumnType("int");
+
+                    b.Property<string>("ErrorCode")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("FailReason")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<DateTime?>("OperatorTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<decimal?>("OrderFee")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<string>("OutCode")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("OutOperatorId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("OutReceiveId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("PayerAccount")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("PayerBank")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("PayerBankBranch")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("PayerName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Purpose")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ReceiveAccount")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ReceiveBank")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ReceiveBankBranch")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ReceiveIdentity")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ReceiveName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Remark")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime?>("TransDate")
+                        .HasColumnType("datetime2");
+
+                    b.Property<int>("TransactionStatus")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("int");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("WalletId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ConcurrencyLock")
+                        .IsUnique()
+                        .HasFilter("[ConcurrencyLock] IS NOT NULL");
+
+                    b.HasIndex("WalletId");
+
+                    b.ToTable("ChannelWalletTransaction");
+                });
+
+            modelBuilder.Entity("ApiTools.Core.ChannelWalletTransactionPingAnPay", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("AccountDate")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("BackRem")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("CreatedChannelId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("CstInnerFlowNo")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Fee")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("FreezeNo")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("FrontLogNo")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("HostErrorCode")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("HostFlowNo")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("IsBack")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("ProxyPayAcc")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ProxyPayBankName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ProxyPayName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("RemoveStopFailReason")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("RemoveStopStt")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("StopFailReason")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("StopStt")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("SubmitTime")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("SysFlag")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ThirdVoucher")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("TransBsn")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Yhcljg")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("ChannelWalletTransactionPingAnPay");
+                });
+
+            modelBuilder.Entity("ApiTools.Core.Entities.LogRecords.WxmpSubscribMessageLog", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Code")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("CreatedChannelId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Data")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("OpenId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Page")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("PopupScene")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("SubscribeStatusString")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("TemplateId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("WxmpSubscribMessageLog");
+                });
+
+            modelBuilder.Entity("ApiTools.Core.Resource", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("ActionName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ActionSummary")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("AllowAnonymous")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("ApplicationName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Code")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ControllerName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ControllerSummary")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("CreatedChannelId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("CustomResponse")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("DynamicAssemblyName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("FileUpload")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsExpired")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsFromForm")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Method")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("RequestTypeFullName")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("RequestTypeName")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ResponseTypeFullName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ResponseTypeName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Route")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("RouteArea")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServiceName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Resource");
+                });
+
+            modelBuilder.Entity("ApiTools.Core.ScheduleJobDetail", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("AssemblyName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("Concurrent")
+                        .HasColumnType("bit");
+
+                    b.Property<Guid?>("CreatedChannelId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Description")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("GroupName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IncludeAnnotations")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("JobId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("JobType")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Properties")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("ScheduleJobDetail");
+                });
+
+            modelBuilder.Entity("ApiTools.Core.ScheduleJobTrigger", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Args")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("AssemblyName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("CreatedChannelId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Description")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<long>("ElapsedTime")
+                        .HasColumnType("bigint");
+
+                    b.Property<DateTime?>("EndTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("JobId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime?>("LastRunTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<long>("MaxNumberOfErrors")
+                        .HasColumnType("bigint");
+
+                    b.Property<long>("MaxNumberOfRuns")
+                        .HasColumnType("bigint");
+
+                    b.Property<DateTime?>("NextRunTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<long>("NumRetries")
+                        .HasColumnType("bigint");
+
+                    b.Property<long>("NumberOfErrors")
+                        .HasColumnType("bigint");
+
+                    b.Property<long>("NumberOfRuns")
+                        .HasColumnType("bigint");
+
+                    b.Property<bool>("ResetOnlyOnce")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("Result")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("RetryTimeout")
+                        .HasColumnType("int");
+
+                    b.Property<bool>("RunOnStart")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<bool>("StartNow")
+                        .HasColumnType("bit");
+
+                    b.Property<DateTime?>("StartTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<long>("Status")
+                        .HasColumnType("bigint");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("TriggerId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("TriggerType")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("ScheduleJobTrigger");
+                });
+
+            modelBuilder.Entity("ApiTools.Core.SmsLog", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("Access")
+                        .HasColumnType("int");
+
+                    b.Property<Guid?>("ChannelCreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("ChannelId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Code")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("CreatedChannelId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTime?>("Expiry")
+                        .HasColumnType("datetime2");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsUsed")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("Message")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("PhoneNumber")
+                        .IsRequired()
+                        .HasMaxLength(11)
+                        .HasColumnType("nvarchar(11)");
+
+                    b.Property<string>("RequestId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Status")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TemplateCode")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<string>("TemplateParam")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ChannelId");
+
+                    b.ToTable("SmsLog");
+                });
+
+            modelBuilder.Entity("ApiTools.Core.SmsSetting", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("ChannelId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("CreatedChannelId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("DailyMaxCount")
+                        .HasColumnType("int");
+
+                    b.Property<int>("HourlyMaxCount")
+                        .HasColumnType("int");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDisabled")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("MinutelyMaxCount")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("WithoutParams")
+                        .HasColumnType("bit");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ChannelId");
+
+                    b.ToTable("SmsSetting");
+                });
+
+            modelBuilder.Entity("ApiTools.Core.SmsSettingAccess", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("Access")
+                        .HasColumnType("int");
+
+                    b.Property<Guid?>("CreatedChannelId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDisabled")
+                        .HasColumnType("bit");
+
+                    b.Property<Guid>("SettingId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("SignName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("SettingId");
+
+                    b.ToTable("SmsSettingAccess");
+                });
+
+            modelBuilder.Entity("ApiTools.Core.User", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Avatar")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("ChannelId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("CreatedChannelId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsCheckPhoneNumber")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Level")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Name")
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<string>("Password")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("PhoneNumber")
+                        .HasMaxLength(11)
+                        .HasColumnType("nvarchar(11)");
+
+                    b.Property<string>("Remark")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Status")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("int");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("UserName")
+                        .IsRequired()
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ChannelId");
+
+                    b.ToTable("User");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = new Guid("11111111-1111-1111-1111-111111111111"),
+                            CreatedTime = new DateTimeOffset(new DateTime(2000, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 8, 0, 0, 0)),
+                            IsCheckPhoneNumber = false,
+                            IsDeleted = false,
+                            Level = 999,
+                            Name = "绠$悊鍛�",
+                            Password = "iEYggKrMhQ3ASUGLobra1w==:fn/DsMJUbD9FGpvBvR3moMpMPptdxzZlourPVhU479I=",
+                            Sort = 0,
+                            Status = 10,
+                            Type = 100,
+                            UserName = "system"
+                        });
+                });
+
+            modelBuilder.Entity("ApiTools.Core.ChannelWallet", b =>
+                {
+                    b.HasOne("ApiTools.Core.Channel", "Channel")
+                        .WithMany()
+                        .HasForeignKey("ChannelId");
+
+                    b.Navigation("Channel");
+                });
+
+            modelBuilder.Entity("ApiTools.Core.ChannelWalletTransaction", b =>
+                {
+                    b.HasOne("ApiTools.Core.ChannelWallet", "Wallet")
+                        .WithMany()
+                        .HasForeignKey("WalletId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Wallet");
+                });
+
+            modelBuilder.Entity("ApiTools.Core.ChannelWalletTransactionPingAnPay", b =>
+                {
+                    b.HasOne("ApiTools.Core.ChannelWalletTransaction", "Transaction")
+                        .WithOne("PingAnPay")
+                        .HasForeignKey("ApiTools.Core.ChannelWalletTransactionPingAnPay", "Id")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Transaction");
+                });
+
+            modelBuilder.Entity("ApiTools.Core.SmsLog", b =>
+                {
+                    b.HasOne("ApiTools.Core.Channel", "Channel")
+                        .WithMany()
+                        .HasForeignKey("ChannelId");
+
+                    b.Navigation("Channel");
+                });
+
+            modelBuilder.Entity("ApiTools.Core.SmsSetting", b =>
+                {
+                    b.HasOne("ApiTools.Core.Channel", "Channel")
+                        .WithMany()
+                        .HasForeignKey("ChannelId");
+
+                    b.Navigation("Channel");
+                });
+
+            modelBuilder.Entity("ApiTools.Core.SmsSettingAccess", b =>
+                {
+                    b.HasOne("ApiTools.Core.SmsSetting", "Setting")
+                        .WithMany("Accesses")
+                        .HasForeignKey("SettingId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Setting");
+                });
+
+            modelBuilder.Entity("ApiTools.Core.User", b =>
+                {
+                    b.HasOne("ApiTools.Core.Channel", "Channel")
+                        .WithMany()
+                        .HasForeignKey("ChannelId");
+
+                    b.Navigation("Channel");
+                });
+
+            modelBuilder.Entity("ApiTools.Core.ChannelWalletTransaction", b =>
+                {
+                    b.Navigation("PingAnPay");
+                });
+
+            modelBuilder.Entity("ApiTools.Core.SmsSetting", b =>
+                {
+                    b.Navigation("Accesses");
+                });
+#pragma warning restore 612, 618
+        }
+    }
+}
diff --git a/ApiTools.Database.Migrations/Migrations/20251201101428_CreateWxmpSubscribMessageLog.cs b/ApiTools.Database.Migrations/Migrations/20251201101428_CreateWxmpSubscribMessageLog.cs
new file mode 100644
index 0000000..472bd60
--- /dev/null
+++ b/ApiTools.Database.Migrations/Migrations/20251201101428_CreateWxmpSubscribMessageLog.cs
@@ -0,0 +1,48 @@
+锘縰sing System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace ApiTools.Database.Migrations.Migrations
+{
+    /// <inheritdoc />
+    public partial class CreateWxmpSubscribMessageLog : Migration
+    {
+        /// <inheritdoc />
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.CreateTable(
+                name: "WxmpSubscribMessageLog",
+                columns: table => new
+                {
+                    Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
+                    Code = table.Column<string>(type: "nvarchar(max)", nullable: true),
+                    OpenId = table.Column<string>(type: "nvarchar(max)", nullable: true),
+                    PopupScene = table.Column<string>(type: "nvarchar(max)", nullable: true),
+                    SubscribeStatusString = table.Column<string>(type: "nvarchar(max)", nullable: true),
+                    TemplateId = table.Column<string>(type: "nvarchar(max)", nullable: true),
+                    Page = table.Column<string>(type: "nvarchar(max)", nullable: true),
+                    Data = table.Column<string>(type: "nvarchar(max)", nullable: true),
+                    Sort = table.Column<int>(type: "int", nullable: false),
+                    TraceId = table.Column<string>(type: "nvarchar(max)", nullable: true),
+                    CreatedTime = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: false),
+                    CreatedUserId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
+                    CreatedChannelId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
+                    UpdatedTime = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true),
+                    UpdatedUserId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
+                    IsDeleted = table.Column<bool>(type: "bit", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_WxmpSubscribMessageLog", x => x.Id);
+                });
+        }
+
+        /// <inheritdoc />
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropTable(
+                name: "WxmpSubscribMessageLog");
+        }
+    }
+}
diff --git a/ApiTools.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs b/ApiTools.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs
index de7c9c6..2ec4124 100644
--- a/ApiTools.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs
+++ b/ApiTools.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs
@@ -377,6 +377,62 @@
                     b.ToTable("ChannelWalletTransactionPingAnPay");
                 });
 
+            modelBuilder.Entity("ApiTools.Core.Entities.LogRecords.WxmpSubscribMessageLog", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Code")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("CreatedChannelId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Data")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("OpenId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Page")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("PopupScene")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("SubscribeStatusString")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("TemplateId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("WxmpSubscribMessageLog");
+                });
+
             modelBuilder.Entity("ApiTools.Core.Resource", b =>
                 {
                     b.Property<Guid>("Id")
diff --git a/ApiTools.Database.Migrations/REDEME.MD b/ApiTools.Database.Migrations/REDEME.MD
index 1f6848e..3941f54 100644
--- a/ApiTools.Database.Migrations/REDEME.MD
+++ b/ApiTools.Database.Migrations/REDEME.MD
@@ -1,7 +1,7 @@
 -------------------------------涓绘暟鎹簱---------------------------------------
 
 鏂板杩佺Щ鏂囦欢
-dotnet ef migrations add UpdateChannelWallet1119 -s "../ApiTools.Web.Entry" -c DefaultDbContext
+dotnet ef migrations add CreateWxmpSubscribMessageLog -s "../ApiTools.Web.Entry" -c DefaultDbContext
 
 鍒犻櫎杩佺Щ鏂囦欢
 dotnet ef migrations remove -s "../ApiTools.Web.Entry" -c DefaultDbContext
diff --git a/ApiTools.Web.Entry/Controllers/WxmpController.cs b/ApiTools.Web.Entry/Controllers/WxmpController.cs
index f0d163c..a3711b4 100644
--- a/ApiTools.Web.Entry/Controllers/WxmpController.cs
+++ b/ApiTools.Web.Entry/Controllers/WxmpController.cs
@@ -66,7 +66,7 @@
             command.Code = code;
             command.OpenId = query.openid;
             await mediator.Send(command);
-            return Content(query.echostr);
+            return Content("success");
         }
     }
 }

--
Gitblit v1.9.1