ai-business-write/init_pre_interview_risk_assessment_fields.py

308 lines
9.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
谈话前安全风险评估表字段数据初始化脚本
添加风险评估相关字段并关联到"谈话前安全风险评估表"模板
"""
import pymysql
from datetime import datetime
import uuid
# 数据库连接配置
DB_CONFIG = {
'host': '152.136.177.240',
'port': 5012,
'user': 'finyx',
'password': '6QsGK6MpePZDE57Z',
'database': 'finyx',
'charset': 'utf8mb4'
}
# 固定值
TENANT_ID = 615873064429507639 # 从现有数据中获取
CREATED_BY = 655162080928945152 # 从现有数据中获取
CURRENT_TIME = datetime.now()
# 字段配置(带默认值)
FIELDS = [
{
'name': '被核查人员家庭情况',
'field_code': 'target_family_situation',
'field_type': 2, # 输出字段
'description': '被核查人员家庭情况',
'default_value': '家庭关系和谐稳定'
},
{
'name': '被核查人员社会关系',
'field_code': 'target_social_relations',
'field_type': 2, # 输出字段
'description': '被核查人员社会关系',
'default_value': '社会交往较多,人机关系基本正常'
},
{
'name': '被核查人员健康状况',
'field_code': 'target_health_status',
'field_type': 2, # 输出字段
'description': '被核查人员健康状况',
'default_value': '良好'
},
{
'name': '被核查人员性格特征',
'field_code': 'target_personality',
'field_type': 2, # 输出字段
'description': '被核查人员性格特征',
'default_value': '开朗'
},
{
'name': '被核查人员承受能力',
'field_code': 'target_tolerance',
'field_type': 2, # 输出字段
'description': '被核查人员承受能力',
'default_value': '较强'
},
{
'name': '被核查人员涉及问题严重程度',
'field_code': 'target_issue_severity',
'field_type': 2, # 输出字段
'description': '被核查人员涉及问题严重程度',
'default_value': '较轻'
},
{
'name': '被核查人员涉及其他问题的可能性',
'field_code': 'target_other_issues_possibility',
'field_type': 2, # 输出字段
'description': '被核查人员涉及其他问题的可能性',
'default_value': '较小'
},
{
'name': '被核查人员此前被审查情况',
'field_code': 'target_previous_investigation',
'field_type': 2, # 输出字段
'description': '被核查人员此前被审查情况',
'default_value': ''
},
{
'name': '被核查人员社会负面事件',
'field_code': 'target_negative_events',
'field_type': 2, # 输出字段
'description': '被核查人员社会负面事件',
'default_value': ''
},
{
'name': '被核查人员其他情况',
'field_code': 'target_other_situation',
'field_type': 2, # 输出字段
'description': '被核查人员其他情况',
'default_value': ''
},
{
'name': '风险等级',
'field_code': 'risk_level',
'field_type': 2, # 输出字段
'description': '风险等级',
'default_value': ''
}
]
# 文件配置
FILE_CONFIG = {
'name': '谈话前安全风险评估表',
'template_code': 'PRE_INTERVIEW_RISK_ASSESSMENT',
'file_path': '/templates/谈话前安全风险评估表模板.docx', # MinIO相对路径
'business_type': 'INVESTIGATION', # 调查核实
'parent_id': None # 顶级分类,可以根据实际情况设置
}
def generate_id():
"""生成ID使用时间戳+随机数的方式,模拟雪花算法)"""
import time
import random
timestamp = int(time.time() * 1000)
random_part = random.randint(100000, 999999)
return timestamp * 1000 + random_part
def init_fields(conn):
"""初始化字段数据"""
cursor = conn.cursor()
field_ids = {}
print("="*60)
print("开始初始化字段数据...")
print("="*60)
for field in FIELDS:
# 检查字段是否已存在
check_sql = """
SELECT id FROM f_polic_field
WHERE tenant_id = %s AND filed_code = %s
"""
cursor.execute(check_sql, (TENANT_ID, field['field_code']))
existing = cursor.fetchone()
if existing:
field_id = existing[0]
print(f"字段 '{field['name']}' (code: {field['field_code']}) 已存在ID: {field_id}")
else:
field_id = generate_id()
insert_sql = """
INSERT INTO f_polic_field
(id, tenant_id, name, filed_code, field_type, created_time, created_by, updated_time, updated_by, state)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
"""
cursor.execute(insert_sql, (
field_id,
TENANT_ID,
field['name'],
field['field_code'],
field['field_type'],
CURRENT_TIME,
CREATED_BY,
CURRENT_TIME,
CREATED_BY,
0 # state: 0表示未启用1表示启用
))
print(f"✓ 创建字段: {field['name']} (code: {field['field_code']}), 默认值: {field['default_value']}, ID: {field_id}")
field_ids[field['field_code']] = field_id
conn.commit()
return field_ids
def init_file_config(conn):
"""初始化文件配置"""
cursor = conn.cursor()
print("\n" + "="*60)
print("开始初始化文件配置...")
print("="*60)
# 检查文件配置是否已存在
check_sql = """
SELECT id FROM f_polic_file_config
WHERE tenant_id = %s AND name = %s
"""
cursor.execute(check_sql, (TENANT_ID, FILE_CONFIG['name']))
existing = cursor.fetchone()
if existing:
file_config_id = existing[0]
print(f"文件配置 '{FILE_CONFIG['name']}' 已存在ID: {file_config_id}")
else:
file_config_id = generate_id()
insert_sql = """
INSERT INTO f_polic_file_config
(id, tenant_id, parent_id, name, input_data, file_path, created_time, created_by, updated_time, updated_by, state)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
"""
# input_data字段存储模板编码和业务类型JSON格式
import json
input_data = json.dumps({
'template_code': FILE_CONFIG['template_code'],
'business_type': FILE_CONFIG['business_type']
}, ensure_ascii=False)
cursor.execute(insert_sql, (
file_config_id,
TENANT_ID,
FILE_CONFIG['parent_id'],
FILE_CONFIG['name'],
input_data,
FILE_CONFIG['file_path'],
CURRENT_TIME,
CREATED_BY,
CURRENT_TIME,
CREATED_BY,
1 # state: 1表示启用
))
print(f"✓ 创建文件配置: {FILE_CONFIG['name']}, ID: {file_config_id}")
conn.commit()
return file_config_id
def init_file_field_relations(conn, file_config_id, field_ids):
"""初始化文件和字段的关联关系"""
cursor = conn.cursor()
print("\n" + "="*60)
print("开始建立文件和字段的关联关系...")
print("="*60)
# 只关联输出字段field_type=2
output_fields = {k: v for k, v in field_ids.items()
if any(f['field_code'] == k and f['field_type'] == 2 for f in FIELDS)}
for field_code, field_id in output_fields.items():
# 检查关联关系是否已存在
check_sql = """
SELECT id FROM f_polic_file_field
WHERE tenant_id = %s AND filed_id = %s AND file_id = %s
"""
cursor.execute(check_sql, (TENANT_ID, field_id, file_config_id))
existing = cursor.fetchone()
if existing:
print(f"关联关系已存在: 文件ID {file_config_id} <-> 字段ID {field_id} ({field_code})")
else:
insert_sql = """
INSERT INTO f_polic_file_field
(tenant_id, filed_id, file_id, created_time, created_by, updated_time, updated_by, state)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
"""
cursor.execute(insert_sql, (
TENANT_ID,
field_id,
file_config_id,
CURRENT_TIME,
CREATED_BY,
CURRENT_TIME,
CREATED_BY,
0 # state: 0表示未启用1表示启用
))
field_name = next(f['name'] for f in FIELDS if f['field_code'] == field_code)
print(f"✓ 建立关联: {field_name} ({field_code})")
conn.commit()
def main():
"""主函数"""
try:
# 连接数据库
conn = pymysql.connect(**DB_CONFIG)
print("数据库连接成功!\n")
# 初始化字段
field_ids = init_fields(conn)
# 初始化文件配置
file_config_id = init_file_config(conn)
# 建立关联关系
init_file_field_relations(conn, file_config_id, field_ids)
print("\n" + "="*60)
print("初始化完成!")
print("="*60)
print(f"\n文件配置ID: {file_config_id}")
print(f"创建的字段数量: {len(field_ids)}")
print(f"建立的关联关系数量: {len([f for f in FIELDS if f['field_type'] == 2])}")
# 输出字段默认值信息
print("\n字段默认值配置:")
for field in FIELDS:
if field['field_type'] == 2:
print(f" - {field['name']} ({field['field_code']}): {field['default_value']}")
conn.close()
except Exception as e:
print(f"\n错误: {e}")
import traceback
traceback.print_exc()
if __name__ == '__main__':
main()