import sys,json
|
from pathlib import Path
|
from read_links import P,connect,encode
|
result=json.loads((P/'result.json').read_text(encoding='utf8'))
|
before=json.loads(Path(result['backup']).read_text(encoding='utf8'))
|
plan=json.loads((P/'plan.json').read_text(encoding='utf8'))
|
expected={t:{r['id']:dict(r) for r in rows} for t,rows in before.items()}
|
for r in plan['changes']:expected[r['table']][r['id']][r['field']]=r['after']
|
c=connect(sys.stdin.readline().strip())
|
try:
|
with c.cursor() as q:
|
q.execute("SET time_zone='+08:00'");q.execute('SELECT NOW() now');now=q.fetchone()['now']
|
after={}
|
for t in before:
|
q.execute('SELECT * FROM `'+t+'` WHERE deleted=0 ORDER BY id');after[t]={r['id']:r for r in q.fetchall()}
|
assert encode(after[t])==encode(expected[t]),'Unexpected source or unrelated field change: '+t
|
customers=after['crm_customer'];missing={}
|
for t in ('mes_pro_mps','mes_pro_work_order','mes_pro_task'):
|
bad=[r['id'] for r in after[t].values() if r['client_id'] not in customers]
|
assert not bad,(t,bad);missing[t]=len(bad)
|
for task in after['mes_pro_task'].values():
|
wo=after['mes_pro_work_order'].get(task['work_order_id'])
|
assert wo and task['client_id']==wo['client_id'],'Task/work order mismatch'
|
for mps in after['mes_pro_mps'].values():
|
order=after['erp_sale_order'].get(mps['sale_order_id'])
|
if order:assert mps['client_id']==order['customer_id']
|
wo=after['mes_pro_work_order'].get(mps['work_order_id'])
|
if wo:assert mps['client_id']==wo['client_id']
|
for batch in after['mes_wm_batch'].values():
|
if batch['work_order_id'] in after['mes_pro_work_order']:
|
assert batch['client_id']==after['mes_pro_work_order'][batch['work_order_id']]['client_id'],'Batch/work order mismatch'
|
passed={'passed':True,'verified_at':str(now),'updated':len(plan['changes']),
|
'production_customer_missing':missing,'order_mps_workorder_task_batch_consistent':True,
|
'only_client_id_changed':True,'customer_rows_not_added_or_modified':True,
|
'unresolved_oqc':len(plan['unresolved']),'unallocated_stock_batches':len(plan['unallocated_stock_batches'])}
|
(P/'verification.json').write_text(encode(passed),encoding='utf8');print(encode(passed))
|
finally:c.close()
|