class DeviceEventsMonth(BaseAggr): __tablename__ = 'device_events_month' countTime = db.Column(db.DateTime, primary_key=True) tenantID = db.Column(db.String, primary_key=True) deviceID = db.Column(db.String(100), primary_key=True) streamID = db.Column(db.String(100), primary_key=True) dataPointID = db.Column(db.String(200), primary_key=True)
class DictCode(BaseModel): __tablename__ = 'dict_code' code = db.Column(db.String(50)) # code的字段名 codeValue = db.Column(db.SmallInteger) # code的值 codeStringValue = db.Column(db.String(50)) # code的字符串值 enLabel = db.Column(db.String(50)) # en label zhLabel = db.Column(db.String(50)) # zh label
class Group(BaseModel): __tablename__ = 'groups' groupID = db.Column(db.String(6), default=random_group_uid, unique=True) groupName = db.Column(db.String(50)) description = db.Column(db.String(300)) userIntID = db.Column(db.Integer, db.ForeignKey('users.id')) devices = db.relationship('Device', secondary=GroupDevice, lazy='dynamic') # group devices
class Permission(BaseModel): __tablename__ = 'permissions' roleIntID = db.Column( db.Integer, db.ForeignKey('roles.id', onupdate="CASCADE", ondelete="CASCADE")) resourceIntID = db.Column( db.Integer, db.ForeignKey('resources.id', onupdate="CASCADE", ondelete="CASCADE"))
class LoginLog(BaseModel): __tablename__ = 'login_logs' IP = db.Column(db.String(50)) # IP isLogged = db.Column(db.SmallInteger) # 登录结果 失败0,成功1 loginTime = db.Column(db.DateTime) # 登录时间 userIntID = db.Column( db.Integer, db.ForeignKey('users.id', onupdate="CASCADE", ondelete="CASCADE"))
class AppApiLogMonth(BaseModel): __tablename__ = 'app_api_logs_month' countTime = db.Column(db.DateTime) # 统计时间 apiCount = db.Column(db.Integer) # 应用api调用月统计数量 tenantID = db.Column( db.String, db.ForeignKey('tenants.tenantID', onupdate="CASCADE", ondelete="CASCADE"))
class AppApiLogDay(BaseModel): __tablename__ = 'app_api_logs_day' countTime = db.Column(db.DateTime) apiCount = db.Column(db.Integer) tenantID = db.Column( db.String, db.ForeignKey('tenants.tenantID', onupdate="CASCADE", ondelete="CASCADE"))
class Message(BaseModel): __tablename__ = 'messages' msgTitle = db.Column(db.String(100)) msgContent = db.Column(db.String(300)) messageType = db.Column(db.Integer) tenantID = db.Column(db.String, db.ForeignKey('tenants.tenantID', onupdate="CASCADE", ondelete="CASCADE"), nullable=True)
class AppApiLog(BaseModel): __tablename__ = 'app_api_logs' createAt = db.Column(db.DateTime, server_default=func.now()) url = db.Column(db.String(200)) method = db.Column(db.String(100)) tenantID = db.Column( db.String, db.ForeignKey('tenants.tenantID', onupdate="CASCADE", ondelete="CASCADE"))
class Message(BaseModel): __tablename__ = 'messages' msgTitle = db.Column(db.String(100)) # 消息标题 msgContent = db.Column(db.String(300)) # 消息内容 messageType = db.Column( db.Integer) # 消息类型,1:财务消息,2:产品消息,3:安全消息,4:其它消息,5:公告 tenantID = db.Column(db.String, db.ForeignKey('tenants.tenantID', onupdate="CASCADE", ondelete="CASCADE"), nullable=True)
class Role(BaseModel): __tablename__ = 'roles' roleName = db.Column(db.String(50)) # 角色名 description = db.Column(db.String(300)) # 描述 roleType = db.Column(db.SmallInteger) # 角色类型,1:用户角色 2:应用角色 isShare = db.Column(db.SmallInteger, default=0) # 角色是否公用1公用, 0私有 tenantID = db.Column(db.String, db.ForeignKey('tenants.tenantID', onupdate="CASCADE", ondelete="CASCADE"), nullable=True)
class Role(BaseModel): __tablename__ = 'roles' roleName = db.Column(db.String(50)) description = db.Column(db.String(300)) roleType = db.Column(db.SmallInteger) # 1:user role 2:app role isShare = db.Column(db.SmallInteger, default=0) # 0: private, 1: public tenantID = db.Column(db.String, db.ForeignKey('tenants.tenantID', onupdate="CASCADE", ondelete="CASCADE"), nullable=True)
class EmqxBillMonth(BaseModel): __tablename__ = 'emqx_bills_month' msgType = db.Column(db.Integer) # 消息类型 msgCount = db.Column(db.Integer) # 月消息数量 msgSize = db.Column(db.Integer) # 月消息流量 countTime = db.Column(db.DateTime) # 统计时间 tenantID = db.Column( db.String, db.ForeignKey('tenants.tenantID', onupdate="CASCADE", ondelete="CASCADE"))
class EmqxBillHour(ModelMixin, db.Model): __tablename__ = 'emqx_bills_hour' __table_args__ = (db.Index('emqx_bills_hour_countTime_idx', "countTime"), ) msgType = db.Column(db.Integer, primary_key=True) # 消息类型 msgCount = db.Column(db.Integer) # 小时消息数量 msgSize = db.Column(db.Integer) # 小时消息流量 countTime = db.Column(db.DateTime, primary_key=True) # 统计时间 tenantID = db.Column(db.String, db.ForeignKey('tenants.tenantID', onupdate="CASCADE", ondelete="CASCADE"), primary_key=True)
class Resource(BaseModel): __tablename__ = 'resources' code = db.Column(db.String(50), unique=True) url = db.Column(db.String(50)) method = db.Column(db.String(10)) # get post put delete order = db.Column(db.Integer) level = db.Column(db.Integer) icon = db.Column(db.String(50)) enable = db.Column(db.SmallInteger, server_default='1') parentCode = db.Column(db.String(50), db.ForeignKey('resources.code')) tabs = db.Column(db.SmallInteger) children = db.relationship('Resource', cascade='all, delete-orphan') parent = db.relationship('Resource', remote_side=[code]) service = db.Column(db.String(50))
class Invitation(BaseModel): __tablename__ = 'invitations' inviteEmail = db.Column(db.String(50)) # 被邀请人邮箱 roleIntID = db.Column(db.Integer) # 角色id tenantID = db.Column(db.String(9)) # 租户id inviteStatus = db.Column(db.Integer, default=0) # 邀请状态,0:未加入,1:已加入 userIntID = db.Column( db.Integer, db.ForeignKey('users.id', onupdate="CASCADE", ondelete="CASCADE")) def generate_auth_token(self): expires_in = current_app.config['TOKEN_LIFETIME_INVITATION'] s = JWT(current_app.config['SECRET_KEY'], expires_in=expires_in) return s.dumps({'invitation_id': self.id})
class Resource(BaseModel): __tablename__ = 'resources' code = db.Column(db.String(50), unique=True) # 资源唯一标识, 前端根据code的内容来翻译 url = db.Column(db.String(50)) # 资源url method = db.Column(db.String(10)) # 请求方法 get post put delete order = db.Column(db.Integer) # 显示顺序,只对菜单类型有效 level = db.Column(db.Integer) # 资源级别:一级、二级、三级 icon = db.Column(db.String(50)) # 一级菜单图标 enable = db.Column(db.SmallInteger, server_default='1') # 是否启用该资源 parentCode = db.Column(db.String(50), db.ForeignKey('resources.code')) # 上级资源Code tabs = db.Column(db.SmallInteger) # 是否包含tabs children = db.relationship('Resource', cascade='all, delete-orphan') # 子资源 parent = db.relationship('Resource', remote_side=[code]) service = db.Column(db.String(50)) # resource 所属服务
class HistoryAlert(BaseModel): __tablename__ = 'history_alerts' createAt = db.Column(db.DateTime, server_default=func.now()) alertName = db.Column(db.String(50)) alertContent = db.Column(db.String(300)) alertTimes = db.Column(db.Integer) alertDetail = db.Column(JSON) alertSeverity = db.Column(db.SmallInteger) startTime = db.Column(db.DateTime) endTime = db.Column(db.DateTime) deviceID = db.Column(db.String(100)) tenantID = db.Column( db.String, db.ForeignKey('tenants.tenantID', onupdate="CASCADE", ondelete="CASCADE"))
class Invitation(BaseModel): __tablename__ = 'invitations' inviteEmail = db.Column(db.String(50)) roleIntID = db.Column(db.Integer) tenantID = db.Column(db.String(9)) inviteStatus = db.Column(db.Integer, default=0) # 0: not joined 1:joined userIntID = db.Column( db.Integer, db.ForeignKey('users.id', onupdate="CASCADE", ondelete="CASCADE")) def generate_auth_token(self): expires_in = current_app.config['TOKEN_LIFETIME_INVITATION'] s = JWT(current_app.config['SECRET_KEY'], expires_in=expires_in) token = s.dumps({'invitation_id': self.id}) if isinstance(token, bytes): token = token.decode('utf-8') return token
class DeviceEventLatest(ModelMixin, db.Model): """ Latest device events """ __tablename__ = 'device_events_latest' msgTime = db.Column(db.DateTime) tenantID = db.Column(db.String(9), primary_key=True) deviceID = db.Column(db.String(100), primary_key=True) dataType = db.Column(db.SmallInteger) # 1:event 2:response streamID = db.Column(db.String(100)) topic = db.Column(db.String(500)) data = db.Column(JSONB) responseResult = db.Column(JSONB)
class ActorTask(BaseModel): __tablename__ = 'actor_tasks' taskID = db.Column(db.String(50), unique=True) taskName = db.Column(db.String(512)) taskStatus = db.Column(db.SmallInteger) # 1:Waiting 2:Executing 3:Success 4:Failed 5:Retry taskCount = db.Column(db.SmallInteger, server_default='1') taskInfo = db.Column(JSONB) taskProgress = db.Column(db.Integer, server_default='0') taskResult = db.Column(JSONB)
class Lwm2mObject(BaseModel): __tablename__ = 'lwm2m_objects' objectName = db.Column(db.String) # 对象名 objectID = db.Column(db.Integer, unique=True) # 对象int型ID description = db.Column(db.String) # 对象描述 objectURN = db.Column(db.String) # 对象URN objectVersion = db.Column(db.String) # 对象版本 multipleInstance = db.Column(db.String) # Multiple表示有多个实例,Single表示单个实例 mandatory = db.Column(db.String) # 强制性,Optional表示可选,Mandatory表示强制
class ActorTask(BaseModel): __tablename__ = 'actor_tasks' taskID = db.Column(db.String(50), unique=True) # 任务ID taskName = db.Column(db.String(512)) # 任务名称 taskStatus = db.Column(db.SmallInteger) # 任务状态 1 等待 2 执行 3 成功 4 失败 5 重试 taskCount = db.Column(db.SmallInteger, server_default='1') # 任务执行次数 taskInfo = db.Column(JSONB) # 任务信息 taskProgress = db.Column(db.Integer, server_default='0') # 任务执行进度 taskResult = db.Column(JSONB) # 任务执行结果
class Gateway(Device): __tablename__ = 'gateways' id = db.Column(db.Integer, db.ForeignKey('devices.id', onupdate="CASCADE", ondelete="CASCADE"), primary_key=True) devices = db.relationship('EndDevice', foreign_keys="EndDevice.gateway", lazy='dynamic') # 设备 __mapper_args__ = {'polymorphic_identity': 2}
class DeviceEvent(ModelMixin, db.Model): """ device upload event """ __tablename__ = 'device_events' __table_args__ = (db.Index('device_events_msgTime_idx', "msgTime"), ) msgTime = db.Column(db.DateTime, primary_key=True) tenantID = db.Column(db.String(9), primary_key=True) deviceID = db.Column(db.String(100), primary_key=True) dataType = db.Column(db.SmallInteger, primary_key=True) # 1:event 2:response topic = db.Column(db.String(500)) streamID = db.Column(db.String(100)) data = db.Column(JSONB) responseResult = db.Column(JSONB)
class Application(BaseModel): __tablename__ = 'applications' appID = db.Column(db.String(6), default=random_app_uid, unique=True) appName = db.Column(db.String(50)) appToken = db.Column(db.String(100), default=generate_uuid) # 32-bit expiredAt = db.Column(db.DateTime) # app token expired time description = db.Column(db.String(300)) appStatus = db.Column(db.Integer) # 0:blocked,1:run userIntID = db.Column(db.Integer, db.ForeignKey('users.id')) roleIntID = db.Column(db.Integer, db.ForeignKey('roles.id')) # app role id groups = db.relationship('Group', secondary=ApplicationGroup, lazy='dynamic')
class TimerPublish(BaseModel): __tablename__ = 'timer_publish' taskName = db.Column(db.String) # 任务名 taskStatus = db.Column(db.SmallInteger, server_default='2') # 任务状态2 执行 3 成功 timerType = db.Column(db.SmallInteger) # 定时类型1 固定 , 2 间隔 topic = db.Column(db.String(1000)) # 主题(mqtt) payload = db.Column(JSONB) # 下发消息内容 intervalTime = db.Column(JSONB) # 间隔时间{'weekday': 'hour': 'minute'} crontabTime = db.Column(db.DateTime) # 指定下发时间 deviceIntID = db.Column(db.Integer, db.ForeignKey('devices.id', onupdate="CASCADE", ondelete="CASCADE")) # 设备id userIntID = db.Column(db.Integer, db.ForeignKey('users.id', onupdate="CASCADE", ondelete="CASCADE")) # 用户
class Rule(BaseModel): __tablename__ = 'rules' ruleName = db.Column(db.String(50)) remark = db.Column(db.String(50)) enable = db.Column(db.SmallInteger, default=1) sql = db.Column(db.String) fromTopics = db.Column(JSONB) scopeData = db.Column(JSONB) ruleType = db.Column(db.SmallInteger) userIntID = db.Column(db.Integer, db.ForeignKey('users.id')) tenantID = db.Column( db.String, db.ForeignKey('tenants.tenantID', onupdate="CASCADE", ondelete="CASCADE")) actions = db.relationship('Action', secondary=RuleAction, backref=db.backref('rules', lazy='dynamic'))
class CurrentAlert(BaseModel): __tablename__ = 'current_alerts' createAt = db.Column(db.DateTime, server_default=func.now()) alertName = db.Column(db.String(50)) alertContent = db.Column(db.String(300)) alertTimes = db.Column(db.Integer) alertDetail = db.Column(JSON) alertSeverity = db.Column(db.SmallInteger) startTime = db.Column(db.DateTime) deviceID = db.Column(db.String(100)) ruleIntID = db.Column( db.Integer, db.ForeignKey('rules.id', onupdate="CASCADE", ondelete="CASCADE")) tenantID = db.Column( db.String, db.ForeignKey('tenants.tenantID', onupdate="CASCADE", ondelete="CASCADE")) __table_args__ = (db.Index('alerts_rule_key', 'tenantID', 'deviceID', 'ruleIntID', unique=True), )
class Product(BaseModel): """ cloudProtocol: 1:MQTT,2:CoAp,3:LwM2M,4:LoRaWAN,5:HTTP,6:WebSocket """ __tablename__ = 'products' productID = db.Column(db.String(6), default=random_product_uid, unique=True) # 产品标识 productName = db.Column(db.String(50)) # 产品名称 description = db.Column(db.String(300)) # 产品描述 cloudProtocol = db.Column(db.SmallInteger, server_default='1') # 云端协议, 网关类型产品显示为上联协议 gatewayProtocol = db.Column(db.Integer) # 网关协议 productType = db.Column(db.SmallInteger, server_default='1') # 产品类型1:设备,2:网关 userIntID = db.Column(db.Integer, db.ForeignKey('users.id')) devices = db.relationship('Device', backref='products', lazy='dynamic')