云
昨天 74b0d9c5ab1dc316b29f8525dcffe45225d4c43c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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()