'''
- 文件描述:明康慧医MKTY智慧医疗系统后台管理系统后端服务
- 总负责人:齐鲁工业大学(山东省科学院)计算机科学与技术学部 软件工程(软件开发)21-1班 杜宇 (@duyu09, 202103180009@stu.qlu.edu.cn)
- 文件名:app.py
- 著作权声明:Copyright (c) 2025 DuYu (https://github.com/duyu09/MKTY-System)
- 该文件由Copilot辅助编写,人机合作完成。
'''
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS
from datetime import datetime
import json
import jwt
import time
app = Flask(__name__)
ADMIN_USERNAME = "admin"
ADMIN_PASSWORD = "admin123"
JWT_SECRET = "secret-key"
CORS(app)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:@localhost/mkty_02'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
class UserInfo(db.Model):
__tablename__ = 'userinfo'
userId = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
userCiphertext = db.Column(db.Text, nullable=False)
userName = db.Column(db.Text, nullable=False)
userType = db.Column(db.Text, nullable=False)
userSex = db.Column(db.Boolean, nullable=False)
userSexPermission = db.Column(db.Boolean, nullable=False)
userAge = db.Column(db.Text, nullable=False)
userAgePermission = db.Column(db.Boolean, nullable=False)
userFrom = db.Column(db.Text, nullable=False)
userFromPermission = db.Column(db.Boolean, nullable=False)
userContact = db.Column(db.Text, nullable=False)
userContactPermission = db.Column(db.Boolean, nullable=False)
userDescription = db.Column(db.Text)
patientImportantInfo = db.Column(db.Text)
doctorImportantInfo = db.Column(db.Text)
userImportantInfoPermission = db.Column(db.Boolean, nullable=False)
userAvatarId = db.Column(db.Text)
userRegisterTime = db.Column(db.BigInteger, nullable=False)
class MedicalRecord(db.Model):
__tablename__ = 'medicalrecord'
medrecId = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
medrecCreateTime = db.Column(db.Text, nullable=False)
medrecModifyTime = db.Column(db.Text, nullable=False)
medrecPatientId = db.Column(db.BigInteger, db.ForeignKey('userinfo.userId'), nullable=False)
medrecDoctorId = db.Column(db.BigInteger, db.ForeignKey('userinfo.userId'), nullable=False)
medrecAbstract = db.Column(db.Text)
medrecState = db.Column(db.Text, nullable=False)
medrecContent = db.Column(db.Text, nullable=False)
patient = db.relationship('UserInfo', foreign_keys=[medrecPatientId])
doctor = db.relationship('UserInfo', foreign_keys=[medrecDoctorId])
class KnowledgeEntity(db.Model):
__tablename__ = 'knowledgeentity'
keId = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
keGUID = db.Column(db.Text, nullable=False)
keFileType = db.Column(db.Text, nullable=False)
keName = db.Column(db.Text, nullable=False)
keCreateTime = db.Column(db.Text, nullable=False)
keAbstract = db.Column(db.Text)
class ForumSummary(db.Model):
__tablename__ = 'forumsummary'
forumId = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
forumCreator = db.Column(db.BigInteger, db.ForeignKey('userinfo.userId'), nullable=False)
forumName = db.Column(db.Text, nullable=False)
forumType = db.Column(db.Boolean, nullable=False)
forumCreateTime = db.Column(db.Text, nullable=False)
forumPermission = db.Column(db.Boolean, nullable=False)
forumStatus = db.Column(db.Integer, nullable=False)
creator = db.relationship('UserInfo', foreign_keys=[forumCreator])
class ForumContent(db.Model):
__tablename__ = 'forumcontent'
postId = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
postCreateTime = db.Column(db.Text, nullable=False)
postPosterId = db.Column(db.BigInteger, db.ForeignKey('userinfo.userId'), nullable=False)
postForumId = db.Column(db.BigInteger, db.ForeignKey('forumsummary.forumId'), nullable=False)
postContent = db.Column(db.JSON, nullable=False)
postPraiseNumber = db.Column(db.Integer, default=0)
postStatus = db.Column(db.Integer, nullable=False)
poster = db.relationship('UserInfo', foreign_keys=[postPosterId])
forum = db.relationship('ForumSummary', foreign_keys=[postForumId])
class Message(db.Model):
__tablename__ = 'mailitem'
messageId = db.Column('mailItemId', db.BigInteger, primary_key=True, autoincrement=True)
messageSenderId = db.Column('mailFromUserId', db.BigInteger, db.ForeignKey('userinfo.userId'), nullable=False)
messageReceiverId = db.Column('mailToUserId', db.BigInteger, db.ForeignKey('userinfo.userId'), nullable=False)
messageContent = db.Column('mailItemContent', db.Text, nullable=False)
messageStatus = db.Column('mailItemStatus', db.Integer, nullable=False)
messageCreateTime = db.Column('mailItemSendTime', db.BigInteger, nullable=False)
sender = db.relationship('UserInfo', foreign_keys=[messageSenderId])
receiver = db.relationship('UserInfo', foreign_keys=[messageReceiverId])
class Chat(db.Model):
__tablename__ = 'llmhistory'
chatId = db.Column('sessionId', db.BigInteger, primary_key=True, autoincrement=True)
chatUserId = db.Column('sessionUserId', db.BigInteger, db.ForeignKey('userinfo.userId'), nullable=False)
chatContent = db.Column('sessionContent', db.JSON, nullable=False)
chatStatus = db.Column('isSessionDM', db.Boolean, nullable=False)
chatCreateTime = db.Column('sessionSaveTime', db.Text, nullable=False)
user = db.relationship('UserInfo', foreign_keys=[chatUserId])
class Todo(db.Model):
__tablename__ = 'importantlist'
todoId = db.Column('listItemId', db.BigInteger, primary_key=True, autoincrement=True)
todoUserId = db.Column('userId', db.BigInteger, db.ForeignKey('userinfo.userId'), nullable=False)
todoContent = db.Column('listItemContent', db.Text, nullable=False)
todoPriority = db.Column('listItemPriority', db.Integer, nullable=False)
todoStatus = db.Column('listItemStatus', db.Integer, nullable=False)
todoCreateTime = db.Column('listItemStartTime', db.BigInteger, nullable=False)
todoEndTime = db.Column('listItemEndTime', db.BigInteger, nullable=False)
todoIsFinished = db.Column('listItemIsFinished', db.Integer, nullable=False)
todoTimeMode = db.Column('listItemTimeMode', db.Integer, nullable=False)
todoTimeWeek = db.Column('listItemTimeWeek', db.Integer, nullable=False)
user = db.relationship('UserInfo', foreign_keys=[todoUserId])
@app.route('/api/login', methods=['POST'])
def login():
data = request.json
username = data.get('username')
password = data.get('password')
if username == ADMIN_USERNAME and password == ADMIN_PASSWORD:
token = jwt.encode({
'username': username,
'exp': time.time() + 24 * 60 * 60
}, JWT_SECRET, algorithm='HS256')
return jsonify({
'success': True,
'token': token,
'message': '登录成功'
})
else:
return jsonify({
'success': False,
'message': '用户名或密码错误'
}), 401
@app.route('/api/users', methods=['GET'])
def get_users():
users = UserInfo.query.all()
return jsonify([{
'userId': user.userId,
'userName': user.userName,
'userType': user.userType,
'userSex': user.userSex,
'userAge': user.userAge,
'userFrom': user.userFrom,
'userContact': user.userContact,
'userDescription': user.userDescription,
'userRegisterTime': user.userRegisterTime
} for user in users])
@app.route('/api/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
user = UserInfo.query.get_or_404(user_id)
return jsonify({
'userId': user.userId,
'userName': user.userName,
'userType': user.userType,
'userSex': user.userSex,
'userAge': user.userAge,
'userFrom': user.userFrom,
'userContact': user.userContact,
'userDescription': user.userDescription,
'userRegisterTime': user.userRegisterTime
})
@app.route('/api/users', methods=['POST'])
def create_user():
data = request.json
new_user = UserInfo(
userCiphertext=data['userCiphertext'],
userName=data['userName'],
userType=data['userType'],
userSex=data['userSex'],
userSexPermission=data['userSexPermission'],
userAge=data['userAge'],
userAgePermission=data['userAgePermission'],
userFrom=data['userFrom'],
userFromPermission=data['userFromPermission'],
userContact=data['userContact'],
userContactPermission=data['userContactPermission'],
userDescription=data.get('userDescription'),
patientImportantInfo=data.get('patientImportantInfo'),
doctorImportantInfo=data.get('doctorImportantInfo'),
userImportantInfoPermission=data['userImportantInfoPermission'],
userAvatarId=data.get('userAvatarId'),
userRegisterTime=int(datetime.now().timestamp())
)
db.session.add(new_user)
db.session.commit()
return jsonify({'message': 'User created successfully', 'userId': new_user.userId})
@app.route('/api/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
user = UserInfo.query.get_or_404(user_id)
data = request.json
for key, value in data.items():
if hasattr(user, key):
setattr(user, key, value)
db.session.commit()
return jsonify({'message': 'User updated successfully'})
@app.route('/api/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
user = UserInfo.query.get_or_404(user_id)
db.session.delete(user)
db.session.commit()
return jsonify({'message': 'User deleted successfully'})
@app.route('/api/medical-records', methods=['GET'])
def get_medical_records():
records = MedicalRecord.query.all()
return jsonify([{
'medrecId': record.medrecId,
'medrecCreateTime': record.medrecCreateTime,
'medrecModifyTime': record.medrecModifyTime,
'medrecPatientId': record.medrecPatientId,
'medrecDoctorId': record.medrecDoctorId,
'medrecAbstract': record.medrecAbstract,
'medrecState': record.medrecState,
'medrecContent': record.medrecContent,
'patientName': record.patient.userName if record.patient else None,
'doctorName': record.doctor.userName if record.doctor else None
} for record in records])
@app.route('/api/medical-records/<int:record_id>', methods=['GET'])
def get_medical_record(record_id):
record = MedicalRecord.query.get_or_404(record_id)
return jsonify({
'medrecId': record.medrecId,
'medrecCreateTime': record.medrecCreateTime,
'medrecModifyTime': record.medrecModifyTime,
'medrecPatientId': record.medrecPatientId,
'medrecDoctorId': record.medrecDoctorId,
'medrecAbstract': record.medrecAbstract,
'medrecState': record.medrecState,
'medrecContent': record.medrecContent,
'patientName': record.patient.userName if record.patient else None,
'doctorName': record.doctor.userName if record.doctor else None
})
@app.route('/api/medical-records', methods=['POST'])
def create_medical_record():
data = request.json
current_time = str(int(datetime.now().timestamp()))
new_record = MedicalRecord(
medrecCreateTime=current_time,
medrecModifyTime=current_time,
medrecPatientId=data['medrecPatientId'],
medrecDoctorId=data['medrecDoctorId'],
medrecAbstract=data.get('medrecAbstract'),
medrecState=data['medrecState'],
medrecContent=data['medrecContent']
)
db.session.add(new_record)
db.session.commit()
return jsonify({'message': 'Medical record created successfully', 'medrecId': new_record.medrecId})
@app.route('/api/medical-records/<int:record_id>', methods=['PUT'])
def update_medical_record(record_id):
record = MedicalRecord.query.get_or_404(record_id)
data = request.json
for key, value in data.items():
if hasattr(record, key):
setattr(record, key, value)
record.medrecModifyTime = str(int(datetime.now().timestamp()))
db.session.commit()
return jsonify({'message': 'Medical record updated successfully'})
@app.route('/api/medical-records/<int:record_id>', methods=['DELETE'])
def delete_medical_record(record_id):
record = MedicalRecord.query.get_or_404(record_id)
db.session.delete(record)
db.session.commit()
return jsonify({'message': 'Medical record deleted successfully'})
@app.route('/api/knowledge', methods=['GET'])
def get_knowledge_entities():
entities = KnowledgeEntity.query.all()
return jsonify([{
'keId': entity.keId,
'keGUID': entity.keGUID,
'keFileType': entity.keFileType,
'keName': entity.keName,
'keCreateTime': entity.keCreateTime,
'keAbstract': entity.keAbstract
} for entity in entities])
@app.route('/api/knowledge/<int:entity_id>', methods=['GET'])
def get_knowledge_entity(entity_id):
entity = KnowledgeEntity.query.get_or_404(entity_id)
return jsonify({
'keId': entity.keId,
'keGUID': entity.keGUID,
'keFileType': entity.keFileType,
'keName': entity.keName,
'keCreateTime': entity.keCreateTime,
'keAbstract': entity.keAbstract
})
@app.route('/api/knowledge', methods=['POST'])
def create_knowledge_entity():
data = request.json
import uuid
new_entity = KnowledgeEntity(
keGUID=data.get('keGUID', str(uuid.uuid4())),
keFileType=data['keFileType'],
keName=data['keName'],
keCreateTime=str(int(datetime.now().timestamp())),
keAbstract=data.get('keAbstract')
)
db.session.add(new_entity)
db.session.commit()
return jsonify({'message': 'Knowledge entity created successfully', 'keId': new_entity.keId})
@app.route('/api/knowledge/<int:entity_id>', methods=['PUT'])
def update_knowledge_entity(entity_id):
entity = KnowledgeEntity.query.get_or_404(entity_id)
data = request.json
for key, value in data.items():
if hasattr(entity, key):
setattr(entity, key, value)
db.session.commit()
return jsonify({'message': 'Knowledge entity updated successfully'})
@app.route('/api/knowledge/<int:entity_id>', methods=['DELETE'])
def delete_knowledge_entity(entity_id):
entity = KnowledgeEntity.query.get_or_404(entity_id)
db.session.delete(entity)
db.session.commit()
return jsonify({'message': 'Knowledge entity deleted successfully'})
@app.route('/api/forums', methods=['GET'])
def get_forums():
forums = ForumSummary.query.all()
return jsonify([{
'forumId': forum.forumId,
'forumCreator': forum.forumCreator,
'forumName': forum.forumName,
'forumType': forum.forumType,
'forumCreateTime': forum.forumCreateTime,
'forumPermission': forum.forumPermission,
'forumStatus': forum.forumStatus,
'creatorName': forum.creator.userName if forum.creator else None
} for forum in forums])
@app.route('/api/forums/<int:forum_id>', methods=['GET'])
def get_forum(forum_id):
forum = ForumSummary.query.get_or_404(forum_id)
return jsonify({
'forumId': forum.forumId,
'forumCreator': forum.forumCreator,
'forumName': forum.forumName,
'forumType': forum.forumType,
'forumCreateTime': forum.forumCreateTime,
'forumPermission': forum.forumPermission,
'forumStatus': forum.forumStatus,
'creatorName': forum.creator.userName if forum.creator else None
})
@app.route('/api/forums', methods=['POST'])
def create_forum():
data = request.json
new_forum = ForumSummary(
forumCreator=data['forumCreator'],
forumName=data['forumName'],
forumType=data['forumType'],
forumCreateTime=str(int(datetime.now().timestamp())),
forumPermission=data['forumPermission'],
forumStatus=data['forumStatus']
)
db.session.add(new_forum)
db.session.commit()
return jsonify({'message': 'Forum created successfully', 'forumId': new_forum.forumId})
@app.route('/api/forums/<int:forum_id>', methods=['PUT'])
def update_forum(forum_id):
forum = ForumSummary.query.get_or_404(forum_id)
data = request.json
for key, value in data.items():
if hasattr(forum, key):
setattr(forum, key, value)
db.session.commit()
return jsonify({'message': 'Forum updated successfully'})
@app.route('/api/forums/<int:forum_id>', methods=['DELETE'])
def delete_forum(forum_id):
forum = ForumSummary.query.get_or_404(forum_id)
db.session.delete(forum)
db.session.commit()
return jsonify({'message': 'Forum deleted successfully'})
@app.route('/api/forum-posts', methods=['GET'])
def get_forum_posts():
posts = ForumContent.query.all()
return jsonify([{
'postId': post.postId,
'postCreateTime': post.postCreateTime,
'postPosterId': post.postPosterId,
'postForumId': post.postForumId,
'postContent': post.postContent,
'postPraiseNumber': post.postPraiseNumber,
'postStatus': post.postStatus,
'posterName': post.poster.userName if post.poster else None,
'forumName': post.forum.forumName if post.forum else None
} for post in posts])
@app.route('/api/forum-posts/<int:post_id>', methods=['GET'])
def get_forum_post(post_id):
post = ForumContent.query.get_or_404(post_id)
return jsonify({
'postId': post.postId,
'postCreateTime': post.postCreateTime,
'postPosterId': post.postPosterId,
'postForumId': post.postForumId,
'postContent': post.postContent,
'postPraiseNumber': post.postPraiseNumber,
'postStatus': post.postStatus,
'posterName': post.poster.userName if post.poster else None,
'forumName': post.forum.forumName if post.forum else None
})
@app.route('/api/forum-posts', methods=['POST'])
def create_forum_post():
data = request.json
new_post = ForumContent(
postCreateTime=str(int(datetime.now().timestamp())),
postPosterId=data['postPosterId'],
postForumId=data['postForumId'],
postContent=data['postContent'],
postPraiseNumber=0,
postStatus=data['postStatus']
)
db.session.add(new_post)
db.session.commit()
return jsonify({'message': 'Forum post created successfully', 'postId': new_post.postId})
@app.route('/api/forum-posts/<int:post_id>', methods=['PUT'])
def update_forum_post(post_id):
post = ForumContent.query.get_or_404(post_id)
data = request.json
for key, value in data.items():
if hasattr(post, key):
setattr(post, key, value)
db.session.commit()
return jsonify({'message': 'Forum post updated successfully'})
@app.route('/api/forum-posts/<int:post_id>', methods=['DELETE'])
def delete_forum_post(post_id):
post = ForumContent.query.get_or_404(post_id)
db.session.delete(post)
db.session.commit()
return jsonify({'message': 'Forum post deleted successfully'})
@app.route('/api/messages', methods=['GET'])
def get_messages():
messages = Message.query.all()
return jsonify([{
'messageId': message.messageId,
'messageSenderId': message.messageSenderId,
'messageReceiverId': message.messageReceiverId,
'messageContent': message.messageContent,
'messageStatus': message.messageStatus,
'messageCreateTime': message.messageCreateTime,
'senderName': UserInfo.query.get(message.messageSenderId).userName,
'receiverName': UserInfo.query.get(message.messageReceiverId).userName
} for message in messages])
@app.route('/api/messages', methods=['POST'])
def create_message():
data = request.json
new_message = Message(
messageSenderId=data['messageSenderId'],
messageReceiverId=data['messageReceiverId'],
messageContent=data['messageContent'],
messageStatus=data['messageStatus'],
messageCreateTime=int(datetime.now().timestamp())
)
db.session.add(new_message)
db.session.commit()
return jsonify({'message': 'Message created successfully'})
@app.route('/api/messages/<int:message_id>', methods=['PUT'])
def update_message(message_id):
message = Message.query.get_or_404(message_id)
data = request.json
message.messageContent = data['messageContent']
message.messageStatus = data['messageStatus']
db.session.commit()
return jsonify({'message': 'Message updated successfully'})
@app.route('/api/messages/<int:message_id>', methods=['DELETE'])
def delete_message(message_id):
message = Message.query.get_or_404(message_id)
db.session.delete(message)
db.session.commit()
return jsonify({'message': 'Message deleted successfully'})
@app.route('/api/chats', methods=['GET'])
def get_chats():
chats = Chat.query.all()
return jsonify([{
'chatId': chat.chatId,
'chatUserId': chat.chatUserId,
'chatContent': chat.chatContent,
'chatStatus': chat.chatStatus,
'chatCreateTime': chat.chatCreateTime,
'userName': UserInfo.query.get(chat.chatUserId).userName
} for chat in chats])
@app.route('/api/chats', methods=['POST'])
def create_chat():
data = request.json
new_chat = Chat(
chatUserId=data['chatUserId'],
chatContent=data['chatContent'],
chatStatus=data['chatStatus'],
chatCreateTime=int(datetime.now().timestamp())
)
db.session.add(new_chat)
db.session.commit()
return jsonify({'message': 'Chat created successfully'})
@app.route('/api/chats/<int:chat_id>', methods=['PUT'])
def update_chat(chat_id):
chat = Chat.query.get_or_404(chat_id)
data = request.json
chat.chatContent = data['chatContent']
chat.chatStatus = data['chatStatus']
db.session.commit()
return jsonify({'message': 'Chat updated successfully'})
@app.route('/api/chats/<int:chat_id>', methods=['DELETE'])
def delete_chat(chat_id):
chat = Chat.query.get_or_404(chat_id)
db.session.delete(chat)
db.session.commit()
return jsonify({'message': 'Chat deleted successfully'})
@app.route('/api/todos', methods=['GET'])
def get_todos():
todos = Todo.query.all()
return jsonify([{
'todoId': todo.todoId,
'todoUserId': todo.todoUserId,
'todoContent': todo.todoContent,
'todoPriority': todo.todoPriority,
'todoStatus': todo.todoStatus,
'todoCreateTime': todo.todoCreateTime,
'userName': UserInfo.query.get(todo.todoUserId).userName
} for todo in todos])
@app.route('/api/todos', methods=['POST'])
def create_todo():
data = request.json
new_todo = Todo(
todoUserId=data['todoUserId'],
todoContent=data['todoContent'],
todoPriority=data['todoPriority'],
todoStatus=data['todoStatus'],
todoCreateTime=int(datetime.now().timestamp())
)
db.session.add(new_todo)
db.session.commit()
return jsonify({'message': 'Todo created successfully'})
@app.route('/api/todos/<int:todo_id>', methods=['PUT'])
def update_todo(todo_id):
todo = Todo.query.get_or_404(todo_id)
data = request.json
todo.todoContent = data['todoContent']
todo.todoPriority = data['todoPriority']
todo.todoStatus = data['todoStatus']
db.session.commit()
return jsonify({'message': 'Todo updated successfully'})
@app.route('/api/todos/<int:todo_id>', methods=['DELETE'])
def delete_todo(todo_id):
todo = Todo.query.get_or_404(todo_id)
db.session.delete(todo)
db.session.commit()
return jsonify({'message': 'Todo deleted successfully'})
if __name__ == '__main__':
with app.app_context():
db.create_all()
app.run(debug=True)