fix(web): clarify cumulative mileage evidence
This commit is contained in:
@@ -60,6 +60,17 @@ stat-writer 已支持在累计里程缺失时,用有速度证据的相邻 GPS
|
|||||||
|
|
||||||
03:56 新版本 `mileage-gps-candidate-reconcile-202607200350` 完成清理型正式回补:写入 452 个来源聚合,`subthresholdGPSCandidatesFound=1`、`subthresholdGPSCandidatesDeleted=1`。沪A56988F 当天阈值下候选及错误最终投影均已删除;剩余被选中的 GPS 候选最小值为 `0.131 km`,低于 `0.1 km` 的选中候选为 0。清理后该车显式暴露为“JT808 当日缺少新鲜总里程字段”的源数据缺口,统计管道缺口仍为 0;系统保留该缺口,不用 4 米静止漂移构造业务里程。
|
03:56 新版本 `mileage-gps-candidate-reconcile-202607200350` 完成清理型正式回补:写入 452 个来源聚合,`subthresholdGPSCandidatesFound=1`、`subthresholdGPSCandidatesDeleted=1`。沪A56988F 当天阈值下候选及错误最终投影均已删除;剩余被选中的 GPS 候选最小值为 `0.131 km`,低于 `0.1 km` 的选中候选为 0。清理后该车显式暴露为“JT808 当日缺少新鲜总里程字段”的源数据缺口,统计管道缺口仍为 0;系统保留该缺口,不用 4 米静止漂移构造业务里程。
|
||||||
|
|
||||||
|
## 7 月 20 日 05:40 再次复核
|
||||||
|
|
||||||
|
针对“轨迹回放有里程、今日里程没有计算”的再次反馈,按 `2026-07-20 00:00:00` 至 `05:40:00` 重新核对生产轨迹、实时总里程证据、来源候选和最终日里程:
|
||||||
|
|
||||||
|
| 车牌 | 今日轨迹证据 | 今日统计 | 处理结论 |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| 沪A01559F | 宇通 260 个源点、259 个有效点;最高/平均速度均为 0;坐标区间累计 0 km | 宇通 `stationary_carry_forward` 0 km;仪表累计总里程 14,097 km 的最新证据仍是 7 月 19 日 21:23:59 | 已有显式 0 km 统计,无可信正向里程可补 |
|
||||||
|
| 沪A62013F | 今日 0 个源点;7 月 19 日 520 个源点最高速度仍为 0,区间里程 0 km | 7 月 19 日宇通 0 km;累计总里程 24,245 km | 今日没有上报,昨日 0 km 正确,禁止把累计值补成日里程 |
|
||||||
|
|
||||||
|
同一时点全量诊断覆盖 480 个活跃“协议 × 车辆”项,`pipeline_issue_total=0`;仅有 1 个赛格 JT808 项缺少新鲜总里程,属于上游源数据问题,与这两辆车无关。轨迹页点位卡片同步将“累计里程”明确为“累计总里程”,并说明它不是所选时间窗里程或今日里程,避免把点位累计值误读为区间结果。
|
||||||
|
|
||||||
## 限制与后续监控
|
## 限制与后续监控
|
||||||
|
|
||||||
- GPS 估算只在仪表里程缺失或停滞时兜底,不替代 GB32960、宇通仪表里程或 JT808 设备里程。
|
- GPS 估算只在仪表里程缺失或停滞时兜底,不替代 GB32960、宇通仪表里程或 JT808 设备里程。
|
||||||
|
|||||||
@@ -197,6 +197,8 @@ test('renders a map-first replay workspace and connects stop, event, and panel i
|
|||||||
expect(view.container.querySelector('.v2-track-current-card.semi-card')).toBeInTheDocument();
|
expect(view.container.querySelector('.v2-track-current-card.semi-card')).toBeInTheDocument();
|
||||||
expect(view.container.querySelector('.v2-track-current-coverage')).toBeInTheDocument();
|
expect(view.container.querySelector('.v2-track-current-coverage')).toBeInTheDocument();
|
||||||
expect(view.container.querySelectorAll('.v2-track-current-metrics > span')).toHaveLength(4);
|
expect(view.container.querySelectorAll('.v2-track-current-metrics > span')).toHaveLength(4);
|
||||||
|
expect(view.container.querySelector('.v2-track-current-metrics')).toHaveTextContent('累计总里程100 km');
|
||||||
|
expect(view.container.querySelector('.v2-track-current-metrics > span:last-child')).toHaveAttribute('title', '当前轨迹点设备上报的累计总里程,不是所选时间窗里程或今日里程');
|
||||||
expect(view.container.querySelector('.v2-track-current-evidence')).toHaveTextContent('JT/T 808时间窗完整3 → 3 点报警 —');
|
expect(view.container.querySelector('.v2-track-current-evidence')).toHaveTextContent('JT/T 808时间窗完整3 → 3 点报警 —');
|
||||||
expect(view.container.querySelector('.v2-track-current-evidence .v2-track-protocol-tag')).toHaveClass('semi-tag-cyan-light');
|
expect(view.container.querySelector('.v2-track-current-evidence .v2-track-protocol-tag')).toHaveClass('semi-tag-cyan-light');
|
||||||
expect(view.container.querySelector('.v2-track-coverage-float')).not.toBeInTheDocument();
|
expect(view.container.querySelector('.v2-track-coverage-float')).not.toBeInTheDocument();
|
||||||
|
|||||||
@@ -515,7 +515,7 @@ export default function TrackPage() {
|
|||||||
<span><small>速度</small><strong>{number(current?.speedKmh ?? 0)}<em> km/h</em></strong></span>
|
<span><small>速度</small><strong>{number(current?.speedKmh ?? 0)}<em> km/h</em></strong></span>
|
||||||
<span><small>方向</small><strong>{direction(current?.directionDeg)}</strong></span>
|
<span><small>方向</small><strong>{direction(current?.directionDeg)}</strong></span>
|
||||||
<span><small>SOC</small><strong>{current?.socAvailable ? `${number(current.socPercent)}%` : '—'}</strong></span>
|
<span><small>SOC</small><strong>{current?.socAvailable ? `${number(current.socPercent)}%` : '—'}</strong></span>
|
||||||
<span><small>累计里程</small><strong>{trackPointMileageAvailable(current) ? number(current?.totalMileageKm ?? 0) : '—'}{trackPointMileageAvailable(current) ? <em> km</em> : null}</strong></span>
|
<span title="当前轨迹点设备上报的累计总里程,不是所选时间窗里程或今日里程"><small>累计总里程</small><strong>{trackPointMileageAvailable(current) ? number(current?.totalMileageKm ?? 0) : '—'}{trackPointMileageAvailable(current) ? <em> km</em> : null}</strong></span>
|
||||||
</div>
|
</div>
|
||||||
<div className={`v2-track-current-evidence v2-track-current-coverage${track.coverage.complete ? '' : ' is-warning'}`}>
|
<div className={`v2-track-current-evidence v2-track-current-coverage${track.coverage.complete ? '' : ' is-warning'}`}>
|
||||||
<ProtocolTag className="v2-track-protocol-tag" protocol={current?.protocol} compact />
|
<ProtocolTag className="v2-track-protocol-tag" protocol={current?.protocol} compact />
|
||||||
|
|||||||
Reference in New Issue
Block a user