193 lines
5.7 KiB
Python
193 lines
5.7 KiB
Python
"""
|
||
将初步核实审批表模板上传到MinIO并更新数据库
|
||
"""
|
||
import pymysql
|
||
from minio import Minio
|
||
from minio.error import S3Error
|
||
from datetime import datetime
|
||
import os
|
||
from urllib.parse import urlparse
|
||
|
||
# MinIO连接配置
|
||
MINIO_CONFIG = {
|
||
'endpoint': 'minio.datacubeworld.com:9000',
|
||
'access_key': 'JOLXFXny3avFSzB0uRA5',
|
||
'secret_key': 'G1BR8jStNfovkfH5ou39EmPl34E4l7dGrnd3Cz0I',
|
||
'secure': True # 使用HTTPS
|
||
}
|
||
|
||
# 数据库连接配置
|
||
DB_CONFIG = {
|
||
'host': '152.136.177.240',
|
||
'port': 5012,
|
||
'user': 'finyx',
|
||
'password': '6QsGK6MpePZDE57Z',
|
||
'database': 'finyx',
|
||
'charset': 'utf8mb4'
|
||
}
|
||
|
||
# 固定值
|
||
TENANT_ID = 615873064429507639
|
||
UPDATED_BY = 655162080928945152
|
||
CURRENT_TIME = datetime.now()
|
||
|
||
# 文件配置
|
||
TEMPLATE_FILE = '模板/初步核实审批表模板.docx'
|
||
BUCKET_NAME = 'finyx' # 存储桶名称
|
||
TENANT_ID = '615873064429507639'
|
||
# MinIO中的对象名称(相对路径),按照现有目录结构组织
|
||
from datetime import datetime
|
||
now = datetime.now()
|
||
OBJECT_NAME = f'{TENANT_ID}/TEMPLATE/{now.year}/{now.month:02d}/初步核实审批表模板.docx'
|
||
|
||
|
||
def upload_to_minio():
|
||
"""上传文件到MinIO"""
|
||
print("="*60)
|
||
print("开始上传文件到MinIO...")
|
||
print("="*60)
|
||
|
||
try:
|
||
# 创建MinIO客户端
|
||
client = Minio(
|
||
MINIO_CONFIG['endpoint'],
|
||
access_key=MINIO_CONFIG['access_key'],
|
||
secret_key=MINIO_CONFIG['secret_key'],
|
||
secure=MINIO_CONFIG['secure']
|
||
)
|
||
|
||
# 检查存储桶是否存在
|
||
found = client.bucket_exists(BUCKET_NAME)
|
||
if not found:
|
||
raise Exception(f"存储桶 '{BUCKET_NAME}' 不存在,请先创建")
|
||
else:
|
||
print(f"✓ 存储桶 '{BUCKET_NAME}' 已存在")
|
||
|
||
# 检查文件是否存在
|
||
if not os.path.exists(TEMPLATE_FILE):
|
||
raise FileNotFoundError(f"模板文件不存在: {TEMPLATE_FILE}")
|
||
|
||
file_size = os.path.getsize(TEMPLATE_FILE)
|
||
print(f"\n文件信息:")
|
||
print(f" 本地路径: {TEMPLATE_FILE}")
|
||
print(f" 文件大小: {file_size} 字节")
|
||
print(f" 存储桶: {BUCKET_NAME}")
|
||
print(f" 对象名称: {OBJECT_NAME}")
|
||
|
||
# 上传文件
|
||
print(f"\n正在上传文件...")
|
||
client.fput_object(
|
||
BUCKET_NAME,
|
||
OBJECT_NAME,
|
||
TEMPLATE_FILE,
|
||
content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document'
|
||
)
|
||
|
||
# 生成访问URL(相对路径,用于数据库存储)
|
||
# 根据接口文档,file_path应该存储相对路径(不包含存储桶名称)
|
||
file_path = f"/{OBJECT_NAME}"
|
||
|
||
print(f"✓ 文件上传成功!")
|
||
print(f" 文件路径(相对): {file_path}")
|
||
|
||
return file_path
|
||
|
||
except S3Error as e:
|
||
print(f"MinIO错误: {e}")
|
||
raise
|
||
except Exception as e:
|
||
print(f"上传文件时发生错误: {e}")
|
||
raise
|
||
|
||
|
||
def update_database(file_path):
|
||
"""更新数据库中的文件路径"""
|
||
print("\n" + "="*60)
|
||
print("开始更新数据库...")
|
||
print("="*60)
|
||
|
||
try:
|
||
conn = pymysql.connect(**DB_CONFIG)
|
||
cursor = conn.cursor()
|
||
|
||
# 查找初步核实审批表的配置记录
|
||
select_sql = """
|
||
SELECT id, name, file_path
|
||
FROM f_polic_file_config
|
||
WHERE tenant_id = %s AND name = '初步核实审批表'
|
||
"""
|
||
cursor.execute(select_sql, (TENANT_ID,))
|
||
record = cursor.fetchone()
|
||
|
||
if not record:
|
||
print("错误: 未找到'初步核实审批表'的配置记录")
|
||
print("请先运行 init_preliminary_verification_fields.py 创建配置记录")
|
||
conn.close()
|
||
return False
|
||
|
||
record_id, record_name, old_path = record
|
||
print(f"找到配置记录:")
|
||
print(f" ID: {record_id}")
|
||
print(f" 名称: {record_name}")
|
||
print(f" 旧路径: {old_path}")
|
||
print(f" 新路径: {file_path}")
|
||
|
||
# 更新文件路径
|
||
update_sql = """
|
||
UPDATE f_polic_file_config
|
||
SET file_path = %s, updated_time = %s, updated_by = %s
|
||
WHERE id = %s AND tenant_id = %s
|
||
"""
|
||
cursor.execute(update_sql, (file_path, CURRENT_TIME, UPDATED_BY, record_id, TENANT_ID))
|
||
conn.commit()
|
||
|
||
print(f"\n✓ 数据库更新成功!")
|
||
|
||
# 验证更新
|
||
cursor.execute(select_sql, (TENANT_ID,))
|
||
updated_record = cursor.fetchone()
|
||
if updated_record and updated_record[2] == file_path:
|
||
print(f"✓ 验证成功: 文件路径已更新为 {updated_record[2]}")
|
||
else:
|
||
print(f"⚠ 警告: 验证失败,请手动检查")
|
||
|
||
conn.close()
|
||
return True
|
||
|
||
except Exception as e:
|
||
print(f"更新数据库时发生错误: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
return False
|
||
|
||
|
||
def main():
|
||
"""主函数"""
|
||
try:
|
||
# 上传文件到MinIO
|
||
file_path = upload_to_minio()
|
||
|
||
# 更新数据库
|
||
success = update_database(file_path)
|
||
|
||
if success:
|
||
print("\n" + "="*60)
|
||
print("所有操作完成!")
|
||
print("="*60)
|
||
print(f"\n文件已上传到MinIO,路径: {file_path}")
|
||
print(f"数据库已更新")
|
||
else:
|
||
print("\n" + "="*60)
|
||
print("操作完成,但数据库更新失败,请检查")
|
||
print("="*60)
|
||
|
||
except Exception as e:
|
||
print(f"\n错误: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
|
||
|
||
if __name__ == '__main__':
|
||
main()
|
||
|