增加初始化类文件
xiyunfei authored at 2026-02-27 00:31:51
7.25 KiB
NewLife.WeChat
# 微信配置表更新说明 ## 更新概述 为微信配置表添加了 **应用分类(AppCategory)** 和 **租户编号(TenantId)** 字段,支持更精细的应用管理和多租户场景。 ## 更新内容 ### 1. 新增枚举类型 `WeChatAppCategory` 位置: `Models/WeChatModels.cs` ```csharp /// <summary>微信应用分类枚举</summary> public enum WeChatAppCategory { /// <summary>公众号</summary> 公众号 = 1, /// <summary>小程序</summary> MiniProgram = 2, /// <summary>APP应用</summary> APP = 3 } ``` ### 2. 更新数据库模型 位置: `Entities/Model.xml` 新增字段: - `AppCategory` (Int32): 应用分类字段 - `TenantId` (Int32): 租户编号字段 新增索引: - `IX_WeChatConfig_TenantId`: 租户索引 - `IX_WeChatConfig_AppCategory`: 应用分类索引 ### 3. 更新实体类 位置: `Entities/微信配置.cs` 和 `Entities/微信配置.Biz.cs` #### 新增属性 ```csharp /// <summary>应用分类。1=公众号,2=小程序,3=APP</summary> public WeChatAppCategory AppCategory { get; set; } /// <summary>租户编号。用于多租户场景的数据隔离</summary> public Int32 TenantId { get; set; } ``` #### 新增扩展属性 ```csharp /// <summary>应用分类文本</summary> public String AppCategoryText => AppCategory switch { WeChatAppCategory.公众号 => "公众号", WeChatAppCategory.MiniProgram => "小程序", WeChatAppCategory.APP => "APP应用", _ => "未知" }; ``` #### 新增查询方法 ```csharp // 根据应用分类查找 public static IList<微信配置> FindAllByCategory(WeChatAppCategory category); // 根据租户查找 public static IList<微信配置> FindAllByTenant(Int32 tenantId); ``` #### 增强的高级查询 ```csharp public static IList<微信配置> Search( String appname, String appid, String apptype, WeChatAppCategory? category, // 新增 Int32? tenantId, // 新增 Boolean? enabled, DateTime start, DateTime end, String key, PageParameter page ); ``` ### 4. 更新文档 #### Architecture.md - 添加了应用分类字段说明 - 添加了租户编号字段说明 - 更新了索引设计部分 #### README.md - 更新了创建配置示例(包含 3 种应用类型) - 更新了查询配置示例(新增按分类和租户查询) ## 使用示例 ### 创建不同类型的应用配置 ```csharp using NewLife.WeChat.Entities; using NewLife.WeChat.Models; // 公众号 var config1 = new 微信配置 { AppName = "我的公众号", AppId = "wx1234567890abcdef", AppSecret = "secret1", AppCategory = WeChatAppCategory.公众号, TenantId = 1, IsEnabled = true }; config1.Insert(); // 小程序 var config2 = new 微信配置 { AppName = "我的小程序", AppId = "wx9876543210fedcba", AppSecret = "secret2", AppCategory = WeChatAppCategory.MiniProgram, TenantId = 1, IsEnabled = true }; config2.Insert(); // APP应用 var config3 = new 微信配置 { AppName = "我的APP", AppId = "wxapp123456789", AppSecret = "secret3", AppCategory = WeChatAppCategory.APP, TenantId = 1, IsEnabled = true }; config3.Insert(); ``` ### 按应用分类查询 ```csharp // 查询所有公众号 var officialAccounts = 微信配置.FindAllByCategory(WeChatAppCategory.公众号); // 查询所有小程序 var miniPrograms = 微信配置.FindAllByCategory(WeChatAppCategory.MiniProgram); // 查询所有APP应用 var apps = 微信配置.FindAllByCategory(WeChatAppCategory.APP); // 获取应用分类文本 foreach (var config in officialAccounts) { Console.WriteLine($"{config.AppName}: {config.AppCategoryText}"); } ``` ### 多租户场景 ```csharp // 查询租户1的所有配置 var tenant1Configs = 微信配置.FindAllByTenant(1); // 查询租户2的所有公众号 var tenant2OfficialAccounts = 微信配置.Search( appname: null, appid: null, apptype: null, category: WeChatAppCategory.公众号, tenantId: 2, enabled: true, start: DateTime.MinValue, end: DateTime.MaxValue, key: null, page: null ); ``` ### 数据验证 实体类会自动验证并设置默认值: ```csharp var config = new 微信配置 { AppName = "测试", AppId = "wxtest", AppSecret = "secret", AppCategory = WeChatAppCategory.MiniProgram, // IsEnabled 会自动设置为 true // AppType 会根据 AppCategory 自动设置为 "小程序" }; config.Insert(); Console.WriteLine(config.IsEnabled); // True Console.WriteLine(config.AppType); // "小程序" Console.WriteLine(config.AppCategoryText); // "小程序" ``` ## 数据库迁移 如果是现有数据库,需要执行以下迁移: ### SQL Server ```sql -- 添加应用分类字段 ALTER TABLE WeChatConfig ADD AppCategory INT NULL; GO -- 添加租户编号字段 ALTER TABLE WeChatConfig ADD TenantId INT NULL DEFAULT 0; GO -- 创建索引 CREATE INDEX IX_WeChatConfig_AppCategory ON WeChatConfig(AppCategory); CREATE INDEX IX_WeChatConfig_TenantId ON WeChatConfig(TenantId); GO -- 根据现有 AppType 更新 AppCategory UPDATE WeChatConfig SET AppCategory = 1 WHERE AppType LIKE '%公众号%'; UPDATE WeChatConfig SET AppCategory = 2 WHERE AppType LIKE '%小程序%'; UPDATE WeChatConfig SET AppCategory = 3 WHERE AppType LIKE '%APP%'; GO ``` ### MySQL ```sql -- 添加应用分类字段 ALTER TABLE WeChatConfig ADD AppCategory INT NULL; -- 添加租户编号字段 ALTER TABLE WeChatConfig ADD TenantId INT NULL DEFAULT 0; -- 创建索引 CREATE INDEX IX_WeChatConfig_AppCategory ON WeChatConfig(AppCategory); CREATE INDEX IX_WeChatConfig_TenantId ON WeChatConfig(TenantId); -- 根据现有 AppType 更新 AppCategory UPDATE WeChatConfig SET AppCategory = 1 WHERE AppType LIKE '%公众号%'; UPDATE WeChatConfig SET AppCategory = 2 WHERE AppType LIKE '%小程序%'; UPDATE WeChatConfig SET AppCategory = 3 WHERE AppType LIKE '%APP%'; ``` ### SQLite ```sql -- SQLite 不支持 ADD COLUMN 后添加默认值,需要分开执行 ALTER TABLE WeChatConfig ADD COLUMN AppCategory INTEGER; ALTER TABLE WeChatConfig ADD COLUMN TenantId INTEGER DEFAULT 0; -- 创建索引 CREATE INDEX IX_WeChatConfig_AppCategory ON WeChatConfig(AppCategory); CREATE INDEX IX_WeChatConfig_TenantId ON WeChatConfig(TenantId); -- 更新现有数据 UPDATE WeChatConfig SET AppCategory = 1 WHERE AppType LIKE '%公众号%'; UPDATE WeChatConfig SET AppCategory = 2 WHERE AppType LIKE '%小程序%'; UPDATE WeChatConfig SET AppCategory = 3 WHERE AppType LIKE '%APP%'; UPDATE WeChatConfig SET TenantId = 0 WHERE TenantId IS NULL; ``` ## 兼容性说明 1. **向下兼容**: 原有的 `AppType` 字段保留,不影响现有代码 2. **自动转换**: 创建或更新配置时,会根据 `AppCategory` 自动设置 `AppType` 3. **渐进式迁移**: 可以逐步从使用 `AppType` 迁移到 `AppCategory` ## 优势 1. **类型安全**: 使用枚举替代字符串,避免拼写错误 2. **性能提升**: 使用整型字段,查询效率更高 3. **多租户**: 支持 SaaS 场景的租户隔离 4. **可扩展**: 易于添加新的应用类型 ## 注意事项 1. 新项目建议使用 `AppCategory` 字段 2. 现有项目需要执行数据库迁移脚本 3. 多租户场景下,请确保正确设置 `TenantId` 4. 建议在业务层实现租户隔离过滤 --- **更新时间**: 2024-01 **版本**: v1.1.0