zbparse/flask_app/routes/test_zbparse.py

205 lines
9.5 KiB
Python
Raw Permalink Normal View History

# flask_app/routes/test_zbparse.py
2024-11-26 11:32:24 +08:00
from flask import Blueprint, Response, stream_with_context, current_app, jsonify
import json
import time
2024-11-26 11:32:24 +08:00
from flask_app.routes.utils import validate_and_setup_logger
test_zbparse_bp = Blueprint('test_zbparse', __name__)
@test_zbparse_bp.route('/api/test_zbparse', methods=['POST'])
2024-11-26 11:32:24 +08:00
@validate_and_setup_logger
def test_zbparse():
try:
return Response(stream_with_context(test_process_and_stream()), content_type='text/event-stream')
except Exception as e:
# 使用 Flask 应用的日志记录器
current_app.logger.error('Exception occurred: ' + str(e))
return jsonify({'error': str(e)}), 500
def test_process_and_stream():
data_segments = [
{
"base_info": {
"基础信息": {
"project_name": "测试项目1",
"project_code": "TP001",
"project_manager": "张三",
"start_date": "2024-01-10",
"end_date": "2024-12-31"
}
}
},
{
"qualification_review": {
"资格审查": {
"review_criteria": ["公司资质", "过往业绩", "财务报表"],
"required_documents": ["营业执照", "资质证书", "近三年财务报告"],
"minimum_requirements": {
"company_age": "至少5年",
"past_projects": "至少3个大型项目"
}
}
}
},
{
"technical_standards": {
"技术标": {
"technical_requirements": ["设备质量要求", "施工工艺", "安全标准"],
"materials_list": ["钢筋", "水泥", "电缆"],
"equipment_specs": {
"excavator": "型号X123",
"concrete_mixer": "型号Y456"
}
}
}
},
{
"commercial_standards": {
"商务标": {
"pricing_method": "固定总价",
"payment_schedule": ["30%合同签订", "40%中期支付", "30%项目完成支付"],
"contract_conditions": {
"warranty_period": "2年",
"penalty_clauses": "延期每周罚款5%"
}
}
}
},
{
"invalid_requirements": {
"无效标与废标项": {
"common_issues": ["未按要求提交保证金", "技术标不达标"],
"invalidation_reasons": {
"missing_documents": "缺少必要文件",
"unqualified_technical_specs": "技术规格不合要求"
}
}
}
},
{
"bidding_documents_requirements": {
"投标文件要求": {
"file_format": "PDF",
"submission_deadline": "2024-08-01 17:00",
"submission_location": "北京市某某大厦5楼",
"required_sections": ["公司简介", "技术方案", "商务报价"]
}
}
},
{
"opening_bid": {
"开评定标流程": {
"bid_opening_time": "2024-09-01 10:00",
"location": "会议室A",
"evaluation_criteria": ["价格", "技术能力", "项目经验"],
"evaluation_process": {
"first_round": "资格审查",
"second_round": "技术评分",
"final_round": "商务报价评定"
}
}
}
}
]
filename = "test_file.pdf"
for i, data in enumerate(data_segments, 1):
response = {
'message': f'Processing segment {i}',
'filename': filename,
'data': data
}
yield f"data: {json.dumps(response, ensure_ascii=False)}\n\n"
time.sleep(3) # 每隔3秒发送一段数据
combined_data = {}
for segment in data_segments:
for outer_key, inner_dict in segment.items():
inner_key, inner_value = next(iter(inner_dict.items()))
combined_data[inner_key] = inner_value
procurement_reqs = {
"采购项目": "混凝土",
"数量": "500立方米",
"规格": "C30"
}
tech_deviation_response = {
'message': 'procurement_reqs',
'filename': filename,
'data': json.dumps(procurement_reqs, ensure_ascii=False)
}
zige_deviation_table = {
"资格性检查": ["具有独立承担民事责任的能力;", "具有良好的商业信誉和健全的财务会计制度;",
"具有履行合同所必需的设备和专业技术能力;", "有依法缴纳税收和社会保障资金的良好记录;",
"参加政府采购活动前三年内,在经营活动中没有重大违法记录;"]
}
fuhe_deviation_table = {
"符合性检查": ["符合竞争性磋商文件第一部分竞争性磋商公告“六、其它补充事宜”第 1、2 条要求。",
"响应性文件签字和盖章齐全。", "满足磋商有效期。",
"供应商所提交的报价表未出现两个或两个以上不同报价。"]
}
shangwu_deviation_table = {
"商务要求偏离表": ["交货期(工期):合同签订之日起 15 个日历天内完成,并通过项目验收。", "采购人指定地点",
"本项目报价须为固定总价,包含但不限于:采购、实施、调试、试运行、验收、运维等所有完成本项目相关的一切费用。",
"项目质保期为一年,服务内容包括项目所有硬件和软件,质保期自项目验收合格后起算。",
"中标人在合同约定时间内完成所供货物的安装集成并投入正常使用,经采购人组织验收(终验)合格后,按合同约定及相关规定支付货款。"]
}
shangwu_star_deviation_table = {
"商务带星要求偏离表": ["交货期(工期):合同签订之日起 15 个日历天内完成,并通过项目验收。", "采购人指定地点",
"本项目报价须为固定总价,包含但不限于:采购、实施、调试、试运行、验收、运维等所有完成本项目相关的一切费用。",
"项目质保期为一年,服务内容包括项目所有硬件和软件,质保期自项目验收合格后起算。",
"中标人在合同约定时间内完成所供货物的安装集成并投入正常使用,经采购人组织验收(终验)合格后,按合同约定及相关规定支付货款。"]
}
jishu_star_deviation_table = {
"高清数字枪机": ["6、▲补光距离:红外光最远可达 30 m白光最远可达 30 m", "▲音频: 1个内置麦克风"],
"高清数字半球机": ["▲音频:内置 1个麦克风", "▲供电方式: DC12 V ± 25%,支持防反接保护; PoE 802.3afClass 3"],
"网络硬盘录像机": ["▲可接入 1T、2T、3T、4T、6T、8T、10T、12TB、14TB、16TB、 18TB、20TB容量的 SATA接口硬盘",
"▲样机可在预览界面随意选择一个或多个通道,在预警面板实 时展示此通道的目标抓拍信息,包括:事件名称、事件触发时间、 人脸抓图;针对人脸比对同时显示姓名、相似度;针对车辆报警 同时显示车牌;针对人体和车辆目标,可分别显示“人体”、“车 辆”。",
"▲具有存储安全保障功能,当存储压力过高或硬盘出现性能 不足时,可优先录像业务存储;"]
}
zigefuhe_deviation_response = {
'message': 'zigefuhe_deviation',
'filename': filename,
'data': json.dumps(zige_deviation_table, ensure_ascii=False)
}
shangwu_deviation_response = {
'message': 'shangwu_deviation',
'filename': filename,
'data': json.dumps(shangwu_deviation_table, ensure_ascii=False)
}
shangwu_star_deviation_response = {
'message': 'shangwu_star_deviation',
'filename': filename,
'data': json.dumps(shangwu_star_deviation_table, ensure_ascii=False)
}
jishu_star_deviation_response = {
'message': 'jishu_star_deviation',
'filename': filename,
'data': json.dumps(jishu_star_deviation_table, ensure_ascii=False)
}
yield f"data:{json.dumps(zigefuhe_deviation_response, ensure_ascii=False)}\n\n"
yield f"data:{json.dumps(shangwu_deviation_response, ensure_ascii=False)}\n\n"
yield f"data:{json.dumps(shangwu_star_deviation_response, ensure_ascii=False)}\n\n"
yield f"data:{json.dumps(jishu_star_deviation_response, ensure_ascii=False)}\n\n"
yield f"data: {json.dumps(tech_deviation_response, ensure_ascii=False)}\n\n"
complete_response = {
'message': 'Combined data',
'filename': filename,
'data': combined_data
}
yield f"data: {json.dumps(complete_response, ensure_ascii=False)}\n\n"
final_response = {
'message': 'File processed successfully',
'filename': filename,
'data': 'END'
}
yield f"data: {json.dumps(final_response, ensure_ascii=False)}\n\n"