-- ============================================================ -- 门店/应用默认项数据迁移诊断(升级脚本) -- ============================================================ -- 背景: -- 本次升级后, 支付下单若未显式传 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 触发。 -- ============================================================ -- ---------------------------- -- 系统终端菜单迁移: 从设备管理移到商户管理(照搬门店 subpage 模式) -- 权限码 device:terminal:system → merchant:terminal -- ---------------------------- UPDATE "public"."iam_perm_menu" SET "pid" = 4040130, "menu_code" = 'merchant:terminal', "i18n_key" = 'menu.payment.merchant.terminal', "icon" = NULL, "hidden" = true, "component" = '/payment/merchant/terminal/SystemTerminalList', "path" = '/payment/merchant/terminal', "sort_no" = 16, "menu_type" = 'subpage' WHERE "id" = 905;