import concurrent.futures import json import time from flask_app.货物标.技术要求提取 import get_technical_requirements from flask_app.main.通义千问long import upload_file from flask_app.货物标.商务服务其他要求提取 import get_business_requirements from flask_app.main.json_utils import nest_json_under_key #获取采购清单 def fetch_procurement_reqs(truncate_file): # 定义默认的 procurement_reqs 字典 DEFAULT_PROCUREMENT_REQS = { "技术要求": "", "商务要求": "", "服务要求": "", "其他要求": "" } # 如果 truncate_file 是空字符串,直接返回包含空字符串的字典 if not truncate_file: return DEFAULT_PROCUREMENT_REQS.copy() try: # 上传文件并获取 file_id file_id = upload_file(truncate_file) # 使用 ThreadPoolExecutor 并行处理 get_technical_requirements 和 get_business_requirements with concurrent.futures.ThreadPoolExecutor() as executor: # 提交任务给线程池 future_technical = executor.submit(get_technical_requirements, file_id) time.sleep(1) # 如果需要延迟,可以保留,否则建议移除以提高效率 future_business = executor.submit(get_business_requirements, truncate_file, file_id) # 获取并行任务的结果 technical_requirements = future_technical.result() business_requirements = future_business.result() # 构建最终的嵌套结构,确保四个键平级 procurement_reqs = { "技术要求": technical_requirements.get("技术要求", {}), "商务要求": business_requirements.get("商务要求", {}), "服务要求": business_requirements.get("服务要求", {}), "其他要求": business_requirements.get("其他要求", {}) } return procurement_reqs except Exception as e: print(f"Error in fetch_procurement_reqs: {e}") # 在出错时返回默认的包含空字符串的字典 return DEFAULT_PROCUREMENT_REQS.copy() if __name__ == "__main__": output_folder = "C:\\Users\\Administrator\\Desktop\\货物标\\货物标output" # file_path="C:\\Users\\Administrator\\Desktop\\货物标\\output1\\2-招标文件(2020年广水市中小学教师办公电脑系统及多媒体“班班通”设备采购安装项目)_procurement.pdf" file_path="C:\\Users\\Administrator\\Desktop\\货物标\\output1\\磋商文件_procurement.pdf" res=fetch_procurement_reqs(file_path) print(json.dumps(res, ensure_ascii=False, indent=4))