You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
191 lines
5.1 KiB
191 lines
5.1 KiB
4 weeks ago
|
# 网络配置管理功能
|
||
|
|
||
|
## 概述
|
||
|
|
||
|
网络配置管理功能提供了对RAN、IMS、MME三种网络配置的统一管理,支持配置的创建、查询、更新和删除操作。
|
||
|
|
||
|
## 配置类型
|
||
|
|
||
|
### 1. RAN配置 (Radio Access Network)
|
||
|
- **用途**: 无线接入网络配置
|
||
|
- **特点**:
|
||
|
- 不需要PLMN字段
|
||
|
- 不需要配置索引
|
||
|
- 包含频段、带宽、功率控制、天线配置等参数
|
||
|
|
||
|
### 2. IMS配置 (IP Multimedia Subsystem)
|
||
|
- **用途**: IP多媒体子系统配置
|
||
|
- **特点**:
|
||
|
- 必须提供PLMN字段
|
||
|
- 必须提供配置索引(可等于0)
|
||
|
- 包含P-CSCF、S-CSCF、I-CSCF、HSS等服务器配置
|
||
|
|
||
|
### 3. MME配置 (Mobility Management Entity)
|
||
|
- **用途**: 移动性管理实体配置
|
||
|
- **特点**:
|
||
|
- 必须提供PLMN字段
|
||
|
- 必须提供配置索引(可等于0)
|
||
|
- 包含MME代码、TAC列表、网关配置等参数
|
||
|
|
||
|
## 数据库设计
|
||
|
|
||
|
### 表结构
|
||
|
```sql
|
||
|
CREATE TABLE "NetworkConfigs" (
|
||
|
"Id" character varying(450) NOT NULL,
|
||
|
"ConfigType" integer NOT NULL,
|
||
|
"Name" character varying(100) NOT NULL,
|
||
|
"ConfigIndex" integer,
|
||
|
"Plmn" character varying(10),
|
||
|
"ConfigContent" jsonb NOT NULL,
|
||
|
"Description" character varying(500),
|
||
|
"IsDisabled" boolean NOT NULL DEFAULT false,
|
||
|
"CreatedAt" timestamp with time zone NOT NULL,
|
||
|
"UpdatedAt" timestamp with time zone NOT NULL,
|
||
|
"CreatedBy" character varying(450) NOT NULL,
|
||
|
"UpdatedBy" character varying(450) NOT NULL,
|
||
|
"IsDeleted" boolean NOT NULL DEFAULT false,
|
||
|
CONSTRAINT "PK_NetworkConfigs" PRIMARY KEY ("Id")
|
||
|
);
|
||
|
```
|
||
|
|
||
|
### 索引
|
||
|
- `IX_NetworkConfigs_ConfigType` - 配置类型索引
|
||
|
- `IX_NetworkConfigs_Name` - 名称唯一索引
|
||
|
- `IX_NetworkConfigs_Plmn` - PLMN索引
|
||
|
- `IX_NetworkConfigs_ConfigIndex` - 配置索引
|
||
|
- `IX_NetworkConfigs_IsDisabled` - 禁用状态索引
|
||
|
- `IX_NetworkConfigs_ConfigType_Plmn` - 配置类型和PLMN复合索引
|
||
|
- `IX_NetworkConfigs_ConfigType_ConfigIndex` - 配置类型和索引复合索引
|
||
|
|
||
|
### 约束
|
||
|
- `CK_NetworkConfigs_ConfigIndex_RAN` - RAN类型不能有配置索引
|
||
|
- `CK_NetworkConfigs_ConfigIndex_IMS_MME` - IMS/MME类型必须有配置索引
|
||
|
- `CK_NetworkConfigs_Plmn_IMS_MME` - IMS/MME类型必须有PLMN
|
||
|
|
||
|
## API接口
|
||
|
|
||
|
### 1. 创建网络配置
|
||
|
```http
|
||
|
POST /api/NetworkConfigs
|
||
|
Content-Type: application/json
|
||
|
|
||
|
{
|
||
|
"configType": 1,
|
||
|
"name": "RAN_Config_Default",
|
||
|
"configIndex": null,
|
||
|
"plmn": null,
|
||
|
"configContent": "{\"frequencyBands\":[\"B1\",\"B3\"]}",
|
||
|
"description": "默认RAN配置",
|
||
|
"isDisabled": false
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### 2. 获取网络配置列表
|
||
|
```http
|
||
|
GET /api/NetworkConfigs?configType=1&onlyEnabled=true
|
||
|
```
|
||
|
|
||
|
### 3. 根据类型获取配置
|
||
|
```http
|
||
|
GET /api/NetworkConfigs/type/1
|
||
|
```
|
||
|
|
||
|
### 4. 根据PLMN获取配置
|
||
|
```http
|
||
|
GET /api/NetworkConfigs/plmn/46000
|
||
|
```
|
||
|
|
||
|
### 5. 搜索网络配置
|
||
|
```http
|
||
|
GET /api/NetworkConfigs/search?keyword=RAN&configType=1
|
||
|
```
|
||
|
|
||
|
## 使用示例
|
||
|
|
||
|
### 创建RAN配置
|
||
|
```csharp
|
||
|
var command = new CreateNetworkConfigCommand
|
||
|
{
|
||
|
ConfigType = NetworkConfigType.RAN,
|
||
|
Name = "RAN_Config_Default",
|
||
|
ConfigContent = JsonSerializer.Serialize(new
|
||
|
{
|
||
|
frequencyBands = new[] { "B1", "B3", "B5", "B8" },
|
||
|
bandwidth = "20MHz",
|
||
|
powerControl = new
|
||
|
{
|
||
|
maxPower = 43,
|
||
|
minPower = 23,
|
||
|
powerStep = 1
|
||
|
}
|
||
|
}),
|
||
|
Description = "默认RAN配置"
|
||
|
};
|
||
|
|
||
|
var result = await mediator.Send(command);
|
||
|
```
|
||
|
|
||
|
### 创建IMS配置
|
||
|
```csharp
|
||
|
var command = new CreateNetworkConfigCommand
|
||
|
{
|
||
|
ConfigType = NetworkConfigType.IMS,
|
||
|
Name = "IMS_Config_ChinaMobile",
|
||
|
ConfigIndex = 0,
|
||
|
Plmn = "46000",
|
||
|
ConfigContent = JsonSerializer.Serialize(new
|
||
|
{
|
||
|
pCscfServers = new[]
|
||
|
{
|
||
|
new { address = "10.1.1.100", port = 5060, transport = "UDP" }
|
||
|
},
|
||
|
sCscfServers = new[]
|
||
|
{
|
||
|
new { address = "10.2.1.100", port = 5060, transport = "UDP" }
|
||
|
}
|
||
|
}),
|
||
|
Description = "中国移动IMS配置"
|
||
|
};
|
||
|
|
||
|
var result = await mediator.Send(command);
|
||
|
```
|
||
|
|
||
|
### 查询配置
|
||
|
```csharp
|
||
|
// 获取所有启用的配置
|
||
|
var query = new GetNetworkConfigsQuery { OnlyEnabled = true };
|
||
|
var result = await mediator.Send(query);
|
||
|
|
||
|
// 根据类型和PLMN查询
|
||
|
var query = new GetNetworkConfigsQuery
|
||
|
{
|
||
|
ConfigType = NetworkConfigType.IMS,
|
||
|
Plmn = "46000"
|
||
|
};
|
||
|
var result = await mediator.Send(query);
|
||
|
```
|
||
|
|
||
|
## 业务规则
|
||
|
|
||
|
1. **配置名称唯一性**: 所有配置的名称必须唯一
|
||
|
2. **RAN配置规则**:
|
||
|
- 不能有配置索引
|
||
|
- 不能有PLMN字段
|
||
|
3. **IMS/MME配置规则**:
|
||
|
- 必须有PLMN字段
|
||
|
- 必须有配置索引(可等于0)
|
||
|
4. **配置内容**: 必须为有效的JSON格式
|
||
|
5. **软删除**: 支持软删除,删除后数据仍保留但不可见
|
||
|
|
||
|
## 性能优化
|
||
|
|
||
|
1. **JSONB索引**: 对ConfigContent字段使用JSONB类型,支持高效的JSON查询
|
||
|
2. **复合索引**: 针对常用查询场景创建复合索引
|
||
|
3. **查询优化**: 使用仓储模式,支持灵活的查询条件组合
|
||
|
|
||
|
## 扩展性
|
||
|
|
||
|
1. **配置类型扩展**: 可以通过添加新的枚举值来支持更多配置类型
|
||
|
2. **字段扩展**: 可以在ConfigContent中添加新的配置参数
|
||
|
3. **验证规则扩展**: 可以为不同配置类型添加特定的验证规则
|