huangjijingshi/server.py
2025-05-12 13:50:21 +08:00

121 lines
4.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)