| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- # -*- coding: utf-8 -*-
- import pymysql
- DB = dict(
- host='cq-cdb-8fjmemkb.sql.tencentcdb.com',
- port=27220,
- user='root',
- password='Ylrz_1q2w3e4r5t6y',
- database='ylrz_saas',
- charset='utf8mb4',
- autocommit=False,
- )
- FILES = [
- r'f:\project\Saas\ylrz_saas_his_scrm\sql\organize_tenant_sys_menu.sql',
- r'f:\project\Saas\ylrz_saas_his_scrm\sql\organize_tenant_sys_menu_subtree.sql',
- ]
- RESTORE_SQL = """
- INSERT INTO tenant_sys_menu
- SELECT b.*
- FROM tenant_sys_menu_bak b
- LEFT JOIN tenant_sys_menu t ON t.menu_id = b.menu_id
- WHERE t.menu_id IS NULL
- """
- def load_statements(path):
- for enc in ('utf-8', 'utf-8-sig', 'gbk'):
- try:
- with open(path, 'r', encoding=enc) as f:
- content = f.read()
- break
- except UnicodeDecodeError:
- content = None
- if content is None:
- with open(path, 'r', encoding='utf-8', errors='ignore') as f:
- content = f.read()
- lines = []
- for line in content.splitlines():
- if line.strip().startswith('--'):
- continue
- lines.append(line)
- return [p.strip() for p in '\n'.join(lines).split(';') if p.strip()]
- def main():
- conn = pymysql.connect(**DB)
- cur = conn.cursor()
- try:
- cur.execute('SELECT COUNT(*) FROM tenant_sys_menu')
- before = cur.fetchone()[0]
- cur.execute(RESTORE_SQL)
- restored = cur.rowcount
- conn.commit()
- cur.execute('SELECT COUNT(*) FROM tenant_sys_menu')
- after_restore = cur.fetchone()[0]
- print('restore: before=%s restored=%s after=%s' % (before, restored, after_restore))
- for fp in FILES:
- stmts = load_statements(fp)
- affected = 0
- for stmt in stmts:
- cur.execute(stmt)
- affected += cur.rowcount
- conn.commit()
- print('FILE %s: statements=%s rowcount_sum=%s' % (fp.split('\\')[-1], len(stmts), affected))
- checks = [
- ('total', 'SELECT COUNT(*) FROM tenant_sys_menu'),
- ('visible_roots', "SELECT COUNT(*) FROM tenant_sys_menu WHERE parent_id=0 AND visible='0' AND menu_type='M'"),
- ('bad_admin_visible', "SELECT COUNT(*) FROM tenant_sys_menu WHERE component LIKE 'admin/%' AND visible='0'"),
- ('sys_35100_children', "SELECT COUNT(*) FROM tenant_sys_menu WHERE parent_id=35100 AND visible='0' AND menu_type<>'F'"),
- ('sys_35101_children', "SELECT COUNT(*) FROM tenant_sys_menu WHERE parent_id=35101 AND visible='0' AND menu_type<>'F'"),
- ('sys_35106_children', "SELECT COUNT(*) FROM tenant_sys_menu WHERE parent_id=35106 AND visible='0' AND menu_type<>'F'"),
- ('qw_35001_children', "SELECT COUNT(*) FROM tenant_sys_menu WHERE parent_id=35001 AND visible='0' AND menu_type<>'F'"),
- ('qw_35002_children', "SELECT COUNT(*) FROM tenant_sys_menu WHERE parent_id=35002 AND visible='0' AND menu_type<>'F'"),
- ('store_35040_children', "SELECT COUNT(*) FROM tenant_sys_menu WHERE parent_id=35040 AND visible='0' AND menu_type<>'F'"),
- ('hidden_hisstore', "SELECT COUNT(*) FROM tenant_sys_menu WHERE menu_id BETWEEN 32591 AND 32643 AND visible='1'"),
- ('qw_path_dup', """
- SELECT COUNT(*) FROM (
- SELECT parent_id, path FROM tenant_sys_menu
- WHERE parent_id IN (35001,35002,35003,35004,35005,35006,35007)
- AND menu_type <> 'F' AND visible='0'
- GROUP BY parent_id, path HAVING COUNT(*)>1
- ) t
- """),
- ('store_path_dup', """
- SELECT COUNT(*) FROM (
- SELECT parent_id, path FROM tenant_sys_menu
- WHERE parent_id IN (35040,35041,35042)
- AND menu_type <> 'F' AND visible='0'
- GROUP BY parent_id, path HAVING COUNT(*)>1
- ) t
- """),
- ]
- print('VERIFY:')
- for name, sql in checks:
- cur.execute(sql)
- print(' %s=%s' % (name, cur.fetchone()[0]))
- print('EXEC_OK')
- except Exception as e:
- conn.rollback()
- print('EXEC_FAIL: %s' % e)
- raise
- finally:
- cur.close()
- conn.close()
- if __name__ == '__main__':
- main()
|