40 lines
1.6 KiB
SQL
40 lines
1.6 KiB
SQL
-- 一次性数据修复:将 pl_plan_contract / pl_plan 合同号快照对齐到 CRM 现网编号。
|
|
-- 背景:合同页直接改 contract_no 后,计划归档列表仍读快照,导致列表与详情不一致。
|
|
-- 范围:全库 del_flag=0 且快照与 crm_contract.contract_no 不一致的关联/遗留主表行。
|
|
-- 含客户反馈三单:PO20261008011 / PO20261009018 / PO20261012005(临时号 SX/X-JT20261009002 → P0-2026-10-0016)。
|
|
-- MySQL 5.7。可重复执行(已对齐行不再更新)。
|
|
-- !!! 生产执行须单独授权;本文件不随应用启动自动执行。
|
|
|
|
SET NAMES utf8mb4;
|
|
|
|
-- 预览(执行前建议先跑):
|
|
-- SELECT p.plan_no, pc.id AS link_id, pc.side, pc.contract_id,
|
|
-- pc.contract_no AS snapshot_no, c.contract_no AS live_no
|
|
-- FROM pl_plan_contract pc
|
|
-- JOIN pl_plan p ON p.id = pc.plan_id AND p.del_flag = 0
|
|
-- JOIN crm_contract c ON c.id = pc.contract_id AND c.tenant_no = pc.tenant_no AND c.del_flag = 0
|
|
-- WHERE pc.del_flag = 0
|
|
-- AND IFNULL(pc.contract_no, '') <> IFNULL(c.contract_no, '');
|
|
|
|
UPDATE pl_plan_contract pc
|
|
INNER JOIN crm_contract c
|
|
ON c.id = pc.contract_id
|
|
AND c.tenant_no = pc.tenant_no
|
|
AND c.del_flag = 0
|
|
SET pc.contract_no = c.contract_no,
|
|
pc.update_time = NOW()
|
|
WHERE pc.del_flag = 0
|
|
AND IFNULL(pc.contract_no, '') <> IFNULL(c.contract_no, '');
|
|
|
|
UPDATE pl_plan p
|
|
INNER JOIN crm_contract c
|
|
ON c.id = p.contract_id
|
|
AND c.tenant_no = p.tenant_no
|
|
AND c.del_flag = 0
|
|
SET p.contract_no = c.contract_no,
|
|
p.update_time = NOW()
|
|
WHERE p.del_flag = 0
|
|
AND p.contract_id IS NOT NULL
|
|
AND p.contract_id <> ''
|
|
AND IFNULL(p.contract_no, '') <> IFNULL(c.contract_no, '');
|