-- 乐收赢「收款链接」(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 '更新时间';