""" 将初步核实审批表模板上传到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()