云
12 小时以前 9dc4057ee86abf7a69e7d7a8720a41efa8dabdcc
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))