feat: 实现订单支付功能模块
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m36s

- 新增订单管理、支付回调、购买验证等核心服务
- 实现订单、订单项目的数据存储层和 API 接口
- 添加订单数据库迁移和 DTO 定义
- 更新 API 文档和路由配置
- 同步 3 个新规范到主规范库(订单管理、订单支付、套餐购买验证)
- 完成 OpenSpec 变更归档

Ultraworked with Sisyphus
This commit is contained in:
2026-01-28 22:12:15 +08:00
parent a945a4f554
commit dfcf16f548
39 changed files with 3795 additions and 126 deletions

View File

@@ -0,0 +1,90 @@
-- 删除旧的订单表(如果存在)
DROP TABLE IF EXISTS tb_order CASCADE;
-- 创建订单表
CREATE TABLE tb_order (
id BIGSERIAL PRIMARY KEY,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
deleted_at TIMESTAMPTZ,
creator BIGINT NOT NULL DEFAULT 0,
updater BIGINT NOT NULL DEFAULT 0,
-- 订单基础信息
order_no VARCHAR(30) NOT NULL,
order_type VARCHAR(20) NOT NULL,
-- 买家信息
buyer_type VARCHAR(20) NOT NULL,
buyer_id BIGINT NOT NULL,
-- 关联资源
iot_card_id BIGINT,
device_id BIGINT,
-- 金额信息
total_amount BIGINT NOT NULL,
-- 支付信息
payment_method VARCHAR(20),
payment_status INT NOT NULL DEFAULT 1,
paid_at TIMESTAMPTZ,
-- 佣金信息
commission_status INT NOT NULL DEFAULT 1,
commission_config_version INT NOT NULL DEFAULT 0
);
-- 添加表注释
COMMENT ON TABLE tb_order IS '订单表';
COMMENT ON COLUMN tb_order.order_no IS '订单号(ORD+时间戳+6位随机数)';
COMMENT ON COLUMN tb_order.order_type IS '订单类型 single_card-单卡购买 device-设备购买';
COMMENT ON COLUMN tb_order.buyer_type IS '买家类型 personal-个人客户 agent-代理商';
COMMENT ON COLUMN tb_order.buyer_id IS '买家ID(个人客户ID或店铺ID)';
COMMENT ON COLUMN tb_order.iot_card_id IS 'IoT卡ID(单卡购买时有值)';
COMMENT ON COLUMN tb_order.device_id IS '设备ID(设备购买时有值)';
COMMENT ON COLUMN tb_order.total_amount IS '订单总金额(分)';
COMMENT ON COLUMN tb_order.payment_method IS '支付方式 wallet-钱包 wechat-微信 alipay-支付宝';
COMMENT ON COLUMN tb_order.payment_status IS '支付状态 1-待支付 2-已支付 3-已取消 4-已退款';
COMMENT ON COLUMN tb_order.paid_at IS '支付时间';
COMMENT ON COLUMN tb_order.commission_status IS '佣金状态 1-待计算 2-已计算';
COMMENT ON COLUMN tb_order.commission_config_version IS '佣金配置版本(订单创建时快照)';
-- 创建索引
CREATE UNIQUE INDEX idx_order_no ON tb_order(order_no) WHERE deleted_at IS NULL;
CREATE INDEX idx_order_buyer ON tb_order(buyer_type, buyer_id);
CREATE INDEX idx_order_payment_status ON tb_order(payment_status);
CREATE INDEX idx_order_iot_card_id ON tb_order(iot_card_id) WHERE iot_card_id IS NOT NULL;
CREATE INDEX idx_order_device_id ON tb_order(device_id) WHERE device_id IS NOT NULL;
CREATE INDEX idx_order_deleted_at ON tb_order(deleted_at);
-- 创建订单明细表
CREATE TABLE tb_order_item (
id BIGSERIAL PRIMARY KEY,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
deleted_at TIMESTAMPTZ,
creator BIGINT NOT NULL DEFAULT 0,
updater BIGINT NOT NULL DEFAULT 0,
order_id BIGINT NOT NULL,
package_id BIGINT NOT NULL,
package_name VARCHAR(100) NOT NULL,
quantity INT NOT NULL DEFAULT 1,
unit_price BIGINT NOT NULL,
amount BIGINT NOT NULL
);
-- 添加表注释
COMMENT ON TABLE tb_order_item IS '订单明细表';
COMMENT ON COLUMN tb_order_item.order_id IS '订单ID';
COMMENT ON COLUMN tb_order_item.package_id IS '套餐ID';
COMMENT ON COLUMN tb_order_item.package_name IS '套餐名称(快照)';
COMMENT ON COLUMN tb_order_item.quantity IS '数量';
COMMENT ON COLUMN tb_order_item.unit_price IS '单价(分)';
COMMENT ON COLUMN tb_order_item.amount IS '小计金额(分)';
-- 创建索引
CREATE INDEX idx_order_item_order_id ON tb_order_item(order_id);
CREATE INDEX idx_order_item_package_id ON tb_order_item(package_id);
CREATE INDEX idx_order_item_deleted_at ON tb_order_item(deleted_at);