from read_log_times import connect from pathlib import Path import json import re HERE = Path(__file__).resolve().parent ROOT = HERE.parents[1] ADDITIONS = { 'type': "int DEFAULT 1 COMMENT '杂项类型:mes_wm_misc_receipt_type' AFTER `name`", 'source_doc_type': "varchar(64) DEFAULT NULL COMMENT '来源单据类型' AFTER `type`", 'source_doc_id': "bigint DEFAULT NULL COMMENT '来源单据ID' AFTER `source_doc_type`", 'source_doc_code': "varchar(100) DEFAULT NULL COMMENT '来源单据编码' AFTER `source_doc_id`", } with connect() as c: with c.cursor() as q: q.execute('SHOW CREATE TABLE mes_wm_misc_receipt') old_schema = q.fetchall() q.execute('SHOW COLUMNS FROM mes_wm_misc_receipt') columns = {r['Field'] for r in q.fetchall()} q.execute('SELECT * FROM mes_wm_misc_receipt ORDER BY id') before = q.fetchall() missing = [name for name in ADDITIONS if name not in columns] backup = HERE/'misc-receipt-schema-before.json' if missing: with backup.open('x', encoding='utf-8') as f: json.dump(dict(target='36.213.150.237:10000/mom-hm', schema=old_schema, rows=before, missing=missing), f, ensure_ascii=False, indent=2, default=str) sql = 'ALTER TABLE mes_wm_misc_receipt '+', '.join( 'ADD COLUMN `'+name+'` '+ADDITIONS[name] for name in missing) q.execute(sql) # 验证三个数据对象的全部映射字段都能查询。 counts = {} for suffix, class_name in [('', 'MesWmMiscReceiptDO'), ('_line', 'MesWmMiscReceiptLineDO'), ('_detail', 'MesWmMiscReceiptDetailDO')]: source = (ROOT / ('yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/miscreceipt/'+class_name+'.java')).read_text(encoding='utf-8') fields = re.findall(r'private\s+\w+\s+(\w+);', source) mapped = [re.sub(r'(?