| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- /**
- * Fix garbled UTF-8 for workflow_llm / summary_generation scenes and related menus.
- * Use \\u escapes only ?? avoid literal Chinese in this file (Windows console/script encoding).
- */
- const mysql = require('mysql2/promise')
- const SCENES = [
- { code: 'workflow_llm', name: '\u63d0\u793a\u8bcd\u7ba1\u7406' },
- { code: 'summary_generation', name: '\u6458\u8981\u751f\u6210' }
- ]
- const MENUS = [
- { component: 'lobster/prompt/index', name: '\u63d0\u793a\u8bcd\u7ba1\u7406' }
- ]
- const MENU_TABLES = ['sys_menu', 'tenant_sys_menu', 'company_menu', 'tenant_company_menu']
- async function main() {
- const host = process.env.DB_HOST || 'cq-cdb-8fjmemkb.sql.tencentcdb.com'
- const port = Number(process.env.DB_PORT || 27220)
- const user = process.env.DB_USER || 'root'
- const password = process.env.DB_PASSWORD || 'Ylrz_1q2w3e4r5t6y'
- const masterDb = process.env.DB_NAME || 'ylrz_saas'
- const master = await mysql.createConnection({ host, port, user, password, database: masterDb, charset: 'utf8mb4' })
- console.log('=== Fix MASTER ===')
- await fixConn(master)
- const tenantConn = await mysql.createConnection({ host, port, user, password, database: masterDb, charset: 'utf8mb4' })
- const [tenants] = await tenantConn.query('SELECT id, tenant_code, db_url, db_account, db_pwd FROM tenant_info WHERE status=1')
- await tenantConn.end()
- for (const t of tenants) {
- const db = parseDbName(t.db_url)
- if (!db) continue
- console.log('=== Fix TENANT', t.id, t.tenant_code, '===')
- try {
- const conn = await mysql.createConnection({
- host, port, user: t.db_account || user, password: t.db_pwd || password, database: db, charset: 'utf8mb4'
- })
- await fixConn(conn, false)
- await conn.end()
- } catch (e) {
- console.log('skip:', e.message)
- }
- }
- await master.end()
- const verify = await mysql.createConnection({ host, port, user, password, database: masterDb, charset: 'utf8mb4' })
- const [rows] = await verify.query(
- "SELECT scene_code, scene_name, HEX(scene_name) hx FROM admin_ai_scene WHERE scene_code IN ('workflow_llm','summary_generation')"
- )
- console.log('verify:', JSON.stringify(rows, null, 2))
- await verify.end()
- console.log('Done.')
- }
- async function fixConn(conn, includeScenes = true) {
- if (includeScenes && await tableExists(conn, 'admin_ai_scene')) {
- for (const s of SCENES) {
- const [r] = await conn.query('UPDATE admin_ai_scene SET scene_name=?, update_time=NOW() WHERE scene_code=?', [s.name, s.code])
- console.log('scene', s.code, 'rows=', r.affectedRows, 'name=', s.name)
- }
- }
- for (const table of MENU_TABLES) {
- if (!(await tableExists(conn, table))) continue
- for (const m of MENUS) {
- const [r] = await conn.query(`UPDATE ${table} SET menu_name=? WHERE component=?`, [m.name, m.component])
- if (r.affectedRows) console.log(table, m.component, 'rows=', r.affectedRows)
- }
- }
- }
- async function tableExists(conn, table) {
- const [r] = await conn.query('SHOW TABLES LIKE ?', [table])
- return r.length > 0
- }
- function parseDbName(dbUrl) {
- if (!dbUrl) return null
- const m = String(dbUrl).match(/\/([^/?]+)(?:\?|$)/)
- return m ? m[1] : null
- }
- main().catch(e => { console.error(e); process.exit(1) })
|