Data Model: 可配置支付方式(031-pay-method-config)
Date: 2026-09-11 | Spec: spec.md | Research: research.md
所有 DDL 追加到 updatesql/sql.md(标注日期与用途),由开发者手动执行,不在代码/迁移脚本中自动执行。
1. 新表 payment_method_config(平台支付方式开关)
| 列 |
类型 |
说明 |
| id |
BIGINT AUTO_INCREMENT PK |
|
| method_code |
VARCHAR(32) NOT NULL |
支付方式代码:COD / CARD_OMG / LINE_PAY / OFFLINE_TRANSFER(组代码,非 payType 数值) |
| scope |
VARCHAR(32) NOT NULL |
维度:MERCHANT(商家餐饮单)/ RIDER_FLASH(骑手闪送) |
| enabled |
TINYINT NOT NULL DEFAULT 1 |
1=开 0=关 |
| sort |
INT NOT NULL DEFAULT 0 |
平台设置页展示排序 |
| update_by |
BIGINT |
最后操作管理员 |
| update_time / create_time |
DATETIME |
|
- 唯一键:
uk(method_code, scope)
- 缺行语义 = 开启:表为空时系统行为与现状完全一致;平台页保存时才 upsert 行;新增支付方式代码无需初始化数据。
- 方式×维度矩阵初始仅需可配的行;
CARD_OMG 组 = payType 2+5,开关联动;COD = payType 1;LINE_PAY = 3;OFFLINE_TRANSFER = 6。现金(4) 不建行不纳入。
- RIDER_FLASH 维度可配集合:COD / LINE_PAY / OFFLINE_TRANSFER(闪送无线上卡支付)。
2. info_user 加两列(收款方选择)
| 列 |
类型 |
说明 |
| pay_methods |
VARCHAR(128) NULL |
商家接受的支付方式组代码 CSV(如 COD,CARD_OMG);NULL/空 = 全部启用(存量零变化) |
| flash_pay_methods |
VARCHAR(128) NULL |
骑手接受的闪送收款方式 CSV;NULL/空 = 平台开放的全部 |
- 商家主账号级语义:读写在
info_user 主账号行;查询时连锁门店经 pos_store.user_id 定位主账号(与 027 bankInfo 同路径)。
- 保存时服务端校验值域 ∈ 平台该维度当前开放集合之外仍可保存(平台后关不影响已存值,实时按闸门算),但必须是组合法代码。
3. 新表 info_bank_card(收款银行卡)
| 列 |
类型 |
说明 |
| id |
BIGINT AUTO_INCREMENT PK |
|
| user_id |
BIGINT NOT NULL |
归属(商家主账号 / 骑手),索引 |
| bank_name |
VARCHAR(64) NOT NULL |
银行名称(字典 taiwan_bank_list 中文名) |
| account_no |
VARCHAR(64) NOT NULL |
银行账号 |
| account_name |
VARCHAR(64) NOT NULL |
户名 |
| is_active |
TINYINT NOT NULL DEFAULT 0 |
1=启用;同一 user 同时最多一张启用(服务层事务保证:启用新卡同事务停旧卡) |
| create_time / update_time |
DATETIME |
|
- 商家/骑手通用,不做 user_type 冗余(归属即 info_user)。
- 不加分行栏位(Assumption,可后补)。
4. flash_delivery_order 加一列(收款状态)
| 列 |
类型 |
说明 |
| payment_status |
TINYINT NOT NULL DEFAULT 0 |
0=未收款 1=骑手已确认收款 |
- 支付方式复用现有
pay_type 列(值域扩展为平台闪送维度开放集合,当前已存 4/6),不新增支付方式列。
- 确认收款仅更新 payment_status + 写
flash_delivery_order_log(operator_type=RIDER),不改订单状态,不阻塞送达/完成。
5. 027 存量迁移(一次性 SQL,入 updatesql/sql.md)
-- 031 027银行三字段迁移为启用卡
INSERT INTO info_bank_card (user_id, bank_name, account_no, account_name, is_active, create_time)
SELECT user_id, bank_name, bank_account_no, bank_account_name, 1, NOW()
FROM info_user
WHERE user_id IS NOT NULL AND bank_name IS NOT NULL AND bank_name <> ''
AND bank_account_no IS NOT NULL AND bank_account_no <> ''
AND bank_account_name IS NOT NULL AND bank_account_name <> '';
- 迁移后
bankInfo 改读 info_bank_card is_active=1,info_user 旧三字段保留不删(App 端商家审核资料等仍引用)。
- 就绪度判据同步切换:
OFFLINE_TRANSFER 就绪 = 存在启用卡。
6. 就绪度判定(不落表,服务层实现)
| 方式 |
就绪条件(门店/收款方) |
| CARD_OMG |
门店 pos_store_omg 存在启用凭证 |
| LINE_PAY |
门店 pos_store_line_pay 存在启用凭证 |
| OFFLINE_TRANSFER |
收款方 info_bank_card 存在 is_active=1 的卡 |
| COD |
无就绪度要求(恒满足) |
7. 实体/映射层级
按全栈字段清单:ruoyi-system domain(新实体 PaymentMethodConfig / InfoBankCard + InfoUser / FlashDeliveryOrder 加字段)→ mapper(MyBatis-Plus BaseMapper + 必要自定义 SQL)→ ruoyi-admin service/controller → 前端。resultMap 如涉及 XML 同步(本表预期纯 MyBatis-Plus,无 XML)。