gaoluyang
4 天以前 e71d71bf43c2307c89d3592adf08c1b32fcd0907
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
38
"""仅修复 application-local 对应的本地库,并回滚验证 380/500 字符可写入。"""
from pathlib import Path
import sys,re,json
sys.stdout.reconfigure(encoding='utf-8')
sys.path.insert(0,str(Path('scripts/iqc-import-20261012/deps').resolve()))
import pymysql
config=Path('yudao-server/src/main/resources/application-local.yaml').read_text(encoding='utf-8')
section=config[config.index('jdbc:mysql://localhost:3306/'):]
password=re.search(r'password:\s*([^\r\n#]+)',section).group(1).strip().strip('\"\'')
c=pymysql.connect(host='127.0.0.1',port=3306,user='root',password=password,database='mom-hm',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor,autocommit=False)
out=Path('scripts/local-production-20261015')
try:
 with c.cursor() as q:
  q.execute('SHOW CREATE TABLE mes_pro_work_order_param_record_detail')
  before=q.fetchone()
  backup=out/'snapshot-detail-schema-before.json'
  if not backup.exists(): backup.write_text(json.dumps(before,ensure_ascii=False,indent=2),encoding='utf-8')
  q.execute("select character_maximum_length n from information_schema.columns where table_schema=database() and table_name='mes_pro_work_order_param_record_detail' and column_name='remark'")
  width=q.fetchone()['n'];assert width in (255,500),width
  if width==255:
   sql=Path('sql/mysql/mes_pro_param_snapshot_remark_20261015.sql').read_text(encoding='utf-8')
   q.execute(sql)
  q.execute('select id,remark from mes_pd_process_param_template_detail where template_id=11 and deleted=0 limit 1')
  source=q.fetchone();assert source
  for remark in (source['remark'],'检'*500):
   q.execute('SAVEPOINT snapshot_remark_probe')
   q.execute('insert into mes_pro_work_order_param_record_detail(record_id,param_name,remark) select id,%s,%s from mes_pro_work_order_param_record where deleted=0 limit 1',('备注长度校验',remark))
   assert q.rowcount==1
   q.execute('select remark from mes_pro_work_order_param_record_detail where id=%s',(q.lastrowid,))
   assert q.fetchone()['remark']==remark
   q.execute('ROLLBACK TO SAVEPOINT snapshot_remark_probe')
  c.rollback()
  q.execute('select w.code,w.quantity_scheduled,count(t.id) tasks from mes_pro_work_order w left join mes_pro_task t on t.work_order_id=w.id and t.deleted=0 where w.id in (102,103,104) group by w.id')
  result={'new_width':500,'source_remark_length':len(source['remark']),'round_trip_500_chinese_characters':True,'probe_rows_rolled_back':True,'orders':q.fetchall()}
  (out/'snapshot-remark-verification.json').write_text(json.dumps(result,ensure_ascii=False,indent=2,default=str),encoding='utf-8')
  print(json.dumps(result,ensure_ascii=False,default=str))
finally:
 c.rollback();c.close()