data-model.md 4.7 KB

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=1info_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)。