gaoluyang
14 小时以前 e40a608ef9bf51db294d8eefada6a8e2e80cebca
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
39
40
41
42
43
44
45
46
47
48
49
50
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'(?<!^)([A-Z])', r'_\1', name).lower() for name in fields]
            mapped += ['create_time', 'update_time', 'creator', 'updater', 'deleted']
            table = 'mes_wm_misc_receipt'+suffix
            q.execute('SELECT '+','.join('`'+field+'`' for field in mapped)+
                      ' FROM '+table+' WHERE deleted=0 ORDER BY id DESC LIMIT 10')
            counts[table] = len(q.fetchall())
        q.execute('SELECT * FROM mes_wm_misc_receipt ORDER BY id')
        after = q.fetchall()
        assert [{k: row[k] for k in columns} for row in after] == before, 'Existing data changed'
        result = dict(target='36.213.150.237:10000/mom-hm', added_columns=missing,
                      original_data_unchanged=True, query_verified=counts, backup=str(backup))
        (HERE/'misc-receipt-schema-result.json').write_text(json.dumps(result, ensure_ascii=False, indent=2), encoding='utf-8')
        print(json.dumps(result, ensure_ascii=False))