Commit 51baad37 by yiling.shen

添加回访记录API到auth_system;支持内存存储作为数据库备用方案

parent 6f95a187
...@@ -13,6 +13,15 @@ import time ...@@ -13,6 +13,15 @@ import time
from flask import Flask, request, jsonify, session, redirect, render_template_string, send_file, url_for from flask import Flask, request, jsonify, session, redirect, render_template_string, send_file, url_for
from datetime import datetime, timedelta from datetime import datetime, timedelta
# 尝试导入回访记录相关模块
try:
from callback_record_mysql import MySQLCallbackRecordManager, CallbackRecord
from database_config import DatabaseConfig
CALLBACK_AVAILABLE = True
except ImportError as e:
print(f"⚠️ 回访记录模块导入失败: {e}")
CALLBACK_AVAILABLE = False
# 尝试导入clinic_config,如果失败则使用默认配置 # 尝试导入clinic_config,如果失败则使用默认配置
try: try:
from clinic_config import DEFAULT_USERS, get_user_by_username, get_clinic_info from clinic_config import DEFAULT_USERS, get_user_by_username, get_clinic_info
...@@ -172,11 +181,36 @@ class AuthSystem: ...@@ -172,11 +181,36 @@ class AuthSystem:
# 创建Flask应用 # 创建Flask应用
app = Flask(__name__) app = Flask(__name__)
app.secret_key = os.environ.get('SECRET_KEY', 'dev_secret_key_2024') app.secret_key = os.getenv('SECRET_KEY', 'dev_secret_key_2024')
# 创建认证系统实例 # 初始化认证系统
auth_system = AuthSystem() auth_system = AuthSystem()
# 初始化回访记录管理器
db_manager = None
# 临时存储(当数据库不可用时使用)
temp_callback_records = {}
if CALLBACK_AVAILABLE:
try:
# 直接使用环境变量构建数据库配置
db_config = {
'host': os.getenv('DB_HOST', 'mysql'),
'port': int(os.getenv('DB_PORT', '3306')),
'user': os.getenv('DB_USER', 'callback_user'),
'password': os.getenv('DB_PASSWORD', ''),
'database': os.getenv('DB_NAME', 'callback_system'),
'charset': 'utf8mb4'
}
print(f"尝试连接数据库: {db_config['host']}:{db_config['port']}")
db_manager = MySQLCallbackRecordManager(db_config)
print("✅ 回访记录数据库管理器初始化成功")
except Exception as e:
print(f"⚠️ 回访记录数据库管理器初始化失败: {e}")
print("将使用临时内存存储")
db_manager = None
# 登录页面HTML模板 # 登录页面HTML模板
LOGIN_HTML = ''' LOGIN_HTML = '''
<!DOCTYPE html> <!DOCTYPE html>
...@@ -303,6 +337,113 @@ LOGIN_HTML = ''' ...@@ -303,6 +337,113 @@ LOGIN_HTML = '''
</html> </html>
''' '''
@app.route('/api/health', methods=['GET'])
def health_check():
"""健康检查端点"""
return jsonify({
'status': 'ok',
'timestamp': datetime.now().isoformat(),
'service': 'auth_system',
'version': '1.0.0'
})
@app.route('/api/callback-records', methods=['POST'])
def save_callback_record():
"""保存回访记录API"""
try:
data = request.get_json()
# 验证必需字段
required_fields = ['caseNumber', 'callbackMethods']
for field in required_fields:
if field not in data or not data[field]:
return jsonify({
'success': False,
'message': f'缺少必需字段: {field}'
}), 400
# 构建回访记录内容
callback_record = data.get('callbackRecord', '')
if not callback_record:
# 如果没有提供callbackRecord,根据其他字段构建
result = data.get('callbackResult', '成功')
methods = ', '.join(data.get('callbackMethods', []))
callback_record = f"回访方式: {methods}, 回访结果: {result}"
if result == '成功' and data.get('nextAppointmentTime'):
callback_record += f", 下次预约时间: {data['nextAppointmentTime']}"
elif result == '不成功' and data.get('failureReason'):
callback_record += f", 失败原因: {data['failureReason']}"
elif result == '放弃回访' and data.get('abandonReason'):
callback_record += f", 放弃原因: {data['abandonReason']}"
if db_manager:
# 使用数据库存储
record = CallbackRecord(
case_number=data['caseNumber'],
callback_methods=data['callbackMethods'],
callback_record=callback_record,
operator=data.get('operator', '系统用户')
)
record_id = db_manager.save_record(record)
else:
# 使用临时内存存储
case_number = data['caseNumber']
if case_number not in temp_callback_records:
temp_callback_records[case_number] = []
record_id = len(temp_callback_records[case_number]) + 1
temp_callback_records[case_number].append({
'id': record_id,
'case_number': case_number,
'callback_methods': data['callbackMethods'],
'callback_record': callback_record,
'operator': data.get('operator', '系统用户'),
'create_time': datetime.now().isoformat()
})
return jsonify({
'success': True,
'id': record_id,
'message': '保存成功',
'timestamp': datetime.now().isoformat(),
'storage': 'database' if db_manager else 'memory'
})
except Exception as e:
print(f"保存回访记录失败: {e}")
return jsonify({
'success': False,
'message': f'保存失败: {str(e)}'
}), 500
@app.route('/api/callback-records/<case_number>', methods=['GET'])
def get_callback_records(case_number):
"""获取回访记录API"""
try:
if db_manager:
# 从数据库获取
records = db_manager.get_records_by_case_number(case_number)
record_data = [record.to_dict() for record in records]
else:
# 从临时内存获取
record_data = temp_callback_records.get(case_number, [])
return jsonify({
'success': True,
'data': record_data,
'count': len(record_data),
'timestamp': datetime.now().isoformat(),
'storage': 'database' if db_manager else 'memory'
})
except Exception as e:
print(f"获取回访记录失败: {e}")
return jsonify({
'success': False,
'message': f'获取失败: {str(e)}'
}), 500
@app.route('/') @app.route('/')
def index(): def index():
"""主页 - 重定向到登录页面""" """主页 - 重定向到登录页面"""
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment