|
|
|
|
# 修改记录
|
|
|
|
|
|
|
|
|
|
## 2024年修改记录
|
|
|
|
|
|
|
|
|
|
### 协议日志仓储修改
|
|
|
|
|
|
|
|
|
|
#### 修改文件:
|
|
|
|
|
1. `X1.Domain/Repositories/Logging/IProtocolLogRepository.cs`
|
|
|
|
|
2. `X1.Infrastructure/Repositories/Logging/ProtocolLogRepository.cs`
|
|
|
|
|
|
|
|
|
|
#### 修改内容:
|
|
|
|
|
|
|
|
|
|
1. **保留现有方法**:
|
|
|
|
|
- 保留了 `GetByDeviceWithFiltersAsync` 方法,该方法用于根据设备代码和运行时状态获取协议日志
|
|
|
|
|
|
|
|
|
|
2. **新增方法**:
|
|
|
|
|
- 在接口 `IProtocolLogRepository` 中添加了 `GetProtocolLogsNotInActiveRuntimesAsync` 方法
|
|
|
|
|
- 在实现类 `ProtocolLogRepository` 中实现了该方法
|
|
|
|
|
|
|
|
|
|
3. **新方法特性**:
|
|
|
|
|
- 方法名:`GetProtocolLogsNotInActiveRuntimesAsync`
|
|
|
|
|
- 功能:获取不在活跃运行时状态中的协议日志
|
|
|
|
|
- 参数:与 `GetByDeviceWithFiltersAsync` 保持一致
|
|
|
|
|
- `deviceCode`:设备代码
|
|
|
|
|
- `runtimeCodes`:运行时代码集合
|
|
|
|
|
- `startTimestamp`:开始时间戳
|
|
|
|
|
- `endTimestamp`:结束时间戳
|
|
|
|
|
- `layerTypes`:协议层类型数组
|
|
|
|
|
- `runtimeStatuses`:运行时状态过滤
|
|
|
|
|
- `orderByDescending`:是否按时间戳降序排序
|
|
|
|
|
- `cancellationToken`:取消令牌
|
|
|
|
|
- 返回类型:`IEnumerable<ProtocolLogListDto>`
|
|
|
|
|
|
|
|
|
|
4. **SQL查询逻辑**:
|
|
|
|
|
- 基于用户提供的SQL查询
|
|
|
|
|
- **动态查询逻辑**:根据 `runtimeStatuses` 参数动态决定使用 `EXISTS` 还是 `NOT EXISTS`
|
|
|
|
|
- 当 `runtimeStatuses` 包含值 1 时,使用 `EXISTS` 包含活跃运行时状态(`RuntimeStatus = 1`)的记录
|
|
|
|
|
- 当 `runtimeStatuses` 不包含值 1 时,使用 `NOT EXISTS` 排除活跃运行时状态(`RuntimeStatus = 1`)的记录
|
|
|
|
|
- 支持所有与 `GetByDeviceWithFiltersAsync` 相同的过滤条件
|
|
|
|
|
- 高性能查询,不包含 `MessageDetailJson` 字段
|
|
|
|
|
|
|
|
|
|
5. **动态查询逻辑示例**:
|
|
|
|
|
|
|
|
|
|
**当 runtimeStatuses 包含值 1 时(使用 EXISTS)**:
|
|
|
|
|
```sql
|
|
|
|
|
SELECT
|
|
|
|
|
pl."Id",
|
|
|
|
|
pl."MessageId",
|
|
|
|
|
pl."LayerType",
|
|
|
|
|
pl."CellID",
|
|
|
|
|
pl."IMSI",
|
|
|
|
|
pl."Direction",
|
|
|
|
|
pl."UEID",
|
|
|
|
|
pl."PLMN",
|
|
|
|
|
pl."TimeMs",
|
|
|
|
|
pl."Timestamp",
|
|
|
|
|
pl."Info",
|
|
|
|
|
pl."Message",
|
|
|
|
|
pl."DeviceCode",
|
|
|
|
|
pl."RuntimeCode"
|
|
|
|
|
FROM "tb_protocol_logs" pl
|
|
|
|
|
WHERE EXISTS (
|
|
|
|
|
SELECT 1
|
|
|
|
|
FROM "tb_cellular_device_runtimes" t
|
|
|
|
|
WHERE t."RuntimeStatus" = 1
|
|
|
|
|
AND t."RuntimeCode" = pl."RuntimeCode"
|
|
|
|
|
)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**当 runtimeStatuses 不包含值 1 时(使用 NOT EXISTS)**:
|
|
|
|
|
```sql
|
|
|
|
|
SELECT
|
|
|
|
|
pl."Id",
|
|
|
|
|
pl."MessageId",
|
|
|
|
|
pl."LayerType",
|
|
|
|
|
pl."CellID",
|
|
|
|
|
pl."IMSI",
|
|
|
|
|
pl."Direction",
|
|
|
|
|
pl."UEID",
|
|
|
|
|
pl."PLMN",
|
|
|
|
|
pl."TimeMs",
|
|
|
|
|
pl."Timestamp",
|
|
|
|
|
pl."Info",
|
|
|
|
|
pl."Message",
|
|
|
|
|
pl."DeviceCode",
|
|
|
|
|
pl."RuntimeCode"
|
|
|
|
|
FROM "tb_protocol_logs" pl
|
|
|
|
|
WHERE NOT EXISTS (
|
|
|
|
|
SELECT 1
|
|
|
|
|
FROM "tb_cellular_device_runtimes" t
|
|
|
|
|
WHERE t."RuntimeStatus" = 1
|
|
|
|
|
AND t."RuntimeCode" = pl."RuntimeCode"
|
|
|
|
|
)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 修改时间:
|
|
|
|
|
2024年
|
|
|
|
|
|
|
|
|
|
#### 修改原因:
|
|
|
|
|
用户需要一个新的方法来获取不在活跃运行时状态中的协议日志,同时保持与现有 `GetByDeviceWithFiltersAsync` 方法相同的参数和过滤条件。
|