from flask import Flask, request, jsonify, render_template import subprocess import sys from datetime import datetime import os import json # 在server.py顶部添加 import pandas as pd import logging from logging.handlers import RotatingFileHandler import time app = Flask(__name__) # 在Flask应用初始化后添加 @app.before_first_request def load_batch_data(): # 读取批文Excel文件 batch_path = r'C:\Users\24011\Documents\WeChat Files\wxid_k4ep58f81rx421\FileStorage\File\2025-04\tuigua_huangjijingshi - 副本\tuigua_huangjijingshi - 副本\python1\批文.xlsx' app.batch_data = pd.read_excel(batch_path) # 在 Flask 应用初始化后添加日志配置 def setup_logging(): # 创建日志目录(如果不存在) log_dir = os.path.join(os.path.dirname(__file__), 'logs') os.makedirs(log_dir, exist_ok=True) # 配置根日志 logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ RotatingFileHandler( os.path.join(log_dir, 'app.log'), maxBytes=1024*1024*5, # 5MB backupCount=5 ), logging.StreamHandler() ] ) # 在应用初始化后调用 setup_logging() logger = logging.getLogger(__name__) @app.route('/') def home(): return render_template('index.html') @app.route('/calculate', methods=['POST']) def calculate(): start_time = time.time() logger.info("开始处理计算请求") date_str = request.form.get('date') time_str = request.form.get('time', '00:00:00') try: # 验证日期和时间格式 datetime.strptime(date_str, '%Y-%m-%d') datetime.strptime(time_str, '%H:%M:%S') datetime_str = f"{date_str} {time_str}" api_path = os.path.join(os.path.dirname(__file__), 'API.py') logger.info(f"准备调用API.py,参数: {datetime_str}") api_start = time.time() result = subprocess.run( [sys.executable, api_path, datetime_str], capture_output=True, text=True, check=True ) api_time = time.time() - api_start logger.info(f"API.py执行完成,耗时: {api_time:.2f}秒") logger.debug("=== API.py 原始输出 ===") logger.debug(f"stdout: {result.stdout[:200]}...") # 只记录前200字符 logger.debug(f"stderr: {result.stderr[:200]}...") try: json_start = time.time() json_output = json.loads(result.stdout) json_time = time.time() - json_start logger.info(f"JSON解析完成,耗时: {json_time:.2f}秒") total_time = time.time() - start_time logger.info(f"请求处理完成,总耗时: {total_time:.2f}秒") return jsonify({'success': True, 'result': json_output}) except json.JSONDecodeError as e: error_msg = f'JSON解析失败: {str(e)}' logger.error(error_msg) logger.error(f"原始输出: {result.stdout[:500]}") return jsonify({ 'success': False, 'error': error_msg, 'raw_output': result.stdout[:500] }) except ValueError as e: error_msg = f'无效的日期格式: {str(e)}' logger.error(error_msg) return jsonify({'success': False, 'error': error_msg}) except subprocess.CalledProcessError as e: error_msg = f'计算失败: {e.stderr}' logger.error(error_msg) logger.error(f"stdout: {e.stdout[:500]}") return jsonify({ 'success': False, 'error': error_msg, 'stdout': e.stdout[:500] }) except Exception as e: error_msg = f'服务器错误: {str(e)}' logger.error(error_msg, exc_info=True) return jsonify({'success': False, 'error': error_msg}) if __name__ == '__main__': app.run(debug=True,host='0.0.0.0',port=5000)