| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- -- 乐收赢「收款链接」(checkout)—— 建表脚本
- -- 【注意】本脚本未经执行。本工程**未接 Flyway**(pom 无依赖、yml 无配置),
- -- 迁移脚本由人工按版本号顺序执行 —— 执行不可逆,需用户放行。
- --
- -- 这张表存的是**一条链接怎么找到那个商户**,不存金额、不存订单 —— 每笔支付都是
- -- 打开链接的人当场输金额后新建的一张 `pay_lsy_order`(前缀 CS,见
- -- LeshouyingCheckoutController)。所以本表与订单是一对多,且**不随支付变化**。
- CREATE TABLE IF NOT EXISTS pay_lsy_checkout_link (
- id BIGINT PRIMARY KEY,
- tenant_id BIGINT NOT NULL,
- mch_no VARCHAR(32) NOT NULL,
- token VARCHAR(64) NOT NULL,
- merchant_name VARCHAR(128),
- status VARCHAR(16) NOT NULL DEFAULT 'ENABLED',
- -- description 这一列**不用**,但必须有:实体基类 PaymentBaseEntity 带 description,
- -- MyBatis-Plus 生成 SELECT 时按 TableInfo 展开全列 ⇒ 库里缺这一列会让每次查询报「列不存在」。
- description VARCHAR(255),
- created_time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
- updated_time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now()
- );
- -- ★ 全局唯一(不含 tenant_id)—— 这不是洁癖,是**免登录读取的唯一凭据**:
- -- 打开链接的人没有登录态,我们只能拿 token 这一列去找那一行。按本仓通则
- -- (TenantInnerInterceptor 里 CONDITIONAL_TABLES 上方那段「怎么算满足」),
- -- 无认证定位走 (甲)·预防 —— 只用**有全局唯一约束**的列定位,多行在 schema 层就建不出来。
- -- ★ 别把它收窄成 (tenant_id, token):那就等于把「未认证读不带租户条件」这件事
- -- 忘掉了 —— 收窄之后这个索引对无认证查询提供**零**保护,恰是本仓
- -- uk_lsy_order_out_trade_no / uk_lsy_refund_out_refund_no 两条索引注释里记着的那个陷阱。
- CREATE UNIQUE INDEX IF NOT EXISTS uk_lsy_checkout_token
- ON pay_lsy_checkout_link (token);
- -- 一个商户一条链接(管理端按钮点两次返回同一条 —— 链接要**永久复用**,
- -- 不该每点一次多一条、更不该让客户手上的旧链接失效)。
- -- 这条索引只服务于**已认证**的发放路径(那里一定带 tenant_id),不承担无认证定位。
- CREATE UNIQUE INDEX IF NOT EXISTS uk_lsy_checkout_tenant_mch
- ON pay_lsy_checkout_link (tenant_id, mch_no);
- COMMENT ON TABLE pay_lsy_checkout_link IS '乐收赢收款链接(一商户一条;打开 /#/checkout/{token} 输金额后调真实主扫 /v3/qrpay)';
- COMMENT ON COLUMN pay_lsy_checkout_link.id IS '主键ID(MyBatis-Plus ASSIGN_ID 雪花)';
- COMMENT ON COLUMN pay_lsy_checkout_link.tenant_id IS '租户ID(发放时取自认证上下文,不来自请求体)';
- COMMENT ON COLUMN pay_lsy_checkout_link.mch_no IS '乐收赢商户号(钱进哪个商户由它决定)';
- COMMENT ON COLUMN pay_lsy_checkout_link.token IS '链接令牌(全局唯一;URL 里只有它,不暴露 mch_no/租户)';
- COMMENT ON COLUMN pay_lsy_checkout_link.merchant_name IS '商户显示名快照(发放/重取时刷新;顾客页顶部就显示它)';
- COMMENT ON COLUMN pay_lsy_checkout_link.status IS '状态:ENABLED 可用 / DISABLED 停用(resolve 时校验,停用即 404)';
- COMMENT ON COLUMN pay_lsy_checkout_link.description IS '未使用(列存在只为对齐实体基类 PaymentBaseEntity,见其上方注释)';
- COMMENT ON COLUMN pay_lsy_checkout_link.created_time IS '创建时间';
- COMMENT ON COLUMN pay_lsy_checkout_link.updated_time IS '更新时间';
|