51 lines
1.8 KiB
Python
51 lines
1.8 KiB
Python
# coding=utf-8
|
|
"""本地离线上传队列表(主要用于 SQLite 缓存侧)。"""
|
|
from datetime import datetime
|
|
|
|
from sqlalchemy import Column, DateTime, Index, Integer, String, Text
|
|
from sqlalchemy.sql import func
|
|
|
|
from dao.db import Base
|
|
|
|
|
|
class UploadQueue(Base):
|
|
__tablename__ = 'upload_queue'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True, comment='主键ID')
|
|
action = Column(String(40), nullable=False, comment='insert / delete_template / delete_category / clear_all / set_threshold')
|
|
payload_json = Column(Text, nullable=False, comment='动作参数 JSON')
|
|
status = Column(String(20), nullable=False, default='pending', server_default='pending', comment='pending / done / failed')
|
|
retry_count = Column(Integer, nullable=False, default=0, server_default='0', comment='重试次数')
|
|
create_time = Column(
|
|
DateTime,
|
|
nullable=False,
|
|
default=datetime.now,
|
|
server_default=func.now(),
|
|
comment='创建时间',
|
|
)
|
|
update_time = Column(
|
|
DateTime,
|
|
nullable=False,
|
|
default=datetime.now,
|
|
server_default=func.now(),
|
|
onupdate=datetime.now,
|
|
comment='更新时间',
|
|
)
|
|
error_msg = Column(Text, nullable=True, comment='失败原因')
|
|
|
|
__table_args__ = (
|
|
Index('idx_upload_queue_status', 'status'),
|
|
)
|
|
|
|
def to_dict(self):
|
|
return {
|
|
'id': self.id,
|
|
'action': self.action,
|
|
'payload_json': self.payload_json,
|
|
'status': self.status,
|
|
'retry_count': self.retry_count,
|
|
'error_msg': self.error_msg,
|
|
'create_time': self.create_time.strftime('%Y-%m-%d %H:%M:%S') if self.create_time else None,
|
|
'update_time': self.update_time.strftime('%Y-%m-%d %H:%M:%S') if self.update_time else None,
|
|
}
|