diff --git a/docs/superpowers/specs/2026-04-28-add-data-flicker-batch-design.md b/docs/superpowers/specs/2026-04-28-add-data-flicker-batch-design.md index 9680075..1761435 100644 --- a/docs/superpowers/specs/2026-04-28-add-data-flicker-batch-design.md +++ b/docs/superpowers/specs/2026-04-28-add-data-flicker-batch-design.md @@ -38,6 +38,12 @@ - 写入方式是“按时间戳步长生成整段数据”,不是定时常驻写库。 - 重复补数时采用“跳过已存在数据”策略。 - 前端方案需要和后端接口一起设计。 +- 分表时间轴规则已确认: + - `data_flicker` 固定每 `10` 分钟写一组 + - `data_fluc` 固定每 `10` 分钟写一组 + - `data_plt` 固定每 `2` 小时写一组 + - 其余 `10` 张表按前端选择的 `1`、`3`、`5`、`10` 分钟步长写入 + - 所有时间点都按自然时间槽对齐,采用整点整分方式生成,不按传入开始时间顺延 - 展示字段需要覆盖: - `电能质量参数名称` - `相别` @@ -213,6 +219,13 @@ - 每张表预估写入条数 - 总预估条数 +说明: + +- 预估逻辑必须按分表时间轴分别计算。 +- `intervalMinutes` 只影响 `data_harmphasic_i`、`data_harmphasic_v`、`data_harmpower_p`、`data_harmpower_q`、`data_harmpower_s`、`data_harmrate_i`、`data_harmrate_v`、`data_i`、`data_inharm_i`、`data_v` 这 `10` 张表。 +- `data_flicker`、`data_fluc` 固定按 `10` 分钟时间槽计算。 +- `data_plt` 固定按 `2` 小时时间槽计算。 + ### 8.2 创建任务接口 接口: @@ -240,6 +253,8 @@ - 前端默认提交单个 `lineId` - 多监测点时前端直接提交多个 `lineIds` - 不单独拆分“单点接口”和“多点接口” +- `intervalMinutes` 仅作为 `10` 张基础实时类表的生成步长 +- 固定频率表仍按各自时间轴生成,不跟随 `intervalMinutes` ### 8.3 任务状态接口 @@ -412,17 +427,185 @@ 首版不引入复杂公式配置,不让前端传计算表达式。数据生成规则由后端内置。 -### 11.2 生成方式 +### 11.2 分表时间轴规则 -建议采用“基准值 + 受控扰动 + 派生字段回填”的方式生成数据: +本次补数不采用“全部表共用同一时间轴”的方式,而是拆成三类时间轴: -- 主值字段按基准值和随机扰动生成 -- 最大值字段不小于平均值 -- 最小值字段不大于平均值 +1. 固定 `10` 分钟时间轴 +2. 固定 `2` 小时时间轴 +3. 用户步长时间轴 + +具体规则如下: + +- `data_flicker` + - 固定每 `10` 分钟一组 + - 按自然时间槽对齐,例如 `10:00`、`10:10`、`10:20` +- `data_fluc` + - 固定每 `10` 分钟一组 + - 按自然时间槽对齐 +- `data_plt` + - 固定每 `2` 小时一组 + - 按自然时间槽对齐,例如 `00:00`、`02:00`、`04:00` +- 其余 `10` 张表 + - 按前端传入的 `intervalMinutes` 生成 + - 允许值仅为 `1`、`3`、`5`、`10` + - 同样按自然时间槽对齐 + +如果前端传入 `startTime=10:07`: + +- `10` 分钟表应从 `10:10` 开始 +- `2` 小时表应从 `12:00` 或下一个符合槽位的时刻开始 +- 用户步长表应从不小于 `startTime` 的下一个对应槽位开始 + +### 11.3 统一生成方式 + +建议采用“基础状态生成 + 派生字段回填 + 分表时间轴裁切”的方式: + +- 先按 `(lineId, timeId)` 生成基础电气状态 +- 再从基础状态派生电压、电流、谐波、功率、闪变 +- 最后按各表自己的时间轴决定是否落库 + +统一原则如下: + +- 同一时间点的 13 张表数据必须同源,不允许各表独立随机 +- 主值字段按基准值和受控扰动生成 +- 最大值字段不小于主值 +- 最小值字段不大于主值 - `95%概率大值` 对应 `CP95` 字段 - 宽表中的谐波分量和派生列按统一规则回填 +- 同一输入参数应尽量生成可复现的结果,不建议使用完全无约束随机数 -### 11.3 质量标识 +### 11.4 逐表生成规律 + +#### 11.4.1 基础源表 + +`data_v` 作为电压源表,优先生成: + +- 先生成 `FREQ` +- 再生成 `RMS` +- 再派生 `RMSAB`、`RMSBC`、`RMSCA` +- 再派生 `VU_DEV`、`VL_DEV`、`FREQ_DEV` +- 再派生 `V_POS`、`V_NEG`、`V_ZERO`、`V_UNBALANCE` +- 最后生成 `V_1 ~ V_50` +- `V_THD` 由 `V_2 ~ V_50` 与 `V_1` 计算 + +`data_i` 作为电流源表,与 `data_v` 保持同源: + +- 先生成 `RMS` +- 再生成 `I_POS`、`I_NEG`、`I_ZERO`、`I_UNBALANCE` +- 再生成 `I_1 ~ I_50` +- `I_THD` 由 `I_2 ~ I_50` 与 `I_1` 计算 + +对这两张源表: + +- `RMS_MAX`、`RMS_MIN`、`RMS_CP95` +- `FREQ_MAX`、`FREQ_MIN`、`FREQ_CP95` +- `V_THD_MAX`、`V_THD_MIN`、`V_THD_CP95` +- `I_THD_MAX`、`I_THD_MIN`、`I_THD_CP95` + +均必须由主值派生,不单独随机。 + +#### 11.4.2 谐波幅值表 + +`data_harmphasic_v`: + +- 直接复用 `data_v` 中的 `V_1 ~ V_50` +- 各次谐波的 `MAX`、`MIN`、`CP95` 与 `data_v` 同源派生 + +`data_harmphasic_i`: + +- 直接复用 `data_i` 中的 `I_1 ~ I_50` +- 各次谐波的 `MAX`、`MIN`、`CP95` 与 `data_i` 同源派生 + +#### 11.4.3 谐波占比表 + +`data_harmrate_v`: + +- 从 `data_harmphasic_v` 派生 +- 建议按 `V_n / V_1 * 100` 计算 `V_1 ~ V_50` 对应占比值 +- `MAX`、`MIN`、`CP95` 也按同样比例换算 + +`data_harmrate_i`: + +- 从 `data_harmphasic_i` 派生 +- 建议按 `I_n / I_1 * 100` 计算 `I_1 ~ I_50` 对应占比值 +- `MAX`、`MIN`、`CP95` 也按同样比例换算 + +#### 11.4.4 间谐波电流表 + +`data_inharm_i`: + +- 作为电流间谐波表生成 +- 各阶值应明显小于对应整数次谐波值 +- 建议按“整数次谐波值乘以小比例系数”生成 +- `MAX`、`MIN`、`CP95` 继续由主值派生 + +#### 11.4.5 谐波功率表 + +`data_harmpower_p`: + +- 从电压谐波和电流谐波联合派生 +- `P_1 ~ P_50` 建议按电压谐波、电流谐波和相位关系计算 +- `P` 为各次分量汇总 +- `PF`、`DF` 由功率关系派生 + +`data_harmpower_q`: + +- 与 `data_harmpower_p` 同源 +- `Q_1 ~ Q_50` 按无功功率关系派生 +- `Q` 为各次分量汇总 + +`data_harmpower_s`: + +- 与 `data_harmpower_p`、`data_harmpower_q` 同源 +- `S_1 ~ S_50` 建议由 `P_n` 与 `Q_n` 派生 +- `S` 为各次分量汇总 + +这三张表中的 `MAX`、`MIN`、`CP95` 也必须基于对应主值派生。 + +#### 11.4.6 闪变与波动表 + +`data_flicker`: + +- 固定 `10` 分钟时间轴 +- 生成 `FLUC`、`PST`、`PLT` +- `FLUC` 作为波动主值 +- `PST` 从 `FLUC` 派生 +- `PLT` 作为长时闪变指标生成,但落库节奏仍为 `10` 分钟 + +`data_fluc`: + +- 固定 `10` 分钟时间轴 +- 生成 `FLUC`、`FLUCCF` +- 与 `data_flicker` 同源 +- `FLUCCF` 作为 `FLUC` 的修正或归一化结果生成 + +`data_plt`: + +- 固定 `2` 小时时间轴 +- 只写 `PLT` +- `PLT` 来源应与 `data_flicker` 中的 `PLT` 同源 +- 但只在 `2` 小时槽位落表 + +### 11.5 前端展示字段映射 + +由于表结构中没有独立 `AVG` 字段,前端“平均值”首版建议直接取各参数主值字段。 + +例如: + +- 电压类参数取 `RMS`、`V_THD`、`FREQ` +- 电流类参数取 `RMS`、`I_THD` +- 闪变类参数取 `FLUC`、`PST`、`PLT` +- 功率类参数取 `P`、`Q`、`S` + +前端展示中的: + +- `最大值` -> 对应 `*_MAX` +- `最小值` -> 对应 `*_MIN` +- `95%概率大值` -> 对应 `*_CP95` +- `平均值` -> 对应主值字段 + +### 11.6 质量标识 `QUALITYFLAG` 首版建议统一使用固定有效值,例如 `1`。 @@ -453,6 +636,9 @@ - 默认单监测点 - 多监测点时切换为多选 +- 时间戳步长只影响 `10` 张基础实时类表 +- `data_flicker`、`data_fluc` 固定按 `10` 分钟槽位写入 +- `data_plt` 固定按 `2` 小时槽位写入 - 前端先调用预估接口,展示预计写入规模 - 用户确认后再调用创建任务接口