mirror of
https://gitee.com/dromara/dax-pay
synced 2026-08-13 15:55:42 +08:00
- 数据库加部分唯一索引 uk_mch_app_info_default / uk_mch_store_info_default 兜底 - Service.delete 检查默认项, 禁止删除默认应用/门店 - MchAppInfoService.add 首应用自动默认, 与 MchStoreInfoService 对齐 - resolveApp 异常分类: 默认应用不存在 vs 已停用 vs 指定应用异常 - resolveStoreNo 改抛异常 (替代返回 null), 与 resolveApp 策略对齐 - update-datas.sql 提供脏数据/缺默认项诊断查询 - 6 语种 i18n 新增 5 个错误 key
63 lines
2.9 KiB
SQL
63 lines
2.9 KiB
SQL
-- ============================================================
|
|
-- 门店/应用默认项数据迁移诊断(升级脚本)
|
|
-- ============================================================
|
|
-- 背景:
|
|
-- 本次升级后, 支付下单若未显式传 appId / storeNo,
|
|
-- 系统会回落到商户的默认应用/默认门店;
|
|
-- 若默认项不存在或已停用, 将直接抛异常阻断下单(对齐 MchApp 既有策略)。
|
|
-- 风险:
|
|
-- 历史数据中可能存在「从未创建默认应用/默认门店」的商户(如 SQL 直接导入未走入驻流程),
|
|
-- 升级后这些商户的下单会被阻断。
|
|
-- 迁移策略:
|
|
-- 主键(id)与应用号(appId)/门店号(storeNo)由应用层(MyBatis-Plus 雪花 ID / RandomUtil)生成,
|
|
-- SQL 层难以精确复现; 且每个商户的默认应用名/门店名应按当前请求语言生成,
|
|
-- 不适合在 SQL 中硬编码。
|
|
-- 因此本脚本不自动执行数据补建, 仅提供诊断查询, 由运维确认后处理。
|
|
-- ============================================================
|
|
|
|
-- 诊断 1: 查询没有默认应用的商户(升级后这些商户未传 appId 的下单会失败)
|
|
-- SELECT mch.mch_no, mch.mch_name
|
|
-- FROM merchant_info mch
|
|
-- WHERE NOT EXISTS (
|
|
-- SELECT 1 FROM mch_app_info app
|
|
-- WHERE app.mch_no = mch.mch_no
|
|
-- AND app.default_app = TRUE
|
|
-- AND app.deleted = FALSE
|
|
-- )
|
|
-- AND mch.deleted = FALSE;
|
|
|
|
-- 诊断 2: 查询没有默认门店的商户(升级后这些商户未传 storeNo 的下单会失败)
|
|
-- SELECT mch.mch_no, mch.mch_name
|
|
-- FROM merchant_info mch
|
|
-- WHERE NOT EXISTS (
|
|
-- SELECT 1 FROM mch_store_info s
|
|
-- WHERE s.mch_no = mch.mch_no
|
|
-- AND s.default_store = TRUE
|
|
-- AND s.deleted = FALSE
|
|
-- )
|
|
-- AND mch.deleted = FALSE;
|
|
|
|
-- 诊断 3: 查询同商户存在多个默认应用的脏数据(会导致 uk_mch_app_info_default 索引创建失败)
|
|
-- SELECT mch_no, COUNT(*)
|
|
-- FROM mch_app_info
|
|
-- WHERE default_app = TRUE AND deleted = FALSE
|
|
-- GROUP BY mch_no
|
|
-- HAVING COUNT(*) > 1;
|
|
|
|
-- 诊断 4: 查询同商户存在多个默认门店的脏数据(会导致 uk_mch_store_info_default 索引创建失败)
|
|
-- SELECT mch_no, COUNT(*)
|
|
-- FROM mch_store_info
|
|
-- WHERE default_store = TRUE AND deleted = FALSE
|
|
-- GROUP BY mch_no
|
|
-- HAVING COUNT(*) > 1;
|
|
|
|
-- ============================================================
|
|
-- 修复指引(诊断查询有结果时按以下方式处理):
|
|
-- 1. 诊断 3/4 命中(脏数据):
|
|
-- 手动 UPDATE 保留其中一条 default_app/default_store = TRUE, 其余置 FALSE。
|
|
-- 2. 诊断 1/2 命中(缺默认项):
|
|
-- 登录运营端 -> 商户管理 -> 选择对应商户 -> 应用管理/门店管理 ->
|
|
-- 新增应用/门店后调用「设为默认」接口(set-default);
|
|
-- 或通过 MerchantAdminService.createDefaultApp / MchStoreInfoService.createDefaultStore 触发。
|
|
-- ============================================================
|