# 运营指标逻辑全量对齐修复计划
## 问题背景
当前`最新运营监控.sql`的统计结果和`运营指标验证明细查询.sql`的明细数据不一致，5月1日「当天应该换单数」明细统计为9593，汇总统计仅为8537，核心问题为联表条件过滤了部分有效订单，同时需要按照最新的指标定义全量对齐所有指标的计算逻辑。

## 修复目标
1. 完全对齐用户给出的所有指标统计规则
2. 5月1日「当天应该换单数」统计结果等于9593，与明细完全一致
3. 所有指标计算逻辑在汇总SQL和明细SQL中保持统一
4. 正确处理时区转换：所有时间除到仓时间外，统计时均转换为UTC-5，日期维度统一使用UTC-5自然日
5. 累计要换的总单数按RequestId去重，无重复统计

## 修复步骤
### 步骤1：读取当前SQL文件确认现有逻辑
读取以下两个核心SQL文件，梳理当前的联表逻辑、指标计算方式和存在的问题：
- `d:\EPproject\LabelReplaceServer\最新运营监控.sql`
- `d:\EPproject\LabelReplaceServer\运营指标验证明细查询.sql`

### 步骤2：补全AllDates日期维度
确保日期维度包含所有需要用到的日期，避免联表时丢失有效数据：
```sql
AllDates AS (
    SELECT ReceiptDate AS 日期 FROM OrderFullInfo -- 到仓日期（UTC-5）
    UNION
    SELECT LabelRetrievedDate_UTC5 AS 日期 FROM OrderFullInfo WHERE LabelRetrievedDate_UTC5 IS NOT NULL -- 标签推送日期（UTC-5）
    UNION
    SELECT FirstSuccessDate_UTC5 AS 日期 FROM OrderFullInfo WHERE FirstSuccessDate_UTC5 IS NOT NULL -- 标签率达标日期（UTC-5）
    UNION
    SELECT DATE(CONVERT_TZ(AssessmentBaseTime, '+00:00', '-05:00')) AS 日期 FROM OrderFullInfo WHERE AssessmentBaseTime IS NOT NULL -- 考核基准日期（转UTC-5）
    UNION
    SELECT DATE(CONVERT_TZ(AssessmentTime, '+00:00', '-05:00')) AS 日期 FROM OrderFullInfo WHERE AssessmentTime IS NOT NULL -- 考核截止日期（转UTC-5）
    UNION
    SELECT DATE(CONVERT_TZ(ScanTime, '+00:00', '-05:00')) AS 日期 FROM ScanHistory WHERE ScanTime IS NOT NULL -- 扫描日期（转UTC-5）
    UNION
    SELECT DATE(CONVERT_TZ(LabelPushTime, '+00:00', '-05:00')) AS 日期 FROM LabelPushHistory WHERE LabelPushTime IS NOT NULL -- 标签推送日期（转UTC-5）
    UNION
    SELECT DATE(CONVERT_TZ(ReplaceSuccessTime, '+00:00', '-05:00')) AS 日期 FROM ReplaceHistory WHERE ReplaceSuccessTime IS NOT NULL -- 换单完成日期（转UTC-5）
)
```

### 步骤3：优化主查询联表逻辑
移除所有多余的过滤条件，确保所有有考核时间的订单都能被正确关联：
- 保持`AllDates LEFT JOIN OrderFullInfo`的关联方式
- 移除所有在JOIN条件和WHERE条件中多余的`LabelRate >= 0.8`判断（有考核时间的订单默认已满足标签率≥80%）
- 移除对`FirstScanTime_UTC5`非空的判断，兼容无扫描记录的订单

### 步骤4：全量更新所有指标计算逻辑（严格对齐用户定义）
#### 指标定义对照表
| 指标名称 | 计算逻辑 | 说明 |
|---------|---------|---------|
| 日期 | 自然日时间（UTC-5） | - |
| 当天新增换单数 | 到仓时间是当天的有标签订单总数 | 到仓时间本身为UTC-5，无需转换 |
| 累计要换的总单数 | 有标签并且（当日没有换单成功记录 或者 换单完成时间大于今天）的不重复订单总数 | 按RequestId去重，换单完成时间转换为UTC-5判断 |
| 当天应该换单数 | 考核基准日期是当天 或者 考核截止日期是当天的订单总数 | 考核基准时间、考核截止时间均转换为UTC-5判断 |
| 当日换单完成数 | 换单完成记录时间是当天的包裹数，不包含STOP数 | 换单完成时间转换为UTC-5判断 |
| 当日换单失败数 | 换单非完成记录时间是当天的包裹数 | 换单记录时间转换为UTC-5判断 |
| 当日STOP数 | 换单完成时间是当天并且描述中含有STOP的包裹数 | 换单完成时间转换为UTC-5判断 |
| 24小时换单成功数 | 首次换单完成时间在考核基准时间与考核时间之间的包裹数 | 所有时间均转换为UTC-5后判断时间范围 |
| 当日标签推送数 | 标签推送时间是当天的包裹数 | 标签推送时间转换为UTC-5判断 |
| 当日扫描数 | 扫描时间是当天的扫描历史记录总数 | 扫描时间转换为UTC-5判断 |
| 当天换单完成率 | 当日换单完成数 / (当天应该换单数 + 累计要换的总单数) | - |
| 24小时换单率 | 24小时换单成功数 / 当天应该换单数 | - |
| 数据拉取时间 | 当前时间（UTC-5） | - |

### 步骤5：调整字段输出顺序
按照用户要求的顺序排列输出字段：
1. 日期
2. 当天新增换单数
3. 累计要换的总单数
4. 当天应该换单数
5. 当日换单完成数
6. 当日换单失败数
7. 当日STOP数
8. 24小时换单成功数
9. 当日标签推送数
10. 当日扫描数
11. 当天换单完成率
12. 24小时换单率
13. 数据拉取时间（UTC_5）

### 步骤6：同步更新明细查询SQL
确保`运营指标验证明细查询.sql`的逻辑和汇总SQL完全对齐：
- 同步更新所有指标的计算逻辑
- 保持字段命名一致
- 保留所有明细字段的输出，方便用户手动核对

### 步骤7：验证统计结果
执行汇总SQL查询2026-05-01的「当天应该换单数」，确认结果等于9593，与明细统计结果完全一致。

## 验收标准
1. 5月1日「当天应该换单数」= 9593
2. 所有指标逻辑完全符合用户给出的定义
3. 汇总SQL和明细SQL统计结果完全一致
4. SQL可正常运行无语法错误
5. 所有非到仓时间的统计均已转换为UTC-5时区
6. 累计要换的总单数已按RequestId去重，无重复统计
