Ready for Review
As a 系统架构师, I want 数据概览模块能正确统计订单数据, so that 确保统计数据的准确性
pay_type = 'WECHAT'的订单pay_type = 'CREDIT'的订单order_status为已支付状态)total_amount字段tenant_id筛选[x] 集成订单模块数据源 (AC: 1, 2, 3, 4, 5)
orders_mt表结构和现有数据DataOverviewServiceMt中实现订单数据统计查询tenant_id条件[x] 实现支付方式分类统计 (AC: 2)
pay_type字段筛选逻辑[x] 实现订单状态筛选 (AC: 3)
order_status IN ('PAID', 'COMPLETED') (通过payState = 2实现)order_status != 'CANCELLED' (通过cancelTime IS NULL实现)deleted_at IS NULL (不适用,实体无此字段)[x] 优化数据库查询性能 (AC: 6)
orders_mt表添加复合索引:(tenant_id, created_at)orders_mt表添加复合索引:(tenant_id, pay_type, created_at)[x] 增强数据缓存策略 (AC: 7)
[x] 编写和更新测试 (AC: 1, 2, 3, 4, 5, 6, 7)
DataOverviewServiceMt单元测试,覆盖订单数据统计逻辑@d8d/data-overview-module-mt包已创建,包含DataOverviewServiceMt服务类GET /api/data-overview/summary和GET /api/data-overview/today两个端点@d8d/data-overview-ui-mt包已创建,提供数据概览面板界面tenantId进行数据隔离,符合多租户架构要求orders_mt表结构 (基于现有订单模块):
CREATE TABLE orders_mt (
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
tenant_id INT UNSIGNED NOT NULL COMMENT '租户ID',
user_id INT UNSIGNED NOT NULL COMMENT '用户ID',
order_no VARCHAR(64) NOT NULL COMMENT '订单编号',
total_amount DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '订单总金额',
pay_type VARCHAR(20) NOT NULL COMMENT '支付方式: WECHAT, CREDIT, ...',
order_status VARCHAR(20) NOT NULL COMMENT '订单状态: PENDING, PAID, COMPLETED, CANCELLED, ...',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL COMMENT '软删除时间',
INDEX idx_tenant_created (tenant_id, created_at),
INDEX idx_tenant_status (tenant_id, order_status),
INDEX idx_tenant_pay_type (tenant_id, pay_type)
) COMMENT='多租户订单表';
总销售额和总订单数查询示例:
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/data-overview-module-mt/packages/data-overview-module-mt/src/services/data-overview.service.tspackages/orders-module-mt/ (数据源)packages/data-overview-module-mt/tests/ 目录下orders_mt表获取订单统计数据tenant_id实现数据隔离pay_type字段统计不同支付方式total_amount字段,确保数值精度tenant_id条件packages/data-overview-module-mt/tests/ 目录下tests/unit/**/*.test.tstests/integration/**/*.test.ts| Date | Version | Description | Author |
|---|---|---|---|
| 2025-12-30 | 1.0 | 初始故事创建 | Bob (Scrum Master) |
| 2025-12-30 | 1.1 | 实施故事:集成订单数据统计,添加索引、取消订单排除逻辑、测试 | James (Dev Agent) |
此部分由开发代理在实现过程中填写
Claude Sonnet 4.5 (claude-sonnet-4-5-20250929)
无
amount对应total_amount,payType整数(1=积分支付/微信支付,3=额度支付),payState=2对应支付成功状态,cancelTime用于排除取消订单OrderMt实体添加复合索引:(tenantId, createdAt)和(tenantId, payType, createdAt)DataOverviewServiceMt.calculateStatistics()和getTodayStatistics()方法,添加cancelTime IS NULL条件排除已取消订单payType=1,额度支付=payType=3)payState=2且cancelTime IS NULL)amount字段)tenantId条件)packages/orders-module-mt/src/entities/order.mt.entity.ts - 添加复合索引(tenantId, createdAt)和(tenantId, payType, createdAt)packages/data-overview-module-mt/src/services/data-overview.service.ts - 在统计查询中添加cancelTime IS NULL条件排除已取消订单packages/data-overview-module-mt/tests/integration/data-overview-routes.integration.test.ts - 添加集成测试验证取消订单排除逻辑docs/stories/009.003.integrate-order-data-statistics.story.md - 更新任务状态和开发者代理记录此部分由QA代理在审查完成后填写