huangjijingshi/server.py

121 lines
4.1 KiB
Python
Raw Normal View History

2025-05-06 17:57:27 +08:00
from flask import Flask, request, jsonify, render_template
import subprocess
import sys
from datetime import datetime
import os
import json
2025-05-12 13:50:21 +08:00
# 在server.py顶部添加
import pandas as pd
import logging
from logging.handlers import RotatingFileHandler
import time
2025-05-06 17:57:27 +08:00
app = Flask(__name__)
2025-05-12 13:50:21 +08:00
# 在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__)
2025-05-06 17:57:27 +08:00
@app.route('/')
def home():
return render_template('index.html')
@app.route('/calculate', methods=['POST'])
def calculate():
2025-05-12 13:50:21 +08:00
start_time = time.time()
logger.info("开始处理计算请求")
2025-05-06 17:57:27 +08:00
date_str = request.form.get('date')
2025-05-12 13:50:21 +08:00
time_str = request.form.get('time', '00:00:00')
2025-05-06 17:57:27 +08:00
try:
# 验证日期和时间格式
2025-05-12 13:50:21 +08:00
datetime.strptime(date_str, '%Y-%m-%d')
datetime.strptime(time_str, '%H:%M:%S')
2025-05-06 17:57:27 +08:00
datetime_str = f"{date_str} {time_str}"
api_path = os.path.join(os.path.dirname(__file__), 'API.py')
2025-05-12 13:50:21 +08:00
logger.info(f"准备调用API.py参数: {datetime_str}")
api_start = time.time()
2025-05-06 17:57:27 +08:00
result = subprocess.run(
[sys.executable, api_path, datetime_str],
capture_output=True,
2025-05-12 13:50:21 +08:00
text=True,
2025-05-06 17:57:27 +08:00
check=True
)
2025-05-12 13:50:21 +08:00
api_time = time.time() - api_start
logger.info(f"API.py执行完成耗时: {api_time:.2f}")
2025-05-06 17:57:27 +08:00
2025-05-12 13:50:21 +08:00
logger.debug("=== API.py 原始输出 ===")
logger.debug(f"stdout: {result.stdout[:200]}...") # 只记录前200字符
logger.debug(f"stderr: {result.stderr[:200]}...")
2025-05-06 17:57:27 +08:00
try:
2025-05-12 13:50:21 +08:00
json_start = time.time()
2025-05-06 17:57:27 +08:00
json_output = json.loads(result.stdout)
2025-05-12 13:50:21 +08:00
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}")
2025-05-06 17:57:27 +08:00
return jsonify({'success': True, 'result': json_output})
2025-05-12 13:50:21 +08:00
2025-05-06 17:57:27 +08:00
except json.JSONDecodeError as e:
2025-05-12 13:50:21 +08:00
error_msg = f'JSON解析失败: {str(e)}'
logger.error(error_msg)
logger.error(f"原始输出: {result.stdout[:500]}")
2025-05-06 17:57:27 +08:00
return jsonify({
'success': False,
2025-05-12 13:50:21 +08:00
'error': error_msg,
'raw_output': result.stdout[:500]
2025-05-06 17:57:27 +08:00
})
2025-05-12 13:50:21 +08:00
except ValueError as e:
error_msg = f'无效的日期格式: {str(e)}'
logger.error(error_msg)
return jsonify({'success': False, 'error': error_msg})
2025-05-06 17:57:27 +08:00
except subprocess.CalledProcessError as e:
2025-05-12 13:50:21 +08:00
error_msg = f'计算失败: {e.stderr}'
logger.error(error_msg)
logger.error(f"stdout: {e.stdout[:500]}")
2025-05-06 17:57:27 +08:00
return jsonify({
'success': False,
2025-05-12 13:50:21 +08:00
'error': error_msg,
'stdout': e.stdout[:500]
2025-05-06 17:57:27 +08:00
})
2025-05-12 13:50:21 +08:00
2025-05-06 17:57:27 +08:00
except Exception as e:
2025-05-12 13:50:21 +08:00
error_msg = f'服务器错误: {str(e)}'
logger.error(error_msg, exc_info=True)
return jsonify({'success': False, 'error': error_msg})
2025-05-06 17:57:27 +08:00
if __name__ == '__main__':
app.run(debug=True,host='0.0.0.0',port=5000)