1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| 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))
|
|