kangda/app/models/models.py

289 lines
13 KiB
Python

from datetime import datetime
from sqlalchemy import Column, String, DateTime, Integer, Text, ForeignKey, Index, BigInteger
from sqlalchemy.orm import relationship
from app.core.database import Base
class Event(Base):
__tablename__ = "event"
eventId = Column(String(50), primary_key=True)
tenantInfoId = Column(String(100))
reportEventId = Column(String(100))
number = Column(String(20))
name = Column(String(20))
eclassify = Column(String(5))
operationType = Column(String(5))
etype = Column(String(20))
etypeName = Column(String(20))
enTypeName = Column(String(30))
hkTypeName = Column(String(20))
reportStatus = Column(String(5))
results = Column(String(5))
insDate = Column(DateTime)
insDateShow = Column(DateTime)
updDate = Column(DateTime)
updDateShow = Column(DateTime)
fileType = Column(String(5))
area = Column(String(20))
floor = Column(String(10))
map = Column(String(20))
staffId = Column(String(40))
targetUserId = Column(String(40))
position = Column(String(100))
actualStaffName = Column(String(20))
targetStaffName = Column(String(20))
routeName = Column(String(20))
phoneAddress = Column(String(500))
width = Column(String(10))
height = Column(String(10))
resolution = Column(String(10))
originX = Column(String(20))
originY = Column(String(20))
imgList = Column(String(500))
robotType = Column(String(5))
eventFloor = Column(String(10))
floorName = Column(String(10))
coordId = Column(String(40))
coord = Column(String(40))
coordName = Column(String(30))
positonName = Column(String(20))
processingRemark = Column(String(300))
carId = Column(String(40))
parkingSpaceType = Column(String(10))
parkingSpaceNumber = Column(String(40))
carNumber = Column(String(40))
eno = Column(String(40))
instrument = Column(String(40))
evideo = Column(String(40))
createTime = Column(DateTime, default=datetime.now, comment='本地后台创建时间')
updateTime = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='本地后台更新时间')
# 关系
images = relationship("Image", back_populates="event", cascade="all, delete", passive_deletes=True)
temperatures = relationship("Temperature", back_populates="event", cascade="all, delete", passive_deletes=True)
process_logs = relationship("ProcessLog", back_populates="event", cascade="all, delete", passive_deletes=True)
messages = relationship("Message", back_populates="event", cascade="all, delete", passive_deletes=True)
class Image(Base):
__tablename__ = "image"
imageId = Column(BigInteger, primary_key=True, autoincrement=True, comment='图片ID')
eventId = Column(String(50), ForeignKey('event.eventId', ondelete="CASCADE"), nullable=False, comment='关联事件ID')
imageUrl = Column(String(500), nullable=False, comment='图片URL')
localPath = Column(String(500), comment='本地存储路径')
createTime = Column(DateTime, default=datetime.now, nullable=False, comment='创建时间')
# 关系
event = relationship("Event", back_populates="images" )
temperatures = relationship("Temperature", back_populates="image")
__table_args__ = (
Index('idx_image_event_id', 'eventId'),
)
class Temperature(Base):
__tablename__ = "temperature"
tempId = Column(BigInteger, primary_key=True, autoincrement=True, comment='温度记录ID')
eventId = Column(String(50), ForeignKey('event.eventId', ondelete="CASCADE"), nullable=False, comment='关联事件ID')
imageId = Column(BigInteger, ForeignKey('image.imageId', ondelete="CASCADE"), nullable=False, comment='关联图片ID')
temperature = Column(String(100), nullable=False, comment='温度值')
status = Column(String(5), comment='温度是否正常')
confidence = Column(String(40), nullable=False, comment='识别置信度')
createTime = Column(DateTime, default=datetime.now, nullable=False, comment='创建时间')
# 关系
event = relationship("Event", back_populates="temperatures")
image = relationship("Image", back_populates="temperatures")
__table_args__ = (
Index('idx_temp_event_id', 'eventId'),
Index('idx_temp_create_time', 'createTime'),
)
class ProcessLog(Base):
__tablename__ = "process_log"
logId = Column(BigInteger, primary_key=True, autoincrement=True, comment='日志ID')
eventId = Column(String(50), ForeignKey('event.eventId', ondelete="CASCADE"), nullable=False, comment='关联事件ID')
processStatus = Column(Integer, nullable=False, comment='处理状态')
errorMessage = Column(Text, comment='错误信息')
createTime = Column(DateTime, default=datetime.now, nullable=False, comment='创建时间')
# 关系
event = relationship("Event", back_populates="process_logs")
__table_args__ = (
Index('idx_log_event_id', 'eventId'),
Index('idx_log_create_time', 'createTime'),
)
class Message(Base):
__tablename__ = "message"
messageId = Column(BigInteger, primary_key=True, autoincrement=True, comment='消息ID')
eventId = Column(String(50), ForeignKey('event.eventId', ondelete="CASCADE"), nullable=False, comment='关联事件ID')
messageType = Column(String(5), comment='消息类型')
eventType = Column(String(5), comment='事件类型')
handle = Column(String(5), default='0', comment='是否处理' )
remark = Column(String(500), comment='备注')
createTime = Column(DateTime, default=datetime.now, nullable=False, comment='创建时间')
updateTime = Column(DateTime, default=datetime.now, nullable=False, comment='更新时间')
event = relationship("Event", back_populates="messages")
__table_args__ = (
Index('idx_message_event_id', 'eventId'),
Index('idx_message_create_time', 'createTime'),
Index('idx_message_update_time', 'updateTime'),
)
class Robot(Base):
__tablename__ = "robot"
robotId = Column(String(100), primary_key=True, comment='机器人ID')
number = Column(String(50), comment='机器人名称/名称')
groupingId = Column(String(100), comment='分组ID')
onlineStatus = Column(String(5), comment='在线状态')
status = Column(String(5), comment='机器人状态')
createTime = Column(DateTime, default=datetime.now, nullable=False, comment='创建时间')
updateTime = Column(DateTime, default=datetime.now, nullable=False, comment='更新时间')
# info_records = relationship(
# "RobotInfo",
# back_populates="robot",
# cascade="all, delete-orphan" # 可选:级联删除关联记录
# )
class RobotInfo(Base):
__tablename__ = "robot_info"
robotInfoId = Column(BigInteger, primary_key=True, autoincrement=True, comment='机器人信息ID')
robotId = Column(String(100), ForeignKey('robot.robotId', ondelete="CASCADE"), nullable=False, comment='关联机器人ID')
number = Column(String(50), comment="机器人名")
hkStstusName = Column(String(20), comment='香港状态名称')
code = Column(String(5), comment='状态码')
errorType = Column(String(5), comment='错误类型')
remoteControl = Column(String(5), comment='远程控制状态')
buttonStop = Column(String(5), comment='按钮停止状态')
vertical = Column(String(5), comment='垂直状态')
versionName = Column(String(50), comment='版本名称')
theta = Column(String(20), comment='角度')
speed = Column(String(5), comment='速度')
routeName = Column(String(20), comment='路线名称')
charingTaskStatus = Column(String(5), comment='充电任务状态')
socketType = Column(String(5), comment='插座类型')
horizontal = Column(String(5), comment='水平状态')
ststusName = Column(String(20), comment='状态名称')
enStstusName = Column(String(20), comment='英文状态名称')
aistatus = Column(String(5), comment='AI状态')
pm2_5 = Column(String(20), comment='PM2.5')
temperature = Column(String(20), comment='温度')
humidity = Column(String(20), comment='湿度')
power = Column(String(5), comment='电量')
floor = Column(String(5), comment='楼层')
map = Column(String(20), comment='地图')
mileage = Column(String(5), comment='里程')
area = Column(String(5), comment='区域')
nextTaskTime = Column(String(20), comment='下一个任务时间')
address = Column(String(500), comment='地址')
fromUserId = Column(String(100), comment='用户ID')
ip = Column(String(50), comment='IP地址')
pm10 = Column(String(20), comment='PM10')
index = Column(String(20), comment='索引')
message = Column(String(500), comment='消息')
versionCode = Column(String(50), comment='版本代码')
videoStatus = Column(String(5), comment='视频状态')
voltage = Column(String(20), comment='电压')
focal = Column(String(20), comment='焦距')
ststus = Column(String(5), comment='状态')
positon = Column(String(100), comment='位置')
robotType = Column(String(20), comment='机器人类型')
clearCharingTaskTime = Column(String(20), comment='清除充电任务时间')
cmd = Column(String(20), comment='命令')
vehicleid = Column(String(100), comment='车辆ID')
device = Column(String(100), comment='设备')
status = Column(String(5), comment='状态')
flvPtz = Column(String(500), comment="")
flvTherm = Column(String(500), comment="")
flvThermLight = Column(String(500), comment="")
createTime = Column(DateTime, default=datetime.now, nullable=False, comment='创建时间')
updateTime = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
# robot = relationship("Robot", back_populates="robot_info")
__table_args__ = (
Index('idx_robot_info_robot_id', 'robotId'),
Index('idx_robot_info_create_time', 'createTime'),
Index('idx_robot_info_update_time', 'updateTime'),
)
class Group(Base):
__tablename__ = "group"
groupingId = Column(String(100), primary_key=True, comment="分组id")
name = Column(String(20), comment="组名")
# 后续可能要单独拆分一张表
tenantInfoId = Column(String(100), comment="租户Id")
# 组和机器人对应表
class GroupRobot(Base):
__tablename__ = "group_robot"
id = Column(BigInteger, primary_key=True, autoincrement=True, comment="id主键")
groupingId = Column(String(100), ForeignKey('group.groupingId', ondelete="CASCADE"),comment='分组ID')
robotId = Column(String(100), ForeignKey("robot.robotId", ondelete="CASCADE"), comment='机器人ID')
class Task(Base):
__tablename__ = "task"
robotId = Column(String(100), primary_key=True, comment='机器人ID')
robotNumber = Column(String(50), comment='机器人编号')
routeNumber = Column(String(50), comment='路线编号')
taskName = Column(String(20), comment="任务名称")
routeId = Column(String(100), comment='路线ID')
coordId = Column(String(100), comment='坐标ID')
camera = Column(String(100), comment='摄像头信息')
speed = Column(String(10), comment='速度')
times = Column(String(100), comment='执行时间')
timeQuantum = Column(String(100), comment='时间段')
phoneAddress = Column(String(500), comment='图片地址')
originX = Column(String(20), comment='原点X坐标')
originY = Column(String(20), comment='原点Y坐标')
resolution = Column(String(20), comment='分辨率')
width = Column(String(10), comment='宽度')
height = Column(String(10), comment='高度')
patrolType = Column(String(5), comment='巡逻类型')
coord = Column(String(100), comment='坐标')
points = Column(String(1000), comment='点位信息')
secondaryPoints = Column(String(1000), comment='次要点位信息')
trackPoints = Column(String(1000), comment='轨迹点位信息')
area = Column(String(50), comment='区域')
floor = Column(String(20), comment='楼层')
patrolVersion = Column(Integer, comment='巡逻版本')
routeVersion = Column(Integer, comment='路线版本')
tenantId = Column(String(100), comment='租户ID')
robotType = Column(String(10), comment='机器人类型')
patrolMode = Column(String(5), comment='巡逻模式')
chargePower = Column(String(10), comment='充电功率')
runPower = Column(String(10), comment='运行功率')
inDoorPatrolList = Column(String(1000), comment='室内巡逻列表')
createTime = Column(DateTime, default=datetime.now, nullable=False, comment='创建时间')
updateTime = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
__table_args__ = (
{'comment': '机器人任务表'},
)