Files
LabelChange-server/.trae/documents/当天应该换单数差异修复计划.md
2026-06-01 16:30:29 +08:00

39 lines
2.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 当天应该换单数统计差异修复计划
## 差异现象
- 明细查询统计考核时间为5月1日的订单6951条
- 汇总SQL统计5月1日的「当天应该换单数」5895条
- 差值1056条说明汇总逻辑多了限制条件导致少统计
## 根因分析(最终定位)
用户确认过滤条件调整无效,问题根源在**联表逻辑和CTE数据完整性**
1. **OrderAssessment关联FormFirstScan问题**左关联FormFirstScan时若交接单无扫描记录FirstScanTime_UTC5为null导致考核基准时间计算异常
2. **DistinctDates日期不全**AllDates只取了ReceiptDate、LabelRetrievedDate、FirstSuccessDate和扫描日期没有包含考核时间的日期导致考核时间的日期不在DistinctDates里Cross JOIN时丢失匹配
3. **OrderFullInfo数据丢失**OrderAssessment和OrderScanStatus左关联时有没有NeutralWaybillNumber匹配不上的情况导致考核时间丢失
## 修复方案
### 正确统计规则(用户明确)
「当天应该换单数」= 满足以下所有条件的订单总和:
1. 有考核时间AssessmentTime IS NOT NULL
2. 标签率≥80%
3. 满足以下两个条件任意一个:
a. 考核基准日期 = 统计当天日期
b. 考核截止日期 = 统计当天日期
> 最终统计结果 = 明细中考核基准日期是当天的订单数 + 考核截止日期是当天的订单数
## 执行步骤
1. 修复DistinctDates日期不全问题在AllDates中增加考核时间的日期确保所有考核日期都被包含
2. 调整汇总SQL的「当天应该换单数」统计逻辑
- 条件改为:`(DATE(ofi.AssessmentBaseTime) = dd.日期 OR DATE(ofi.AssessmentTime) = dd.日期)`
- 保留`ofi.AssessmentTime IS NOT NULL``ofi.LabelRate >= 0.8`条件
3. 同步更新明细查询的验证注释,匹配最新逻辑
4. 验证5月1日数据汇总统计结果 = 明细中考核基准日期是5月1日的count + 考核截止日期是5月1日的count
## 验证方法
修复后:
1. 运行汇总SQL获取5月1日的「当天应该换单数」
2. 运行明细SQL分别统计
a. 考核基准日期是5月1日的订单数`WHERE DATE(oa.考核基准时间_UTC5) = '2026-05-01' AND oa.交接单标签率 >= 0.8 AND oa.考核时间 IS NOT NULL`
b. 考核截止日期是5月1日的订单数`WHERE DATE(oa.考核时间) = '2026-05-01' AND oa.交接单标签率 >= 0.8 AND oa.考核时间 IS NOT NULL`
3. 汇总结果 = a + b数据完全一致则修复完成