import sys,json
|
from pathlib import Path
|
P=Path(__file__).parent
|
sys.path.insert(0,str(P.parent/'iqc-import-20261012/deps'))
|
import pymysql
|
b=json.loads((P/'indicator-dedup-locked-backup.json').read_text(encoding='utf8'))
|
mapping={int(k):v for k,v in b['mapping'].items()}
|
normalize=lambda r:json.loads(json.dumps(r,ensure_ascii=False,default=str))
|
c=pymysql.connect(host='36.213.150.237',port=10000,user='root',password=sys.stdin.readline().strip(),database='mom-hm',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor)
|
with c.cursor() as q:
|
q.execute('SELECT TRIM(name) name,COUNT(*) n FROM mes_qc_indicator WHERE deleted=0 GROUP BY TRIM(name) HAVING COUNT(*)>1')
|
assert not q.fetchall()
|
q.execute('SELECT * FROM mes_qc_indicator ORDER BY id');masters={r['id']:normalize(r) for r in q.fetchall()}
|
for old in b['masters']:
|
current=masters[old['id']]
|
if old['id'] in mapping:
|
assert current['deleted']=="b'\\x01'"
|
else:assert current==old
|
verified=0
|
for table,rows in b['references'].items():
|
if not rows:continue
|
ids=[r['id'] for r in rows]
|
q.execute('SELECT * FROM `'+table+'` WHERE id IN ('+','.join('%s' for _ in ids)+')',ids)
|
current={r['id']:normalize(r) for r in q.fetchall()};assert len(current)==len(rows)
|
for old in rows:
|
new=current[old['id']]
|
assert new['indicator_id']==mapping.get(old['indicator_id'],old['indicator_id'])
|
allowed={'indicator_id','updater','update_time'} if old['indicator_id'] in mapping else set()
|
assert all(new[k]==v for k,v in old.items() if k not in allowed)
|
verified+=1
|
print(json.dumps({'duplicate_names_remaining':0,'duplicate_masters_logically_deleted':len(mapping),'reference_rows_verified':verified,'requirements_and_results_preserved':True},ensure_ascii=False))
|
c.close()
|