增加初始化类文件
|
# 微信配置表更新说明
## 更新概述
为微信配置表添加了 **应用分类(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
|