# Data Model: 可配置支付方式(031-pay-method-config) **Date**: 2026-09-11 | **Spec**: [spec.md](spec.md) | **Research**: [research.md](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) ```sql -- 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)。