Ready for Review
As a 系统开发人员, I want 实现数据概览统计服务, so that 为UI提供准确的统计数据
data_overview_service_mt服务类,提供统计查询方法[x] 创建多租户数据概览统计模块包结构 (AC: 1, 2, 3, 4, 5, 6, 7)
packages/data-overview-module-mt/ (参考:packages/advertisements-module-mt/)@d8d/data-overview-module-mt (参考:packages/advertisements-module-mt/package.json)packages/advertisements-module-mt/tsconfig.json, packages/advertisements-module-mt/vitest.config.ts)src/services/, src/schemas/, src/routes/, src/types/ (参考:packages/advertisements-module-mt/src/)tests/unit/, tests/integration/ (参考:packages/advertisements-module-mt/tests/)[x] 实现数据概览统计服务 (AC: 1, 2, 3, 4, 5)
DataOverviewServiceMt服务类 (参考:packages/advertisements-module-mt/src/services/advertisement.service.ts)getDateRange()方法,支持今日、昨日、最近7天、最近30天、自定义时间范围getSummaryStatistics(),基于史诗009的SQL查询设计pay_type = 'WECHAT')和额度支付(pay_type = 'CREDIT')tenant_id筛选[x] 实现数据验证Schema (AC: 2)
TimeFilterSchema (参考:packages/advertisements-module-mt/src/schemas/advertisement.schema.ts)startDate, endDate (ISO格式日期字符串)[x] 实现API路由 (AC: 1, 7)
src/routes/index.mt.ts (参考:packages/advertisements-module-mt/src/routes/index.ts)GET /api/data-overview/summary - 获取数据概览统计(支持时间筛选)GET /api/data-overview/today - 获取今日实时数据(快速查询)[x] 编写单元测试 (AC: 6)
packages/file-module/tests/unit/file.service.test.ts)tenant_id筛选[x] 编写集成测试 (AC: 6)
packages/advertisements-module-mt/tests/integration/advertisements.integration.test.ts)GET /api/data-overview/summary端点,验证各种时间筛选参数GET /api/data-overview/today端点,验证快速查询功能[x] 配置包依赖和导出 (AC: 1, 7)
packages/advertisements-module-mt/package.json)src/index.mt.ts 导出所有模块接口 (参考:packages/advertisements-module-mt/src/index.ts)packages/advertisements-module-mt/tsconfig.json)packages/advertisements-module-mt/vitest.config.ts)tests/ 文件夹与源码并列(实际使用tests/目录)packages/*-module/tests/unit/**/*.test.tspackages/*-module/tests/integration/**/*.test.ts/api/v1/),保持向后兼容data和pagination字段总销售额和总订单数查询示例:
SELECT
COUNT(*) as total_orders,
SUM(total_amount) as total_sales,
SUM(CASE WHEN pay_type = 'WECHAT' THEN total_amount ELSE 0 END) as wechat_sales,
SUM(CASE WHEN pay_type = 'CREDIT' THEN total_amount ELSE 0 END) as credit_sales,
COUNT(CASE WHEN pay_type = 'WECHAT' THEN 1 END) as wechat_orders,
COUNT(CASE WHEN pay_type = 'CREDIT' THEN 1 END) as credit_orders
FROM orders_mt
WHERE tenant_id = :tenantId
AND order_status IN ('PAID', 'COMPLETED') -- 已支付或已完成状态
AND created_at BETWEEN :startDate AND :endDate
AND deleted_at IS NULL;
packages/
├── @d8d/data-overview-module-mt/ # 数据概览统计模块
│ ├── src/
│ │ ├── services/ # 服务层
│ │ │ ├── data-overview.service.ts
│ │ │ └── index.ts
│ │ ├── schemas/ # 数据验证
│ │ │ ├── time-filter.schema.ts
│ │ │ └── index.ts
│ │ ├── routes/ # API路由
│ │ │ └── index.ts
│ │ ├── types/ # 类型定义
│ │ │ ├── data-overview.types.ts
│ │ │ └── index.ts
│ │ └── index.ts # 主入口文件
│ ├── tests/ # 测试文件
│ ├── tsconfig.json # TypeScript配置
│ ├── vitest.config.ts # 测试配置
│ └── package.json
GET /api/data-overview/summary - 获取数据概览统计
startDate, endDate (ISO格式日期字符串)返回数据:
{
totalSales: number, // 总销售额
totalOrders: number, // 总订单数
wechatSales: number, // 微信支付总金额
wechatOrders: number, // 微信支付订单数
creditSales: number, // 额度支付总金额
creditOrders: number, // 额度支付订单数
todaySales: number, // 今日销售额
todayOrders: number, // 今日订单数
}
GET /api/data-overview/today - 获取今日实时数据(快速查询)
今日:当天00:00:00到23:59:59昨日:前一天00:00:00到23:59:59最近7天:当前时间往前推7天最近30天:当前时间往前推30天自定义时间范围:用户选择的任意时间范围total_amount总和order_status IN ('PAID', 'COMPLETED')order_status != 'CANCELLED'deleted_at IS NULLorders_mt表添加复合索引
(tenant_id, created_at) 用于时间范围查询(tenant_id, pay_type, created_at) 用于支付方式统计orders_mt表获取订单统计数据tenant_id实现数据隔离pay_type字段统计不同支付方式total_amount字段,确保数值精度tenant_id条件packages/data-overview-module-mt/src/services/data-overview.service.mt.tspackages/data-overview-module-mt/src/routes/index.mt.tspackages/data-overview-module-mt/src/schemas/index.mt.tspackages/data-overview-module-mt/src/types/index.mt.tspackages/data-overview-module-mt/src/index.mt.ts (导出所有模块接口)基于现有多租户模块观察:
Mt结尾(如DataOverviewServiceMt)*.mt.ts 或 *.service.tstenantId参数用于租户隔离packages/data-overview-module-mt/tests/ 目录下tests/unit/**/*.test.tstests/integration/**/*.test.ts| Date | Version | Description | Author |
|---|---|---|---|
| 2025-12-26 | 1.0 | 初始故事创建 | Bob (Scrum Master) |
| 2025-12-26 | 1.1 | 实现数据概览统计模块包,完成所有核心功能 | James (Developer) |
此部分由开发代理在实现过程中填写
advertisements-module-mt参考包创建了完整的包结构/api/data-overview/summary和/api/data-overview/today两个端点@d8d/core-module-mt用于认证中间件@hono/zod-openapi提供完整的OpenAPI文档注释tenantId进行数据隔离,符合多租户架构要求创建的文件:
packages/data-overview-module-mt/package.json - 包配置和依赖定义packages/data-overview-module-mt/tsconfig.json - TypeScript配置packages/data-overview-module-mt/vitest.config.ts - Vitest测试配置packages/data-overview-module-mt/src/index.ts - 主入口文件packages/data-overview-module-mt/src/services/data-overview.service.ts - 数据概览统计服务类packages/data-overview-module-mt/src/services/index.ts - 服务导出packages/data-overview-module-mt/src/schemas/index.ts - 数据验证Schemapackages/data-overview-module-mt/src/routes/index.ts - 路由聚合文件packages/data-overview-module-mt/src/routes/summary.mt.ts - 数据概览统计API路由packages/data-overview-module-mt/src/routes/today.mt.ts - 今日数据API路由packages/data-overview-module-mt/src/types/index.ts - 类型定义导出packages/data-overview-module-mt/tests/unit/data-overview.service.test.ts - 数据概览服务单元测试packages/data-overview-module-mt/tests/integration/data-overview-routes.integration.test.ts - 数据概览路由集成测试packages/data-overview-module-mt/tests/utils/test-data-factory.ts - 测试数据工厂修改的文件:
docs/stories/009.001.data-overview-module-mt.story.md - 当前故事文件(更新任务完成状态和开发记录)此部分由QA代理在审查完成后填写