上传源代码版本
This commit is contained in:
195
.trae/documents/24h_rate_validation_fix_plan.md
Normal file
195
.trae/documents/24h_rate_validation_fix_plan.md
Normal file
@@ -0,0 +1,195 @@
|
||||
# 24H换单率验证SQL修复计划
|
||||
|
||||
**日期**:2026-05-16
|
||||
**问题**:汇总统计SQL报错 - `ArrivalFormsWithDate` 表不存在
|
||||
**目标**:找到正确的表名,修复SQL并重新验证
|
||||
|
||||
---
|
||||
|
||||
## 问题诊断
|
||||
|
||||
### 错误信息
|
||||
```
|
||||
1146 - Table 'lr01mainusa.ArrivalFormsWithDate' doesn't exist
|
||||
```
|
||||
|
||||
### 原因分析
|
||||
- `ArrivalFormsWithDate` 是在原SQL中创建的CTE(公用表表达式)
|
||||
- 但在汇总验证SQL中,我们可能没有完整包含这个CTE的定义
|
||||
- 或者表名需要使用其他的到货表
|
||||
|
||||
---
|
||||
|
||||
## 修复方案
|
||||
|
||||
### 方案1:查找正确的到货表名
|
||||
|
||||
需要找到以下表之一:
|
||||
1. `ArrivalForms` - 原始到货表
|
||||
2. `arrival_forms` - 小写版本
|
||||
3. 其他相关的到货表
|
||||
|
||||
可以用以下查询查看可用的表:
|
||||
```sql
|
||||
-- 查找包含"arrival"的表
|
||||
SELECT TABLE_NAME
|
||||
FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE TABLE_SCHEMA = 'lr01mainusa'
|
||||
AND TABLE_NAME LIKE '%arrival%'
|
||||
ORDER BY TABLE_NAME;
|
||||
|
||||
-- 查找包含"form"的表
|
||||
SELECT TABLE_NAME
|
||||
FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE TABLE_SCHEMA = 'lr01mainusa'
|
||||
AND TABLE_NAME LIKE '%form%'
|
||||
ORDER BY TABLE_NAME;
|
||||
```
|
||||
|
||||
### 方案2:查看原始完整SQL中的表名
|
||||
|
||||
检查 `LabelReplaceRepository.cs` 中的完整SQL,看 `ArrivalFormsWithDate` 是如何定义的。
|
||||
|
||||
### 方案3:修复验证SQL
|
||||
|
||||
一旦找到正确的表名,修复SQL的步骤:
|
||||
|
||||
1. **识别正确的表结构**:
|
||||
- 到货表的名称
|
||||
- 日期字段名称(到货时间或到货日期)
|
||||
- 交接单号字段名称(HandoverNumber或其他)
|
||||
|
||||
2. **调整SQL语句**:
|
||||
- 用实际表名替换 `ArrivalFormsWithDate`
|
||||
- 调整字段名称和连接条件
|
||||
|
||||
3. **测试修复后的SQL**:
|
||||
- 先执行 `SELECT` 子句中的单个子查询进行测试
|
||||
- 逐步组建完整查询
|
||||
|
||||
---
|
||||
|
||||
## 详细的修复步骤
|
||||
|
||||
### 步骤1:查找正确的表名
|
||||
|
||||
执行以下查询来发现数据库中存在的表:
|
||||
|
||||
```sql
|
||||
-- 步骤1a:查看所有表
|
||||
SELECT DISTINCT TABLE_NAME
|
||||
FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE TABLE_SCHEMA = 'lr01mainusa'
|
||||
AND TABLE_NAME NOT LIKE 'mysql%'
|
||||
ORDER BY TABLE_NAME
|
||||
LIMIT 50;
|
||||
|
||||
-- 步骤1b:查看label相关的表
|
||||
SELECT DISTINCT TABLE_NAME
|
||||
FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE TABLE_SCHEMA = 'lr01mainusa'
|
||||
AND TABLE_NAME LIKE '%label%'
|
||||
ORDER BY TABLE_NAME;
|
||||
|
||||
-- 步骤1c:检查原SQL中使用的表
|
||||
-- 查看 label_replace_requests 表的结构
|
||||
DESC label_replace_requests;
|
||||
|
||||
-- 步骤1d:查看是否有到货表
|
||||
SELECT DISTINCT TABLE_NAME
|
||||
FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE TABLE_SCHEMA = 'lr01mainusa'
|
||||
AND (TABLE_NAME LIKE '%arrival%'
|
||||
OR TABLE_NAME LIKE '%form%'
|
||||
OR TABLE_NAME LIKE '%handover%')
|
||||
ORDER BY TABLE_NAME;
|
||||
```
|
||||
|
||||
### 步骤2:根据找到的表名修复SQL
|
||||
|
||||
假设找到的表名是 `arrival_forms`(示例),修复方式如下:
|
||||
|
||||
**修改前**:
|
||||
```sql
|
||||
FROM ArrivalFormsWithDate a
|
||||
INNER JOIN label_replace_requests l
|
||||
ON l.BillOfLadingNumber = a.HandoverNumber
|
||||
OR l.MasterPackageNumber = a.HandoverNumber
|
||||
```
|
||||
|
||||
**修改后**:
|
||||
```sql
|
||||
FROM arrival_forms a
|
||||
INNER JOIN label_replace_requests l
|
||||
ON l.BillOfLadingNumber = a.handover_number
|
||||
OR l.MasterPackageNumber = a.handover_number
|
||||
```
|
||||
|
||||
### 步骤3:确认关键字段
|
||||
|
||||
需要确认以下字段在到货表中的实际名称:
|
||||
- 到货日期/时间字段:`到货时间` 还是 `arrival_time` 还是 `arrival_date`?
|
||||
- 交接单号字段:`HandoverNumber` 还是 `handover_number` 还是其他?
|
||||
|
||||
可以用以下查询检查:
|
||||
```sql
|
||||
-- 查看到货表的字段结构
|
||||
DESC arrival_forms; -- 或使用实际的表名
|
||||
|
||||
-- 或使用标准SQL查询
|
||||
SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'lr01mainusa'
|
||||
AND TABLE_NAME = 'arrival_forms' -- 替换为实际表名
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
```
|
||||
|
||||
### 步骤4:调整日期条件
|
||||
|
||||
原SQL使用 `DATE(CONVERT_TZ(a.到货时间, '+00:00', '-05:00'))`
|
||||
|
||||
可能需要调整为:
|
||||
- `DATE(a.arrival_time)` - 如果字段已经是UTC-5
|
||||
- `DATE(CONVERT_TZ(a.arrival_time, '+00:00', '-05:00'))` - 如果需要时区转换
|
||||
- `a.arrival_date` - 如果已经是日期类型
|
||||
|
||||
---
|
||||
|
||||
## 预期的修复结果
|
||||
|
||||
修复完成后,验证SQL应该:
|
||||
- ✅ 能够成功执行
|
||||
- ✅ 返回1行结果(单行汇总)
|
||||
- ✅ 包含所有关键指标:分母、分子详细拆分等
|
||||
- ✅ 数值合理(分母 > 0,分子 ≤ 分母或接近)
|
||||
|
||||
---
|
||||
|
||||
## 备选方案
|
||||
|
||||
如果找不到对应的到货表,可能需要:
|
||||
|
||||
1. **查询原始SQL中的完整CTE**:
|
||||
- 打开 `LabelReplaceRepository.cs`
|
||||
- 复制 `GetDailyLabelStatsChineseAsync()` 中完整的CTE定义
|
||||
- 将完整的WITH...AS...CTE部分合并到验证SQL中
|
||||
|
||||
2. **简化验证SQL**:
|
||||
- 不使用 `ArrivalFormsWithDate`
|
||||
- 直接从基础表(`label_replace_requests` + `arrival_forms` 或其他)重新构建
|
||||
|
||||
---
|
||||
|
||||
## 关键表和字段清单
|
||||
|
||||
需要在修复时确认以下信息:
|
||||
|
||||
| 元素 | 原始假设 | 实际值 | 确认状态 |
|
||||
|------|--------|------|--------|
|
||||
| 到货表 | ArrivalFormsWithDate | ? | 待查 |
|
||||
| 到货日期字段 | 到货时间 | ? | 待查 |
|
||||
| 交接单号字段 | HandoverNumber | ? | 待查 |
|
||||
| 订单表 | label_replace_requests | label_replace_requests | ✓ |
|
||||
| 扫描历史表 | label_scan_history | label_scan_history | ✓ |
|
||||
| 扫描状态表 | OverallScanStatus | ? | 待查 |
|
||||
|
||||
Reference in New Issue
Block a user