yj
2026-03-31 033d919018b3a3e12755f008c0b9093364942512
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from models import Base, ChatGroup, User, GroupUser, GroupSMSAccount, MessageHistory
from redis_manager import RedisManager
from config_manager import global_config
 
 
class DatabaseManager:
    def __init__(self):
        config = global_config.get_config()
        self.engine = create_engine(
            f"mysql+pymysql://{config.MYSQL_USER}:{config.MYSQL_PASSWORD}@{config.MYSQL_HOST}:{config.MYSQL_PORT}/{config.MYSQL_DB}"
        )
        self.Session = sessionmaker(bind=self.engine)
        self.redis = RedisManager()
 
    def init_db(self):
        """初始化数据库表"""
        Base.metadata.create_all(self.engine)
 
    # def cache_all_data(self):
    #     """缓存所有数据到Redis"""
    #     session = self.Session()
    #
    #     try:
    #         # 缓存所有群组
    #         groups = session.query(ChatGroup).all()
    #         for group in groups:
    #             self.redis.cache_group_data(group.id, "info", {"id": group.id, "name": group.name})
    #
    #             # 缓存群组成员
    #             user_ids = [gu.user_id for gu in group.members]
    #             self.redis.cache_group_data(group.id, "users", user_ids)
    #
    #             # 缓存短信账号
    #             sms_accounts = [ga.sms_account for ga in group.sms_accounts]
    #             self.redis.cache_group_data(group.id, "sms_accounts", sms_accounts)
    #
    #         # 缓存所有用户
    #         users = session.query(User).all()
    #         for user in users:
    #             self.redis.set(f"user:{user.id}", json.dumps({"id": user.id, "name": user.name}))
    #
    #     finally:
    #         session.close()
 
    def save_message_history(self, user_id, messages, conversation_id):
        """保存消息历史到数据库"""
        session = self.Session()
 
        try:
            for msg in messages:
                new_msg = MessageHistory(
                    user_id=user_id,
                    conversation_id=conversation_id,
                    role=msg["role"],
                    content=msg["content"]
                )
                session.add(new_msg)
            session.commit()
        except Exception as e:
            session.rollback()
            raise e
        finally:
            session.close()