|
@@ -122,6 +122,16 @@ SELECT conname, contype FROM pg_constraint
|
|
|
-- description 自述:「租户级映射(Task5 Step1 端到端验证用)」
|
|
-- description 自述:「租户级映射(Task5 Step1 端到端验证用)」
|
|
|
-- ⇒ 它是 lsy-tenant-level.sql 落的**租户级映射行**(受 uk_lsy_merchant_tenant_level 约束,每租户至多一行)。
|
|
-- ⇒ 它是 lsy-tenant-level.sql 落的**租户级映射行**(受 uk_lsy_merchant_tenant_level 约束,每租户至多一行)。
|
|
|
--
|
|
--
|
|
|
|
|
+-- ★ 2026-09-23 补测:删任意一行都**不会**让别的表悬空 ——
|
|
|
|
|
+-- information_schema 里**没有任何外键**指向 pay_lsy_merchant;
|
|
|
|
|
+-- 全库带 mch_no 列的表只有两张:pay_lsy_merchant(本表,2 行)与 pay_lsy_order(9 行引用该商户号)。
|
|
|
|
|
+-- pay_lsy_order 存的是**字符串 mch_no**、不是本表的 id ⇒ 去重后该商户号仍在,那 9 条订单照样解析得到。
|
|
|
|
|
+--
|
|
|
|
|
+-- ★ 推荐删**候选 A**(id=1):它的 description 是**数据自己写的处置说明**
|
|
|
|
|
+-- (「正式进件(子项目 B)后应删除」),而子项目 B 就是本批次、当前已完成;
|
|
|
|
|
+-- 候选 B 没有这类自述,且它占着 tenant 2 的租户级槽位
|
|
|
|
|
+-- (受 uk_lsy_merchant_tenant_level = UNIQUE(tenant_id) WHERE enterprise_id IS NULL 约束)。
|
|
|
|
|
+--
|
|
|
-- ★ 删任意一行都**不可逆**。先把下面两行原样跑一遍,确认要删的 id 之后再执行删除。
|
|
-- ★ 删任意一行都**不可逆**。先把下面两行原样跑一遍,确认要删的 id 之后再执行删除。
|
|
|
-- SELECT * FROM pay_lsy_merchant WHERE id IN (1, 2102313081860202497);
|
|
-- SELECT * FROM pay_lsy_merchant WHERE id IN (1, 2102313081860202497);
|
|
|
--
|
|
--
|
|
@@ -139,6 +149,15 @@ SELECT conname, contype FROM pg_constraint
|
|
|
-- Task 6 当时**尚未实现**,那条查询与那个用例在仓库里**都不存在**。
|
|
-- Task 6 当时**尚未实现**,那条查询与那个用例在仓库里**都不存在**。
|
|
|
-- 真话是:「**计划要求**它这么写,并且规定了用例 onboardingNotify_duplicateMchNo_returnsFail 去钉它」。
|
|
-- 真话是:「**计划要求**它这么写,并且规定了用例 onboardingNotify_duplicateMchNo_returnsFail 去钉它」。
|
|
|
-- ⇒ **免登录入口在无索引时也是安全的**(前提:那段代码照计划里的查询形状落地);索引是第二道闸,不是第一道。
|
|
-- ⇒ **免登录入口在无索引时也是安全的**(前提:那段代码照计划里的查询形状落地);索引是第二道闸,不是第一道。
|
|
|
|
|
+-- ★ 2026-09-23 追记(批次完工后复量):**那个前提已满足**。
|
|
|
|
|
+-- `LsyMerchantService.updateReviewStatusByMchNo` 实测就是 selectList(非 selectOne / 非 LIMIT 1),
|
|
|
|
|
+-- 0 行 ⇒ NOT_FOUND、>1 行 ⇒ AMBIGUOUS 且**一行都不写**;
|
|
|
|
|
+-- 用例 `onboardingNotify_duplicateMchNo_returnsFail`(LsyOnboardingNotifyServiceTest:288)
|
|
|
|
|
+-- 断言应答正是 `{"result_code":"FAIL","result_msg":"商户号命中多行,拒绝回写"}`。
|
|
|
|
|
+-- ⇒ 上面那句「Task 6 当时尚未实现」现已过期(它描述的是写这段时的状态)。
|
|
|
|
|
+-- ★★ 而这条缺口**现在是活的、不是理论上的**:库里那两行重复还在,
|
|
|
|
|
+-- ⇒ mch_no='Y52211090004' 的审核通知**每一条都**得到 FAIL,上游会一直重推。
|
|
|
|
|
+-- 去重之后这条路径才通。这是「删一行」除了建索引之外的第二个理由。
|
|
|
-- (这条与**旧计划正文**「必须先补唯一约束再实现查询」相抵 —— 那句已在计划 Task 6 Step 0 里作废。)
|
|
-- (这条与**旧计划正文**「必须先补唯一约束再实现查询」相抵 —— 那句已在计划 Task 6 Step 0 里作废。)
|
|
|
|
|
|
|
|
|
|
|