支持设备定时定位上报与OTA通道选择

This commit is contained in:
stu2not
2026-06-15 08:52:30 +08:00
parent 9d1537bd5d
commit 2b04a2fca8
15 changed files with 893 additions and 24 deletions

View File

@@ -128,6 +128,11 @@ class DeviceFirmwareUpdate(Base):
serial_number = Column(String(64), nullable=False, default="")
mac_address = Column(String(512), nullable=True)
firmware_version = Column(String(64), nullable=False)
ota_channel = Column(String(32), nullable=True)
target_version = Column(String(64), nullable=True)
firmware_url = Column(Text, nullable=True)
firmware_id = Column(Integer, nullable=True)
source = Column(String(32), nullable=True)
update_status = Column(String(32), nullable=False, default="success") # 更新状态,如 updating/success/failed
created_at = Column(DateTime, nullable=False, server_default=func.now())
updated_at = Column(DateTime, nullable=False, server_default=func.now(), onupdate=func.now())
@@ -137,6 +142,44 @@ class DeviceFirmwareUpdate(Base):
{'mysql_charset': 'utf8mb4', 'mysql_collate': 'utf8mb4_unicode_ci'}
)
class DeviceOtaChannel(Base):
__tablename__ = "device_ota_channels"
id = Column(Integer, primary_key=True, autoincrement=True)
channel_key = Column(String(32), unique=True, nullable=False, index=True)
name = Column(String(64), nullable=False)
device_type = Column(Integer, nullable=True, index=True)
enabled = Column(Boolean, nullable=False, default=True)
created_at = Column(DateTime, nullable=False, server_default=func.now())
updated_at = Column(DateTime, nullable=False, server_default=func.now(), onupdate=func.now())
__table_args__ = (
{'mysql_charset': 'utf8mb4', 'mysql_collate': 'utf8mb4_unicode_ci'}
)
class DeviceOtaFirmware(Base):
__tablename__ = "device_ota_firmwares"
id = Column(Integer, primary_key=True, autoincrement=True)
channel_key = Column(String(32), nullable=False, index=True)
version = Column(String(64), nullable=False)
firmware_url = Column(Text, nullable=False)
checksum = Column(String(128), nullable=True)
file_size = Column(BigInteger, nullable=True)
release_status = Column(String(32), nullable=False, default="draft", index=True)
release_channel = Column(String(32), nullable=False, default="stable")
is_latest = Column(Boolean, nullable=False, default=False, index=True)
notes = Column(Text, nullable=True)
created_at = Column(DateTime, nullable=False, server_default=func.now())
published_at = Column(DateTime, nullable=True)
updated_at = Column(DateTime, nullable=False, server_default=func.now(), onupdate=func.now())
__table_args__ = (
UniqueConstraint("channel_key", "version", name="uq_device_ota_firmware_channel_version"),
Index("idx_device_ota_firmware_latest", "channel_key", "release_status", "is_latest"),
{'mysql_charset': 'utf8mb4', 'mysql_collate': 'utf8mb4_unicode_ci'}
)
class SystemConfig(Base):
__tablename__ = "system_config"
id = Column(Integer, primary_key=True, autoincrement=True)
@@ -325,6 +368,9 @@ class DeviceSetting(Base):
power: Mapped[Optional[int]] = mapped_column(Integer)
signal: Mapped[Optional[int]] = mapped_column("signal", Integer)
version: Mapped[Optional[str]] = mapped_column("version", String(64))
imei: Mapped[Optional[str]] = mapped_column(String(64))
device_type: Mapped[Optional[int]] = mapped_column(Integer)
ota_channel: Mapped[Optional[str]] = mapped_column(String(32))
disable_weekdays: Mapped[Optional[str]] = mapped_column(String(32))
created_at: Mapped[Optional[datetime]] = mapped_column(DateTime, server_default=text("CURRENT_TIMESTAMP"))
updated_at: Mapped[Optional[datetime]] = mapped_column(