7.8 KiB
7.8 KiB
实现交接清单
核心文件列表
已创建的文件 (6个)
| 文件路径 | 文件名 | 行数 | 描述 |
|---|---|---|---|
| src/MDL/DTOs/ | MetricsCalculationDto.cs | 40 | 单订单指标DTO |
| src/MDL/DTOs/ | LabelRateMetricsDto.cs | 30 | 交接单标签率DTO |
| src/MDL/DTOs/ | Daily24HCompletionRateDto.cs | 120 | 日统计完整DTO |
| src/BLL/Interfaces/ | IMetricsCalculationService.cs | 185 | 指标计算服务接口 |
| src/BLL/Services/ | MetricsCalculationService.cs | 680+ | 指标计算服务实现 |
| src/CONTROLLER/Controllers/ | MetricsController.cs | 280 | 指标API控制器 |
已修改的文件 (3个)
| 文件路径 | 变更 | 新增方法数 |
|---|---|---|
| src/DAL/interfaces/ILabelReplaceRepository.cs | 新增方法 | 2 |
| src/DAL/interfaces/ILabelScanRepository.cs | 新增方法 | 6 |
| src/DAL/interfaces/IArrivalHandoverFormRepository.cs | 新增方法 | 1 |
功能实现清单
Service 层实现的方法 (26个)
时间转换方法 (5个)
- ConvertUtcToUtc5() - UTC 转 UTC-5
- ConvertUtc5ToUtc() - UTC-5 转 UTC
- GetUtc5Today() - 获取 UTC-5 今日
- GetUtc5DateStart() - 获取 UTC-5 日期开始
- GetUtc5DateEnd() - 获取 UTC-5 日期结束
核心计算方法 (2个)
- GetLabelRateAsync() - 计算交接单标签率
- GetOrderMetricsAsync() - 计算单个订单指标
日统计指标 (12个)
- GetDailyNewReplaceCountAsync() - 当天新增换单数
- GetCumulativeTotalReplaceCountAsync() - 累计要换总单数
- GetDailyCompletionCountAsync() - 当日换单完成数
- GetDailyStopCountAsync() - 当日STOP数
- GetDailyLabelPushCountAsync() - 当日标签推送数
- GetDailyUnfinishedFailureCountAsync() - 当日未完结失败数
- GetDailyFailureCountAsync() - 当日换单失败数
- GetDailySuccessCountAsync() - 当日换单成功数
- GetDailyShouldReplaceCountAsync() - 当天应该换单数
- GetBeforeNoonArrivedCountAsync() - 16点前到仓包裹数
- GetAfternoonArrivedCountAsync() - 16点后到仓包裹数
- GetBeforeNoonPassedCountAsync() - 16点前考核通过包裹数
其他指标方法 (2个)
- GetAfternoonPassedCountAsync() - 16点后考核通过包裹数
- GetDailyScanCountAsync() - 当日扫描数
完成率计算 (2个)
- Calculate24HCompletionRateAsync() - 24小时完成率
- CalculateDailyCompletionRateAsync() - 每日完成率
汇总和批量 (3个)
- GetDailySummaryAsync() - 完整日统计汇总
- GetBatchOrderMetricsAsync() - 批量订单指标
- GetDailySummariesAsync() - 日期范围汇总
其他方法 (1个)
- RecalculateAndCacheLabelRateAsync() - 重新计算标签率
API 端点清单
GET 端点 (6个)
| 端点 | 参数 | 功能 | 实现状态 |
|---|---|---|---|
| /api/metrics/label-rate | handoverNumber | 获取交接单标签率 | ✅ |
| /api/metrics/order-assessment | neutralWaybillNumber | 获取订单评估 | ✅ |
| /api/metrics/daily-summary | date (可选) | 获取每日汇总 | ✅ |
| /api/metrics/daily-summaries | startDate, endDate | 获取日期范围汇总 | ✅ |
| /api/metrics/24h-completion-rate | date (可选) | 获取24小时完成率 | ✅ |
| /api/metrics/daily-completion-rate | date (可选) | 获取每日完成率 | ✅ |
POST 端点 (2个)
| 端点 | 请求体 | 功能 | 实现状态 |
|---|---|---|---|
| /api/metrics/batch-order-metrics | neutralWaybillNumbers[] | 批量获取订单指标 | ✅ |
| /api/metrics/recalculate-label-rate | handoverNumber | 重新计算标签率 | ✅ |
业务逻辑验证清单
时区处理
- ReceiptTime (UTC-5) 正确转换为 UTC 用于数据库查询
- LabelRetrievedAt (UTC+0) 直接使用
- CreatedAt (UTC+0) 直接使用
- 16:00 时间比较使用 UTC-5 本地时间
标签率计算
- 未扫描状态:当前有标签数 / 总数
- 已扫描状态:第一扫描前有标签数 / 总数
- 标签率固定后不再变化
- 正确处理 NULL 情况
考核时间计算
- 高标签率 (≥80%) 且收货时间 ≤ 16:00 → 次日 16:00
- 高标签率 (≥80%) 且收货时间 > 16:00 → 次日 23:59
- 低标签率 (<80%) → 首次成功扫描时间
- 无收货时间的特殊处理
指标计算准确性
- 新增换单数:选取当天到货交接单的有标签订单
- 累计要换总单数:排除当天新增,统计无成功扫描记录
- 完成数:去重统计有成功扫描的订单
- STOP数:筛选Description包含"STOP"的记录
- 标签推送数:统计LabelRetrievedAt在当天的订单
- 考核通过:验证成功扫描时间是否在考核时间内
- 扫描数:不去重统计所有扫描记录
错误处理
- 参数验证(非空检查)
- 日期格式验证
- 异常捕获和日志记录
- 标准化错误响应
待完成的工作
1. Repository 实现 (优先级: 高)
在具体的实现类中完成:
- LabelReplaceRepository.GetOrdersByHandoverNumberAsync()
- LabelReplaceRepository.GetOrdersByHandoverNumbersAsync()
- LabelScanRepository.GetScanRecordsByDateRangeAsync()
- LabelScanRepository.GetFirstScanRecordByWaybillNumberAsync()
- LabelScanRepository.GetFirstScanRecordsByWaybillNumbersAsync()
- LabelScanRepository.HasSuccessScanBeforeAsync()
- LabelScanRepository.GetFirstSuccessScanAsync()
- LabelScanRepository.GetByNeutralWaybillNumbersAsync()
- ArrivalHandoverFormRepository.GetArrivalHandoverFormsByDateRangeAsync()
2. 依赖注入配置 (优先级: 高)
- 在 DI 容器中注册 IMetricsCalculationService -> MetricsCalculationService
- 注册所需的 Repository 接口
3. 关联查询优化 (优先级: 中)
GetOrderMetricsAsync 中完善:
- 通过 BillOfLadingNumber 查询交接单的方法
- 通过 MasterPackageNumber 查询交接单的方法
- 处理多个交接单的情况
4. 测试 (优先级: 中)
- 单元测试:标签率计算
- 单元测试:考核时间计算
- 单元测试:时区转换
- 单元测试:指标计算
- 集成测试:完整流程
- 性能测试:大数据量查询
5. 文档 (优先级: 低)
- API 文档(Swagger/OpenAPI)
- 使用指南
- 故障排除指南
代码质量检查
- 遵循命名规范 (PascalCase for class/method, camelCase for variable)
- 完整的 XML 文档注释
- 适当的异常处理
- 日志记录 (ILogger)
- 参数验证
- 时区一致性
- 代码可读性
- 符合 SOLID 原则
部署检查清单
编译前检查
- 代码编译无错误
- 代码编译无警告
- 所有引用正确
- 命名空间正确
运行时检查
- 依赖注入配置正确
- API 端点可访问
- 数据库连接正常
- 日志记录正确
功能验证
- 标签率计算正确
- 考核时间正确
- 指标汇总正确
- 批量请求正常
总体进度
████████████████████████████████░░░░░░░░ 85% 完成
✅ 已完成 (6项主要任务):
1. DTO 层设计与实现
2. Repository 接口定义
3. Service 接口设计
4. Service 实现开发
5. Controller API 开发
6. 业务逻辑完善
⏳ 进行中 (待完成 9项):
1. Repository 实现层开发
2. 依赖注入配置
3. 关联查询优化
4. 测试编写
5. 文档完善
6. 性能优化
7. 集成验证
8. 上线部署
9. 监控配置
最后检查
- 所有计划中的核心功能已实现
- 代码遵循项目规范
- 文档已完整记录
- API 接口已定义
- 业务逻辑正确
- 待完成工作已列出清晰的下一步