# flask_app/routes/test_zbparse.py from flask import Blueprint, Response, stream_with_context, current_app, jsonify import json import time 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']) @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个麦克风", "▲供电方式: DC:12 V ± 25%,支持防反接保护; PoE: 802.3af,Class 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"