import sys,json,csv from pathlib import Path sys.path.insert(0,str(Path('scripts/iqc-import-20261012/deps').resolve())) import pymysql conn=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,connect_timeout=15,read_timeout=60) with conn.cursor() as q: q.execute('SELECT id,code,sale_order_id,sale_order_no,sale_order_item_id,product_id,quantity,client_id,request_date,status,remark FROM mes_pro_mps WHERE deleted=0 ORDER BY id') plans=q.fetchall() q.execute('SELECT i.id,i.order_id,i.product_id,i.count,i.mps_id,o.no,o.customer_id FROM erp_sale_order_items i JOIN erp_sale_order o ON o.id=i.order_id AND o.deleted=0 WHERE i.deleted=0') items=q.fetchall() q.execute('SELECT id,code,mdm_item_id,name FROM mes_md_item WHERE deleted=0') products=q.fetchall() conn.close() out=Path('scripts/mps-link-data-20261014');out.mkdir(exist_ok=True) (out/'audit-snapshot.json').write_text(json.dumps({'plans':plans,'items':items,'products':products},ensure_ascii=False,indent=2,default=str),encoding='utf8') by_mps={} for item in items: if item['mps_id']:by_mps.setdefault(item['mps_id'],[]).append(item) missing=[p for p in plans if not p['sale_order_id'] or not p['sale_order_no']] print(json.dumps({'database':'remote mom-hm','total_plans':len(plans),'missing_link':len(missing),'missing_with_unique_backlink':sum(len(by_mps.get(p['id'],[]))==1 for p in missing),'missing_with_multiple_backlinks':sum(len(by_mps.get(p['id'],[]))>1 for p in missing),'missing_without_backlink':sum(not by_mps.get(p['id']) for p in missing)},ensure_ascii=False)) print(json.dumps(missing[:8],ensure_ascii=False,default=str))