In Progress
As a 出行用户 I want 能够创建订单并完成支付 so that 确认出行安排
packages/server/src/api/orders/create.ts - 订单创建API(非通用CRUD路由)packages/server/src/modules/payment/payment.service.ts - 支付服务(仅支持微信小程序支付,仅支持v3密钥)packages/server/src/api/payment/create.ts - 支付创建API(非通用CRUD路由,仅支持微信小程序支付,仅支持v3密钥)mini-demo/pages/order/ 到 mini/src/pages/order/mini-demo/pages/pay-success/ 到 mini/src/pages/pay-success/.js/.wxml/.wxss → .tsx (React + TypeScript)handleBookRoute 函数)基于 [docs/architecture/data-model-schema-changes.md#订单模型],订单实体已创建,包含以下关键属性:
订单实体关键属性 [Source: architecture/data-model-schema-changes.md#订单模型]:
id: number - 主键标识符userId: number - 用户IDrouteId: number - 路线IDpassengerCount: number - 乘客数量totalAmount: number - 订单总金额status: string - 订单状态(待支付、待出发、行程中、已完成、已取消)paymentStatus: string - 支付状态passengerSnapshots: JSON - 乘客信息快照数组(下单时的多个乘客信息)routeSnapshot: JSON - 路线信息快照(下单时的路线信息)createdAt: Date - 创建时间订单状态枚举定义 [Source: architecture/data-model-schema-changes.md#枚举定义]:
export enum OrderStatus {
PENDING_PAYMENT = '待支付',
WAITING_DEPARTURE = '待出发',
IN_PROGRESS = '行程中',
COMPLETED = '已完成',
CANCELLED = '已取消'
}
支付状态枚举定义 [Source: architecture/data-model-schema-changes.md#枚举定义]:
export enum PaymentStatus {
PENDING = '待支付',
PAID = '已支付',
FAILED = '支付失败',
REFUNDED = '已退款'
}
基于 [docs/architecture/order-processing-workflow.md#下单流程],订单创建和支付流程必须遵循以下流程:
下单流程 [Source: architecture/order-processing-workflow.md#下单流程]:
支付流程 [Source: architecture/order-processing-workflow.md#支付流程]:
基于 [docs/architecture/payment-integration-design.md#微信支付集成],微信支付集成必须遵循以下设计:
重要限制: 本支付集成仅支持微信支付v3密钥,不支持v2密钥或其他支付方式。
支付服务接口设计 [Source: architecture/payment-integration-design.md#支付服务接口设计]:
interface CreatePaymentRequest {
orderId: number; // 订单ID
totalAmount: number; // 支付金额(分)
description: string; // 支付描述
openid?: string; // 用户OpenID
}
interface CreatePaymentResponse {
paymentId: string; // 支付ID
timeStamp: string; // 时间戳
nonceStr: string; // 随机字符串
package: string; // 预支付ID
signType: string; // 签名类型
paySign: string; // 签名
}
支付状态管理 [Source: architecture/payment-integration-design.md#支付状态管理]:
export enum PaymentStatus {
PENDING = '待支付', // 订单创建,等待支付
PROCESSING = '支付中', // 支付进行中
SUCCESS = '支付成功', // 支付成功
FAILED = '支付失败', // 支付失败
REFUNDED = '已退款', // 已退款
CLOSED = '已关闭' // 支付关闭
}
基于 [docs/architecture/order-processing-workflow.md#数据快照机制],订单必须保存以下快照信息:
快照内容 [Source: architecture/order-processing-workflow.md#快照内容]:
快照目的 [Source: architecture/order-processing-workflow.md#快照目的]:
基于 [docs/architecture/source-tree.md#实际项目结构],所有订单和支付相关文件必须放置在指定位置:
后端文件位置 [Source: architecture/source-tree.md#实际项目结构]:
packages/server/src/api/orders/index.tspackages/server/src/modules/payment/payment.service.tspackages/server/src/modules/orders/order.entity.tspackages/server/src/modules/orders/order.schema.ts小程序文件位置 [Source: architecture/source-tree.md#实际项目结构]:
mini/src/pages/order/order.tsxmini/src/pages/pay-success/pay-success.tsx基于 [docs/architecture/mini-demo-migration-guide.md],订单相关页面迁移必须遵循以下规范:
迁移源文件 [Source: mini-demo/pages/]:
mini-demo/pages/order/order.js + order.wxml + order.wxssmini-demo/pages/pay-success/pay-success.js + pay-success.wxml + pay-success.wxss技术转换要求 [Source: architecture/mini-demo-migration-guide.md#技术栈转换]:
.js/.wxml/.wxss → .tsx (React + TypeScript)样式迁移规范 [Source: architecture/mini-demo-migration-guide.md#样式转换规范]:
基于 [docs/architecture/tech-stack.md#现有技术栈维护],必须使用项目标准技术栈:
后端框架 [Source: architecture/tech-stack.md#现有技术栈维护]:
小程序框架 [Source: architecture/tech-stack.md#现有技术栈维护]:
基于 [docs/architecture/coding-standards.md#通用crud开发规范],必须遵循编码标准:
实体设计 [Source: architecture/coding-standards.md#通用crud开发规范]:
comment 配置,说明字段用途createdAt 和 updatedAt 时间戳Schema设计 [Source: architecture/coding-standards.md#通用crud开发规范]:
.optional() 和 .nullable() 明确字段可选性基于 [docs/architecture/non-generic-crud-standards.md#业务操作路由],订单创建API必须遵循非通用CRUD路由规范:
业务操作路由规范 [Source: architecture/non-generic-crud-standards.md#业务操作路由]:
POST 方法表示动作执行/(在订单模块下)文件组织规范 [Source: architecture/non-generic-crud-standards.md#文件组织]:
create.ts)index.ts 中统一导出代码结构规范 [Source: architecture/non-generic-crud-standards.md#代码结构]:
订单创建路由代码模板 [Source: architecture/non-generic-crud-standards.md#代码模板]:
import { createRoute, OpenAPIHono } from '@hono/zod-openapi';
import { authMiddleware } from '../../middleware/auth.middleware';
import { OrderService } from '../../modules/orders/order.service';
import { OrderCreateSchema, OrderResponseSchema } from '../../modules/orders/order.schema';
// 订单创建路由定义
const createOrderRoute = createRoute({
method: 'post',
path: '/',
middleware: [authMiddleware],
request: {
body: {
content: {
'application/json': { schema: OrderCreateSchema }
}
}
},
responses: {
201: {
description: '订单创建成功',
content: { 'application/json': { schema: OrderResponseSchema } }
},
400: { description: '参数错误' },
401: { description: '未授权' },
500: { description: '服务器错误' }
}
});
const app = new OpenAPIHono()
.openapi(createOrderRoute, async (c) => {
try {
const user = c.get('user');
const orderData = c.req.valid('json');
const orderService = new OrderService();
const order = await orderService.createOrder(user.id, orderData);
return c.json(order, 201);
} catch (error) {
console.error('订单创建失败:', error);
return c.json({
code: 500,
message: error instanceof Error ? error.message : '订单创建失败'
}, 500);
}
});
export default app;
测试要求 [Source: architecture/testing-strategy.md#主项目测试体系]:
web/tests/unit/, web/tests/integration/, web/tests/e2e/ 目录mini/tests/ 目录具体测试要求 [Source: architecture/testing-strategy.md#测试金字塔策略]:
| Date | Version | Description | Author |
|---|---|---|---|
| 2025-10-23 | 1.0 | 初始故事创建,基于史诗005 US005-08需求 | Bob (Scrum Master) |
| 2025-10-23 | 1.1 | 故事验证通过,状态更新为Approved | Sarah (Product Owner) |
| 2025-10-23 | 1.2 | 完成订单创建API端点和集成测试实现 | James (Developer) |
| 2025-10-23 | 1.3 | 完成微信小程序支付集成服务和API端点实现 | James (Developer) |
| 2025-10-23 | 1.4 | 完成支付集成测试并修复微信支付SDK mock问题 | James (Developer) |
此部分由开发代理在实施过程中填写
已创建/修改的文件:
关键实现:
parseWithAwait 中间件确保API响应格式一致性此部分由QA代理在审查完成后填写