import sys,json
|
from pathlib import Path
|
from datetime import datetime
|
sys.stdout.reconfigure(encoding='utf-8')
|
ROOT=Path(__file__).resolve().parent
|
sys.path.insert(0,str(ROOT.parent/'iqc-import-20261012/deps'))
|
import pymysql
|
manifest=json.loads((ROOT/'backlog-inserted-ids.json').read_text(encoding='utf-8'))
|
ids=[r['follow_id'] for r in manifest['records']]
|
assert len(ids)==1773 and len(set(ids))==len(ids)
|
args=dict(host='36.213.150.237',port=10000,user='root',password=sys.stdin.readline().strip(),database='mom-hm',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor,autocommit=False,connect_timeout=15,read_timeout=60)
|
conn=pymysql.connect(**args)
|
try:
|
with conn.cursor() as q:
|
q.execute('SELECT DATABASE() db,NOW() now');state=q.fetchone();assert state['db']=='mom-hm'
|
clause=','.join(['%s']*len(ids))
|
q.execute('SELECT * FROM crm_follow_up_record WHERE id IN ('+clause+') ORDER BY id FOR UPDATE',ids)
|
before=q.fetchall();assert len(before)==len(ids)
|
for r in before:
|
assert r['creator']=='0' and r['type']==5
|
assert all(r[field] in ('[]','') for field in ('business_ids','contact_ids','pic_urls'))
|
backup=ROOT/('followup-list-repair-backup-'+state['now'].strftime('%Y%m%d-%H%M%S')+'.json')
|
backup.write_text(json.dumps(before,ensure_ascii=False,indent=2,default=str),encoding='utf-8')
|
q.execute("UPDATE crm_follow_up_record SET business_ids=CASE WHEN business_ids='[]' THEN '' ELSE business_ids END, contact_ids=CASE WHEN contact_ids='[]' THEN '' ELSE contact_ids END, pic_urls=CASE WHEN pic_urls='[]' THEN '' ELSE pic_urls END, update_time=update_time WHERE id IN ("+clause+") AND (business_ids='[]' OR contact_ids='[]' OR pic_urls='[]')",ids)
|
changed=q.rowcount
|
q.execute('SELECT * FROM crm_follow_up_record WHERE id IN ('+clause+') ORDER BY id',ids)
|
after=q.fetchall()
|
for old,current in zip(before,after):
|
assert all(current[k]==v for k,v in old.items() if k not in ('business_ids','contact_ids','pic_urls'))
|
assert all(current[field]=='' for field in ('business_ids','contact_ids','pic_urls'))
|
q.execute('SELECT COUNT(*) count FROM system_operate_log WHERE trace_id=%s',(manifest['batch'],));assert q.fetchone()['count']==1773
|
conn.commit()
|
with pymysql.connect(**args) as verify:
|
with verify.cursor() as q:
|
q.execute('SELECT * FROM crm_follow_up_record WHERE id IN ('+clause+') ORDER BY id',ids)
|
assert q.fetchall()==after
|
result=dict(database='mom-hm',repaired_records=changed,records_verified=len(after),committed=True,verified_after_commit=True,backup=str(backup))
|
(ROOT/'followup-list-repair-result.json').write_text(json.dumps(result,ensure_ascii=False,indent=2),encoding='utf-8')
|
print(json.dumps(result,ensure_ascii=False))
|
except Exception:
|
conn.rollback();raise
|
finally:conn.close()
|