ai-business-write/verify_field_code_fix.py

149 lines
4.9 KiB
Python

"""
验证字段编码修复结果,并处理剩余的真正问题
"""
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']}")