""" 验证字段编码修复结果,并处理剩余的真正问题 """ import os import pymysql import re from typing import Dict, List # 数据库连接配置 DB_CONFIG = { 'host': os.getenv('DB_HOST', '152.136.177.240'), 'port': int(os.getenv('DB_PORT', 5012)), 'user': os.getenv('DB_USER', 'finyx'), 'password': os.getenv('DB_PASSWORD', '6QsGK6MpePZDE57Z'), 'database': os.getenv('DB_NAME', 'finyx'), 'charset': 'utf8mb4' } TENANT_ID = 615873064429507639 def is_chinese(text: str) -> bool: """判断字符串是否包含中文字符""" if not text: return False return bool(re.search(r'[\u4e00-\u9fff]', text)) def verify_fix(): """验证修复结果""" conn = pymysql.connect(**DB_CONFIG) cursor = conn.cursor(pymysql.cursors.DictCursor) print("="*80) print("验证字段编码修复结果") print("="*80) # 查询所有字段 cursor.execute(""" SELECT id, name, filed_code, field_type, state FROM f_polic_field WHERE tenant_id = %s ORDER BY name """, (TENANT_ID,)) fields = cursor.fetchall() # 找出仍然包含中文的field_code chinese_fields = [] for field in fields: if field['filed_code'] and is_chinese(field['filed_code']): chinese_fields.append(field) print(f"\n总共 {len(fields)} 个字段") print(f"仍有 {len(chinese_fields)} 个字段的field_code包含中文:\n") if chinese_fields: for field in chinese_fields: print(f" ID: {field['id']}") print(f" 名称: {field['name']}") print(f" field_code: {field['filed_code']}") print(f" field_type: {field['field_type']}") print() # 检查重复的字段名称 name_to_fields = {} for field in fields: name = field['name'] if name not in name_to_fields: name_to_fields[name] = [] name_to_fields[name].append(field) duplicates = {name: fields_list for name, fields_list in name_to_fields.items() if len(fields_list) > 1} print(f"\n仍有 {len(duplicates)} 个重复的字段名称:\n") for name, fields_list in duplicates.items(): print(f" 字段名称: {name} (共 {len(fields_list)} 条记录)") for field in fields_list: print(f" - ID: {field['id']}, field_code: {field['filed_code']}, " f"field_type: {field['field_type']}, state: {field['state']}") print() # 检查f_polic_file_field表中的关联关系 print("="*80) print("检查 f_polic_file_field 表") print("="*80) cursor.execute(""" SELECT fff.id, fff.file_id, fff.filed_id, fc.name as file_name, f.name as field_name, f.filed_code FROM f_polic_file_field fff LEFT JOIN f_polic_file_config fc ON fff.file_id = fc.id LEFT JOIN f_polic_field f ON fff.filed_id = f.id WHERE fff.tenant_id = %s AND f.filed_code IS NOT NULL ORDER BY fff.file_id, fff.filed_id """, (TENANT_ID,)) relations = cursor.fetchall() # 检查是否有重复的关联关系 relation_keys = {} for rel in relations: key = (rel['file_id'], rel['filed_id']) if key not in relation_keys: relation_keys[key] = [] relation_keys[key].append(rel) duplicate_relations = {key: records for key, records in relation_keys.items() if len(records) > 1} print(f"\n总共 {len(relations)} 个关联关系") print(f"发现 {len(duplicate_relations)} 个重复的关联关系") # 检查使用中文field_code的关联关系 chinese_relations = [rel for rel in relations if rel['filed_code'] and is_chinese(rel['filed_code'])] print(f"使用中文field_code的关联关系: {len(chinese_relations)} 个") if chinese_relations: print("\n前10个使用中文field_code的关联关系:") for rel in chinese_relations[:10]: print(f" - 文件: {rel['file_name']}, 字段: {rel['field_name']}, " f"field_code: {rel['filed_code']}") cursor.close() conn.close() return { 'total_fields': len(fields), 'chinese_fields': len(chinese_fields), 'duplicate_names': len(duplicates), 'duplicate_relations': len(duplicate_relations), 'chinese_relations': len(chinese_relations) } if __name__ == '__main__': result = verify_fix() print("\n" + "="*80) print("验证完成") print("="*80) print(f"总字段数: {result['total_fields']}") print(f"中文field_code字段数: {result['chinese_fields']}") print(f"重复字段名称数: {result['duplicate_names']}") print(f"重复关联关系数: {result['duplicate_relations']}") print(f"使用中文field_code的关联关系数: {result['chinese_relations']}")