商务技术评分能处理多评分表情况,规范响应返回接口,判断上传文件是否为招标文件
This commit is contained in:
parent
713bb0162b
commit
fc67ef8e52
@ -1,12 +1,10 @@
|
||||
# flask_app/routes/get_deviation.py
|
||||
|
||||
from flask import Blueprint, jsonify, Response, g
|
||||
import json
|
||||
import os
|
||||
from flask_app.general.format_change import download_file
|
||||
from flask_app.routes.upload import create_response, sse_format
|
||||
from flask_app.routes.偏离表main import get_tech_and_business_deviation
|
||||
from flask_app.routes.utils import generate_deviation_response, validate_and_setup_logger
|
||||
from flask_app.routes.utils import generate_deviation_response, validate_and_setup_logger,create_response,sse_format
|
||||
from flask_app.ConnectionLimiter import require_connection_limit
|
||||
get_deviation_bp = Blueprint('get_deviation', __name__)
|
||||
|
||||
@ -29,7 +27,7 @@ def get_deviation():
|
||||
status='error',
|
||||
data=''
|
||||
)
|
||||
yield sse_format(**response)
|
||||
yield sse_format(response)
|
||||
return # 终止生成器
|
||||
# 直接下载并处理文件
|
||||
filename = "ztbfile"
|
||||
@ -43,7 +41,7 @@ def get_deviation():
|
||||
status='error',
|
||||
data=''
|
||||
)
|
||||
yield sse_format(**response)
|
||||
yield sse_format(response)
|
||||
return # 终止生成器
|
||||
|
||||
logger.info("Local file path: " + downloaded_filepath)
|
||||
@ -54,12 +52,13 @@ def get_deviation():
|
||||
)
|
||||
|
||||
if deviations is None:
|
||||
logger.info(f"上传的文件非招标文件或文件内容不完整!")
|
||||
response = create_response(
|
||||
message='上传的文件非招标文件或文件内容不完整!',
|
||||
status='error',
|
||||
data=''
|
||||
)
|
||||
yield sse_format(**response)
|
||||
yield sse_format(response)
|
||||
return # 终止生成器
|
||||
|
||||
# 解包返回值
|
||||
@ -80,13 +79,13 @@ def get_deviation():
|
||||
}
|
||||
|
||||
# 流式返回数据
|
||||
yield sse_format(**tech_deviation_response)
|
||||
yield sse_format(**tech_deviation_star_response)
|
||||
yield sse_format(**zigefuhe_deviation_response)
|
||||
yield sse_format(**shangwu_deviation_response)
|
||||
yield sse_format(**shangwu_star_deviation_response)
|
||||
yield sse_format(**proof_materials_response)
|
||||
yield sse_format(**final_response)
|
||||
yield sse_format(tech_deviation_response)
|
||||
yield sse_format(tech_deviation_star_response)
|
||||
yield sse_format(zigefuhe_deviation_response)
|
||||
yield sse_format(shangwu_deviation_response)
|
||||
yield sse_format(shangwu_star_deviation_response)
|
||||
yield sse_format(proof_materials_response)
|
||||
yield sse_format(final_response)
|
||||
|
||||
except Exception as e:
|
||||
logger.error('发生异常: ' + str(e))
|
||||
@ -95,7 +94,7 @@ def get_deviation():
|
||||
status='error',
|
||||
data=''
|
||||
)
|
||||
yield sse_format(**response)
|
||||
yield sse_format(response)
|
||||
|
||||
return Response(generate(), mimetype='text/event-stream')
|
||||
|
||||
|
@ -48,6 +48,7 @@ def little_zbparse():
|
||||
final_json_path = download_and_process_file(file_url, zb_type)
|
||||
|
||||
if not final_json_path:
|
||||
logger.info(f"上传的文件非招标文件或文件内容不完整!")
|
||||
return create_response(
|
||||
message='上传的文件非招标文件或文件内容不完整!',
|
||||
status='error',
|
||||
|
@ -3,43 +3,13 @@ from flask import Blueprint, request, jsonify,g
|
||||
import json
|
||||
import os
|
||||
import time
|
||||
|
||||
from flask_app.general.format_change import download_file
|
||||
from flask_app.routes.工程标解析main import engineering_bid_main
|
||||
from flask_app.routes.货物标解析main import goods_bid_main
|
||||
from flask_app.general.post_processing import outer_post_processing
|
||||
from flask_app.routes.utils import generate_deviation_response, validate_and_setup_logger
|
||||
from flask_app.routes.utils import generate_deviation_response, validate_and_setup_logger,create_response,sse_format
|
||||
from flask_app.ConnectionLimiter import require_connection_limit
|
||||
|
||||
|
||||
def create_response(message, status, data):
|
||||
"""
|
||||
创建一个统一格式的响应字典。
|
||||
|
||||
:param message: 响应消息
|
||||
:param status: 响应状态(如 'success', 'error', 'processing')
|
||||
:param data: 具体的数据内容
|
||||
:return: 字典格式的响应
|
||||
"""
|
||||
return {
|
||||
'message': message,
|
||||
'status': status,
|
||||
'data': data
|
||||
}
|
||||
|
||||
|
||||
def sse_format(message, status, data):
|
||||
"""
|
||||
将响应格式化为 Server-Sent Events (SSE) 的格式。
|
||||
|
||||
:param message: 响应消息
|
||||
:param status: 响应状态(如 'success', 'error', 'processing')
|
||||
:param data: 具体的数据内容
|
||||
:return: 格式化后的 SSE 字符串
|
||||
"""
|
||||
response = create_response(message, status, data)
|
||||
return f"data: {json.dumps(response, ensure_ascii=False)}\n\n"
|
||||
|
||||
upload_bp = Blueprint('upload', __name__)
|
||||
@upload_bp.route('/upload', methods=['POST'])
|
||||
@validate_and_setup_logger
|
||||
@ -91,7 +61,7 @@ def process_and_stream(file_url, zb_type):
|
||||
status='error',
|
||||
data=''
|
||||
)
|
||||
yield sse_format(**error_response)
|
||||
yield sse_format(error_response)
|
||||
return
|
||||
|
||||
downloaded_filepath, file_type = downloaded
|
||||
@ -103,7 +73,7 @@ def process_and_stream(file_url, zb_type):
|
||||
status='error',
|
||||
data=''
|
||||
)
|
||||
yield sse_format(**error_response)
|
||||
yield sse_format(error_response)
|
||||
return
|
||||
|
||||
logger.info("本地文件路径: " + downloaded_filepath)
|
||||
@ -131,13 +101,13 @@ def process_and_stream(file_url, zb_type):
|
||||
|
||||
if 'error' in parsed_data:
|
||||
# 适当处理错误
|
||||
logger.error(f"处理错误: {parsed_data['error']}")
|
||||
logger.error("上传的文件非招标文件或文件内容不完整!")
|
||||
response = create_response(
|
||||
message='上传的文件非招标文件或文件内容不完整!',
|
||||
status='error',
|
||||
data=''
|
||||
)
|
||||
yield sse_format(**response)
|
||||
yield sse_format(response)
|
||||
return # 直接返回,终止生成器
|
||||
|
||||
if 'good_list' in parsed_data:
|
||||
@ -154,7 +124,7 @@ def process_and_stream(file_url, zb_type):
|
||||
status='success',
|
||||
data=data
|
||||
)
|
||||
yield sse_format(**response)
|
||||
yield sse_format(response)
|
||||
|
||||
base_end_time = time.time()
|
||||
logger.info(f"分段解析完成,耗时:{base_end_time - start_time:.2f} 秒")
|
||||
@ -170,12 +140,12 @@ def process_and_stream(file_url, zb_type):
|
||||
proof_materials, logger)
|
||||
|
||||
# 使用通用响应函数
|
||||
yield sse_format(**tech_deviation_response)
|
||||
yield sse_format(**tech_deviation_star_response)
|
||||
yield sse_format(**zigefuhe_deviation_response)
|
||||
yield sse_format(**shangwu_deviation_response)
|
||||
yield sse_format(**shangwu_star_deviation_response)
|
||||
yield sse_format(**proof_materials_response)
|
||||
yield sse_format(tech_deviation_response)
|
||||
yield sse_format(tech_deviation_star_response)
|
||||
yield sse_format(zigefuhe_deviation_response)
|
||||
yield sse_format(shangwu_deviation_response)
|
||||
yield sse_format(shangwu_star_deviation_response)
|
||||
yield sse_format(proof_materials_response)
|
||||
|
||||
try:
|
||||
with open(extracted_info_path, 'w', encoding='utf-8') as json_file:
|
||||
@ -196,21 +166,21 @@ def process_and_stream(file_url, zb_type):
|
||||
status='success',
|
||||
data=json.dumps(extracted_info, ensure_ascii=False)
|
||||
)
|
||||
yield sse_format(**extracted_info_response)
|
||||
yield sse_format(extracted_info_response)
|
||||
|
||||
complete_response = create_response(
|
||||
message='Combined_data',
|
||||
status='success',
|
||||
data=json.dumps(final_result, ensure_ascii=False)
|
||||
)
|
||||
yield sse_format(**complete_response)
|
||||
yield sse_format(complete_response)
|
||||
|
||||
final_response = create_response(
|
||||
message='文件上传并处理成功',
|
||||
status='success',
|
||||
data='END'
|
||||
)
|
||||
yield sse_format(**final_response)
|
||||
yield sse_format(final_response)
|
||||
|
||||
finally:
|
||||
end_time = time.time()
|
||||
|
@ -143,3 +143,25 @@ def perform_cleanup(output_folder, logger):
|
||||
logger.info("清理完毕!")
|
||||
except Exception as e:
|
||||
logger.error(f"清理过程中发生异常: {str(e)}")
|
||||
|
||||
def create_response(message, status, data):
|
||||
"""
|
||||
创建一个统一格式的响应字典。
|
||||
|
||||
:param message: 响应消息
|
||||
:param status: 响应状态(如 'success', 'error', 'processing')
|
||||
:param data: 具体的数据内容
|
||||
:return: 字典格式的响应
|
||||
"""
|
||||
return {
|
||||
'message': message,
|
||||
'status': status,
|
||||
'data': data
|
||||
}
|
||||
|
||||
|
||||
def sse_format(response):
|
||||
"""
|
||||
将响应格式化为 Server-Sent Events (SSE) 的格式。
|
||||
"""
|
||||
return f"data: {json.dumps(response, ensure_ascii=False)}\n\n"
|
Loading…
x
Reference in New Issue
Block a user