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 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 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 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 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 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) tenantID = db.Column(db.String, db.ForeignKey('tenants.tenantID', onupdate="CASCADE", ondelete="CASCADE"), nullable=True)
class DeviceEventsHour(BaseAggr): __tablename__ = 'device_events_hour' __table_args__ = (db.Index('device_events_hour_countTime_idx', "countTime"), ) 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(100), primary_key=True) count = db.Column(db.Integer)
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 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: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 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 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 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')
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 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 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 PublishLog(ModelMixin, db.Model): """ controlType: 1:Publish,2:Read,3:Write,4 Execute publishStatus: 0:Failed,1:Published 2:Arrived """ __tablename__ = 'publish_logs' __table_args__ = (db.Index('publish_logs_msgTime_idx', "msgTime"), ) topic = db.Column(db.String(1000)) # mqtt topic streamID = db.Column(db.String(1000)) # stream id payload = db.Column(JSONB) # publish payload publishStatus = db.Column(db.SmallInteger) taskID = db.Column(db.String(64)) msgTime = db.Column(db.DateTime, server_default=func.now(), primary_key=True) deviceID = db.Column(db.String, primary_key=True) # device uid tenantID = db.Column(db.String, primary_key=True) # tenant uid
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 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 DataStream(BaseModel): __tablename__ = 'data_streams' streamID = db.Column(db.String(50)) # data stream identifier streamName = db.Column(db.String(50)) streamType = db.Column(db.SmallInteger) # 1:deviceUp, 2:deviceDown topic = db.Column(db.String(500)) description = db.Column(db.String(300)) dataPoints = db.relationship('DataPoint', secondary=StreamPoint, backref=db.backref('dataStreams', lazy='dynamic')) tenantID = db.Column(db.String, db.ForeignKey('tenants.tenantID', onupdate="CASCADE", ondelete="CASCADE")) productID = db.Column(db.String, db.ForeignKey('products.productID')) userIntID = db.Column(db.Integer, db.ForeignKey('users.id', onupdate="CASCADE", ondelete="CASCADE"))
class Cert(BaseModel): __tablename__ = 'certs' certName = db.Column(db.String) enable = db.Column(db.SmallInteger, default=1) CN = db.Column(db.String(36)) key = db.Column(db.Text) # key file string cert = db.Column(db.Text) # cert file string devices = db.relationship('Device', secondary=CertDevice, lazy='dynamic') # cert devices userIntID = db.Column(db.Integer, db.ForeignKey('users.id'))
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 DataPoint(BaseModel): __tablename__ = 'data_points' dataPointName = db.Column(db.String(50)) dataPointID = db.Column(db.String(50)) dataTransType = db.Column(db.Integer) # 1: Up, 2: Down, 3 UpAndDown pointDataType = db.Column(db.Integer) # 1:num, 2:str, 3:Boolean, 4:time, 5:location extendTypeAttr = db.Column(JSONB, server_default='{}') # extension attr for point data type isLocationType = db.Column(db.SmallInteger, server_default='0') # is location-> 0:no, 1:yes locationType = db.Column(db.SmallInteger) # 1: longitude, 2: latitude, 3: altitude enum = db.Column(db.JSON, server_default='[]') # enum of string or integer description = db.Column(db.String(300)) tenantID = db.Column(db.String, db.ForeignKey('tenants.tenantID', onupdate="CASCADE", ondelete="CASCADE")) productID = db.Column(db.String, db.ForeignKey('products.productID')) userIntID = db.Column(db.Integer, db.ForeignKey('users.id', onupdate="CASCADE", ondelete="CASCADE"))
class Action(BaseModel): """ config 1 alert {"alertTitle": "","alertContent": "","alertSeverity":1} 2 mail {"title": "","content": "",,"emails":["*****@*****.**","*****@*****.**"]} 3 Webhook {"token": "jasdkjabsk","url": "http://127.0.0.1:6010"} 4 Publish {"topic": "", "payload": "","deviceID": "","protocol": "mqtt","prefixTopic": ""} 5 MQTT {"topic":"topic"} """ __tablename__ = 'actions' actionName = db.Column(db.String(50)) actionType = db.Column( db.SmallInteger) # 1:alert,2:mail,3:Webhook,4:Publish,5:MQTT description = db.Column(db.String(300)) config = db.Column(JSONB) userIntID = db.Column(db.Integer, db.ForeignKey('users.id')) tenantID = db.Column( db.String, db.ForeignKey('tenants.tenantID', onupdate="CASCADE", ondelete="CASCADE"))
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 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 Service(BaseModel): __tablename__ = 'services' serviceName = db.Column(db.String(50)) # 服务名称 overview = db.Column(db.String(50)) # 服务简介 description = db.Column(db.String(1000)) # 具体介绍 chargeType = db.Column(db.SmallInteger) # 计费方式1:免费,2:时长(天),3:次数,4:条数(流量) unitPrice = db.Column(db.Float, server_default='0.00') # 单价 enable = db.Column(db.SmallInteger, default=0) # 是否启动0 未启动, 1启动 serviceGroup = db.Column(db.SmallInteger) # 服务分组1 基础 2 DMP 3 AEP icon = db.Column(db.String(50)) # 图标 screenshots = db.Column(db.JSON) # 截图 code = db.Column(db.String(50)) # 服务唯一标识 referService = db.Column(db.String(50)) # 该服务引用的服务的code order = db.Column(db.SmallInteger) # 顺序
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 Service(BaseModel): __tablename__ = 'services' serviceName = db.Column(db.String(50)) overview = db.Column(db.String(50)) description = db.Column(db.String(1000)) chargeType = db.Column(db.SmallInteger) unitPrice = db.Column(db.Float, server_default='0.00') enable = db.Column(db.SmallInteger, default=0) serviceGroup = db.Column(db.SmallInteger) icon = db.Column(db.String(50)) screenshots = db.Column(db.JSON) code = db.Column(db.String(50)) referService = db.Column(db.String(50)) order = db.Column(db.SmallInteger)