添加了 消息列表弹窗(系统状态消息、预警消息),以及存储消息的数据库
This commit is contained in:
122
common/msg_db_helper.py
Normal file
122
common/msg_db_helper.py
Normal file
@ -0,0 +1,122 @@
|
||||
import sqlite3
|
||||
from datetime import datetime
|
||||
from PySide6.QtCore import QMutex
|
||||
|
||||
"""
|
||||
sqlite消息数据库管理: db/messages.db
|
||||
"""
|
||||
|
||||
class DBHelper:
|
||||
_instance = None # 单例模式
|
||||
_mutex = QMutex()
|
||||
|
||||
def __new__(cls, db_name="db/messages.db"):
|
||||
"""消息数据库连接管理器"""
|
||||
cls._mutex.lock()
|
||||
try:
|
||||
if not cls._instance:
|
||||
cls._instance = super().__new__(cls)
|
||||
cls._instance.db_name = db_name
|
||||
cls._instance._init_db()
|
||||
finally:
|
||||
cls._mutex.unlock()
|
||||
return cls._instance
|
||||
|
||||
def _init_db(self):
|
||||
"""创建消息表"""
|
||||
conn = sqlite3.connect(self.db_name)
|
||||
cursor = conn.cursor()
|
||||
# 创建消息表:id(主键)、内容、类型(1=系统消息,2=预警)、是否处理、创建时间
|
||||
cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS messages (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
content TEXT NOT NULL,
|
||||
message_type INTEGER NOT NULL, -- 1: normal, 2: warning
|
||||
is_processed INTEGER NOT NULL DEFAULT 0, -- 为1表示已经解决/已经处理
|
||||
create_time TEXT NOT NULL, -- 创建时间
|
||||
last_modified TEXT NOT NULL -- 最后修改时间(新增/更新时都会变)
|
||||
)
|
||||
''')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def insert_message(self, content, message_type, is_processed=0):
|
||||
"""插入消息: create_time和last_modified一开始都设为当前时间"""
|
||||
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
conn = sqlite3.connect(self.db_name)
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''
|
||||
INSERT INTO messages (content, message_type, is_processed, create_time, last_modified)
|
||||
VALUES (?, ?, ?, ?, ?)
|
||||
''', (content, message_type, is_processed, current_time, current_time))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def update_processed_status(self, content, message_type, is_processed=1):
|
||||
"""更新is_processed状态, 同时更新last_modified为当前时间"""
|
||||
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
conn = sqlite3.connect(self.db_name)
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''
|
||||
UPDATE messages
|
||||
SET is_processed = ?, last_modified = ?
|
||||
WHERE content = ? AND message_type = ?
|
||||
''', (is_processed, current_time, content, message_type)) # 更新last_modified
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def get_latest_messages(self, message_type, limit=16):
|
||||
"""查询最新limit条消息, 包含last_modified字段"""
|
||||
conn = sqlite3.connect(self.db_name)
|
||||
cursor = conn.cursor()
|
||||
# 按创建时间倒序(确保取最新的消息),返回时包含last_modified
|
||||
cursor.execute('''
|
||||
SELECT content, is_processed, create_time, last_modified
|
||||
FROM messages
|
||||
WHERE message_type = ?
|
||||
ORDER BY create_time DESC
|
||||
LIMIT ?
|
||||
''', (message_type, limit))
|
||||
messages = cursor.fetchall() # 结果:[(content, is_processed, create_time, last_modified), ...]
|
||||
conn.close()
|
||||
return messages[::-1] # 反转后按时间正序排列
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
"""测试用例:向数据库插入测试消息"""
|
||||
import time
|
||||
|
||||
# 创建DBHelper实例(会自动创建数据库和表)
|
||||
db = DBHelper()
|
||||
|
||||
# # 插入系统状态消息(message_type=1)
|
||||
# db.insert_message(
|
||||
# content="开始自动智能浇筑系统",
|
||||
# message_type=1, # 系统消息
|
||||
# is_processed=False
|
||||
# )
|
||||
# time.sleep(1)
|
||||
# db.insert_message(
|
||||
# content="智能浇筑系统启动成功",
|
||||
# message_type=1,
|
||||
# is_processed=False
|
||||
# )
|
||||
# time.sleep(1)
|
||||
# db.insert_message(
|
||||
# content="上料斗载荷达到80%",
|
||||
# message_type=1, # 系统消息
|
||||
# is_processed=True # 已处理
|
||||
# )
|
||||
|
||||
# 插入预警消息(message_type=2)
|
||||
db.insert_message(
|
||||
content="振动频率异常",
|
||||
message_type=2, # 预警消息
|
||||
is_processed=False # 未处理
|
||||
)
|
||||
time.sleep(1)
|
||||
db.insert_message(
|
||||
content="料斗重量超出阈值",
|
||||
message_type=2, # 预警消息
|
||||
is_processed=True # 已处理
|
||||
)
|
||||
Reference in New Issue
Block a user