const { Pool } = require('pg'); const pool = new Pool({ host: '47.116.196.11', port: 15432, database: 'postgresql', user: 'postgresql', password: 'Jchl1528' }); async function fixData() { const client = await pool.connect(); try { await client.query('BEGIN'); // 1. 修复申请科室名称 console.log('步骤1: 修复申请科室名称...'); const fixDeptResult = await client.query(` UPDATE hisdev.cli_surgery s SET apply_dept_name = o.name FROM hisdev.adm_organization o WHERE s.apply_dept_id = o.id AND (s.apply_dept_name IS NULL OR s.apply_dept_name = '') AND s.delete_flag = '0' `); console.log(` 修复了 ${fixDeptResult.rowCount} 条申请科室记录`); // 2. 修复主刀医生姓名 console.log('步骤2: 修复主刀医生姓名...'); const fixSurgeonResult = await client.query(` UPDATE hisdev.cli_surgery s SET main_surgeon_name = u.nick_name FROM hisdev.sys_user u WHERE s.main_surgeon_id = u.user_id AND (s.main_surgeon_name IS NULL OR s.main_surgeon_name = '') AND s.delete_flag = '0' `); console.log(` 修复了 ${fixSurgeonResult.rowCount} 条主刀医生记录`); // 3. 对于 apply_dept_id 为空但有 org_id 的记录,使用 org_name console.log('步骤3: 使用 org_name 填充剩余空申请科室...'); const fixOrgResult = await client.query(` UPDATE hisdev.cli_surgery s SET apply_dept_name = o.name, apply_dept_id = s.org_id FROM hisdev.adm_organization o WHERE s.org_id = o.id AND (s.apply_dept_name IS NULL OR s.apply_dept_name = '') AND s.delete_flag = '0' `); console.log(` 修复了 ${fixOrgResult.rowCount} 条使用org_name的记录`); // 4. 验证修复结果 console.log('步骤4: 验证修复结果...'); const checkResult = await client.query(` SELECT COUNT(*) as total_count, COUNT(apply_dept_name) as has_apply_dept_name_count, COUNT(*) - COUNT(apply_dept_name) as apply_dept_name_null_count, COUNT(main_surgeon_name) as has_main_surgeon_name_count, COUNT(*) - COUNT(main_surgeon_name) as main_surgeon_name_null_count FROM hisdev.cli_surgery WHERE delete_flag = '0' `); console.log('\n=== 修复后统计 ==='); console.log(JSON.stringify(checkResult.rows[0], null, 2)); // 5. 查看仍有空值的记录 const nullRecords = await client.query(` SELECT id, surgery_no, patient_name, apply_dept_id, apply_dept_name, main_surgeon_id, main_surgeon_name FROM hisdev.cli_surgery WHERE delete_flag = '0' AND (apply_dept_name IS NULL OR apply_dept_name = '' OR main_surgeon_name IS NULL OR main_surgeon_name = '') ORDER BY create_time DESC LIMIT 10 `); if (nullRecords.rows.length > 0) { console.log('\n=== 仍有空值的记录 ==='); console.log(JSON.stringify(nullRecords.rows, null, 2)); } else { console.log('\n✅ 所有记录的申请科室和主刀医生姓名已修复完毕!'); } await client.query('COMMIT'); console.log('\n修复完成!'); } catch (err) { await client.query('ROLLBACK'); console.error('修复失败:', err.message); } finally { client.release(); pool.end(); } } fixData();