Files
VDES_Backend/code/system/models.py
2026-07-13 15:37:05 +08:00

550 lines
30 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import hashlib
import os
from django.contrib.auth.models import AbstractUser
from django.db import models
from utils.models import CoreModel
STATUS_CHOICES = (
(0, "禁用"),
(1, "启用"),
)
class Users(AbstractUser, CoreModel):
username = models.CharField(max_length=150, unique=True, db_index=True, verbose_name='用户账号',
help_text="用户账号")
email = models.EmailField(max_length=255, verbose_name="邮箱", null=True, blank=True, help_text="邮箱")
mobile = models.CharField(max_length=255, verbose_name="电话", null=True, blank=True, help_text="电话")
avatar = models.TextField(verbose_name="头像", null=True, blank=True, help_text="头像")
name = models.CharField(max_length=40, verbose_name="姓名", help_text="姓名")
status = models.BooleanField(default=True, verbose_name="状态", help_text="状态")
GENDER_CHOICES = (
(0, ""),
(1, ""),
)
gender = models.IntegerField(choices=GENDER_CHOICES, default=1, verbose_name="性别", null=True, blank=True,
help_text="性别")
USER_TYPE = (
(0, "后台用户"),
(1, "前台用户"),
)
user_type = models.IntegerField(choices=USER_TYPE, default=0, verbose_name="用户类型", null=True, blank=True,
help_text="用户类型")
post = models.ManyToManyField(to='Post', verbose_name='关联岗位', db_constraint=False, help_text="关联岗位")
role = models.ManyToManyField(to='Role', verbose_name='关联角色', db_constraint=False, help_text="关联角色")
dept = models.ForeignKey(to='Dept', verbose_name='所属部门', on_delete=models.SET_NULL, db_constraint=False,
null=True,
blank=True, help_text="关联部门")
first_name = models.CharField(max_length=150, blank=True, null=True)
last_name = models.CharField(max_length=150, blank=True, null=True)
home_path = models.CharField(max_length=150, blank=True, null=True)
class Meta:
db_table = "system_users"
verbose_name = '用户表'
verbose_name_plural = verbose_name
ordering = ('-create_datetime',)
class Post(CoreModel):
name = models.CharField(null=False, max_length=64, verbose_name="岗位名称", help_text="岗位名称")
code = models.CharField(max_length=32, verbose_name="岗位编码", help_text="岗位编码")
STATUS_CHOICES = (
(0, "离职"),
(1, "在职"),
)
status = models.IntegerField(choices=STATUS_CHOICES, default=1, verbose_name="岗位状态", help_text="岗位状态")
class Meta:
db_table = "system_post"
verbose_name = '岗位表'
verbose_name_plural = verbose_name
ordering = ('sort',)
class Role(CoreModel):
name = models.CharField(max_length=64, verbose_name="角色名称", help_text="角色名称")
code = models.CharField(max_length=64, unique=True, verbose_name="角色编码", help_text="角色编码")
# key = models.CharField(max_length=64, unique=True, verbose_name="权限字符", help_text="权限字符")
status = models.BooleanField(default=True, verbose_name="角色状态", help_text="角色状态")
admin = models.BooleanField(default=False, verbose_name="是否为admin", help_text="是否为admin")
DATASCOPE_CHOICES = (
(0, "仅本人数据权限"),
(1, "本部门数据权限"),
(2, "本部门及以下数据权限"),
(3, "全部数据权限"),
(4, "自定数据权限"),
)
data_range = models.IntegerField(default=0, choices=DATASCOPE_CHOICES, verbose_name="数据权限范围",
help_text="数据权限范围")
dept = models.ManyToManyField(to='Dept', verbose_name='数据权限-关联部门', db_constraint=False,
help_text="数据权限-关联部门")
menu = models.ManyToManyField(to='Menu', verbose_name='关联菜单', db_constraint=False, help_text="关联菜单")
permission = models.ManyToManyField(to='MenuButton', verbose_name='关联菜单的接口按钮', db_constraint=False,
help_text="关联菜单的接口按钮")
column = models.ManyToManyField(to='MenuColumnField', verbose_name='列表权限', db_constraint=False,
help_text="列表权限")
class Meta:
db_table = 'system_role'
verbose_name = '角色表'
verbose_name_plural = verbose_name
ordering = ('sort',)
class Dept(CoreModel):
name = models.CharField(max_length=64, verbose_name="部门名称", help_text="部门名称")
owner = models.CharField(max_length=32, verbose_name="负责人", null=True, blank=True, help_text="负责人")
phone = models.CharField(max_length=32, verbose_name="联系电话", null=True, blank=True, help_text="联系电话")
email = models.EmailField(max_length=32, verbose_name="邮箱", null=True, blank=True, help_text="邮箱")
status = models.BooleanField(default=True, verbose_name="部门状态", null=True, blank=True,
help_text="部门状态")
parent = models.ForeignKey(to='Dept', on_delete=models.PROTECT, default=None, verbose_name="上级部门",
db_constraint=False, null=True, blank=True, help_text="上级部门")
class Meta:
db_table = "system_dept"
verbose_name = '部门表'
verbose_name_plural = verbose_name
ordering = ('sort',)
class Button(CoreModel):
name = models.CharField(max_length=64, unique=True, verbose_name="权限名称", help_text="权限名称")
code = models.CharField(max_length=64, unique=True, verbose_name="权限值", help_text="权限值")
status = models.BooleanField(default=True, verbose_name="按钮状态", null=True, blank=True, help_text="按钮状态")
class Meta:
db_table = "system_button"
verbose_name = '权限标识表'
verbose_name_plural = verbose_name
ordering = ('sort',)
class Menu(CoreModel):
parent = models.ForeignKey(to='Menu', on_delete=models.CASCADE, verbose_name="上级菜单", null=True, blank=True,
db_constraint=False, help_text="上级菜单")
icon = models.CharField(max_length=64, default='ant-design:book-outlined', verbose_name="菜单图标",
help_text="菜单图标")
title = models.CharField(max_length=64, verbose_name="菜单名称", help_text="菜单名称")
permission = models.CharField(max_length=64, null=True, blank=True, verbose_name="权限标识", help_text="权限标识")
ISLINK_CHOICES = (
(0, ""),
(1, ""),
)
is_ext = models.BooleanField(default=False, verbose_name="是否外链", help_text="是否外链")
TYPE_CHOICES = (
(0, "目录"),
(1, "菜单"),
)
type = models.IntegerField(choices=TYPE_CHOICES, verbose_name="是否目录", help_text="是否目录")
path = models.CharField(max_length=128, verbose_name="路由地址", null=True, blank=True, help_text="路由地址")
redirect = models.CharField(max_length=128, verbose_name="重定向地址", null=True, blank=True,
help_text="重定向地址")
component = models.CharField(max_length=128, verbose_name="组件地址", null=True, blank=True, help_text="组件地址")
name = models.CharField(max_length=50, verbose_name="组件名称", null=True, blank=True, help_text="组件名称")
status = models.BooleanField(default=True, blank=True, verbose_name="菜单状态", help_text="菜单状态")
keepalive = models.BooleanField(default=False, blank=True, verbose_name="是否页面缓存", help_text="是否页面缓存")
hide_menu = models.BooleanField(default=False, blank=True, verbose_name="侧边栏中是否隐藏",
help_text="侧边栏中是否隐藏")
class Meta:
db_table = "system_menu"
verbose_name = '菜单表'
verbose_name_plural = verbose_name
ordering = ('sort',)
class MenuButton(CoreModel):
menu = models.ForeignKey(to="Menu", db_constraint=False, related_name="menuPermission", on_delete=models.CASCADE,
verbose_name="关联菜单", help_text='关联菜单')
name = models.CharField(max_length=64, verbose_name="名称", help_text="名称")
code = models.CharField(max_length=64, verbose_name="权限值", help_text="权限值")
api = models.CharField(max_length=200, verbose_name="接口地址", help_text="接口地址")
METHOD_CHOICES = (
(0, "GET"),
(1, "POST"),
(2, "PUT"),
(3, "DELETE"),
)
method = models.IntegerField(default=0, verbose_name="接口请求方法", null=True, blank=True,
help_text="接口请求方法")
class Meta:
db_table = "system_menu_button"
verbose_name = '菜单权限表'
verbose_name_plural = verbose_name
ordering = ('sort',)
class MenuColumnField(CoreModel):
menu = models.ForeignKey(to="Menu", db_constraint=False, related_name="menuColumnField", on_delete=models.CASCADE,
verbose_name="关联菜单", help_text='关联菜单')
name = models.CharField(max_length=64, verbose_name="名称", help_text="名称")
code = models.CharField(max_length=64, verbose_name="权限值", help_text="权限值")
class Meta:
db_table = "system_menu_column_field"
verbose_name = '菜单数据列表'
verbose_name_plural = verbose_name
ordering = ('sort',)
class Dict(CoreModel):
name = models.CharField(max_length=100, blank=True, null=True, verbose_name="字典名称", help_text="字典名称")
code = models.CharField(max_length=100, blank=True, null=True, verbose_name="编码", help_text="编码")
status = models.BooleanField(default=True, blank=True, verbose_name="状态", help_text="状态")
remark = models.CharField(max_length=2000, blank=True, null=True, verbose_name="备注", help_text="备注")
class Meta:
db_table = 'system_dict'
verbose_name = "字典表"
verbose_name_plural = verbose_name
ordering = ('sort',)
class DictItem(CoreModel):
icon = models.CharField(max_length=100, blank=True, null=True, verbose_name="ICON", help_text="ICON")
label = models.CharField(max_length=100, blank=True, null=True, verbose_name="显示名称", help_text="显示名称")
value = models.CharField(max_length=100, blank=True, null=True, verbose_name="实际值", help_text="实际值")
status = models.BooleanField(default=True, blank=True, verbose_name="状态", help_text="状态")
dict = models.ForeignKey(to="Dict", db_constraint=False, related_name="dictItem", on_delete=models.CASCADE,
help_text="字典")
remark = models.CharField(max_length=2000, blank=True, null=True, verbose_name="备注", help_text="备注")
class Meta:
db_table = 'system_dict_item'
verbose_name = "字典表详情表"
verbose_name_plural = verbose_name
ordering = ('sort',)
class CategoryDict(CoreModel):
label = models.CharField(max_length=100, blank=True, null=True, verbose_name="显示名称", help_text="显示名称")
value = models.CharField(max_length=100, blank=True, null=True, verbose_name="实际值", help_text="实际值")
code = models.CharField(max_length=100, unique=True, blank=True, null=True, verbose_name="编码", help_text="编码")
parent = models.ForeignKey(to='CategoryDict', on_delete=models.CASCADE, default=None, verbose_name="上级",
db_constraint=False, null=True, blank=True, help_text="上级")
class Meta:
db_table = 'system_category_dict'
verbose_name = "分类字典表"
verbose_name_plural = verbose_name
ordering = ('sort',)
class OperationLog(CoreModel):
request_username = models.CharField(max_length=50, blank=True, null=True, verbose_name="请求用户",
help_text="请求用户")
request_modular = models.CharField(max_length=64, verbose_name="请求模块", null=True, blank=True,
help_text="请求模块")
request_path = models.CharField(max_length=400, verbose_name="请求地址", null=True, blank=True,
help_text="请求地址")
request_body = models.TextField(verbose_name="请求参数", null=True, blank=True, help_text="请求参数")
request_method = models.CharField(max_length=8, verbose_name="请求方式", null=True, blank=True,
help_text="请求方式")
request_msg = models.TextField(verbose_name="操作说明", null=True, blank=True, help_text="操作说明")
request_ip = models.CharField(max_length=32, verbose_name="请求ip地址", null=True, blank=True,
help_text="请求ip地址")
request_browser = models.CharField(max_length=64, verbose_name="请求浏览器", null=True, blank=True,
help_text="请求浏览器")
response_code = models.CharField(max_length=32, verbose_name="响应状态码", null=True, blank=True,
help_text="响应状态码")
request_os = models.CharField(max_length=64, verbose_name="操作系统", null=True, blank=True, help_text="操作系统")
json_result = models.TextField(verbose_name="返回信息", null=True, blank=True, help_text="返回信息")
status = models.BooleanField(default=False, verbose_name="响应状态", help_text="响应状态")
class Meta:
db_table = 'system_operation_log'
verbose_name = '操作日志'
verbose_name_plural = verbose_name
ordering = ('-create_datetime',)
def media_file_name(instance, filename):
h = instance.md5sum
basename, ext = os.path.splitext(filename)
return os.path.join('files', h[0:1], h[1:2], h + ext.lower())
class File(CoreModel):
name = models.CharField(max_length=255, null=True, blank=True, verbose_name="实际名称", help_text="实际名称")
save_name = models.CharField(max_length=255, null=True, blank=True, verbose_name="存储名称", help_text="存储名称")
url = models.FileField(upload_to=media_file_name)
size = models.BigIntegerField(null=True, blank=True, verbose_name="大小", help_text="大小")
md5sum = models.CharField(max_length=36, blank=True, verbose_name="文件md5", help_text="文件md5")
class Meta:
db_table = 'system_file'
verbose_name = '文件管理'
verbose_name_plural = verbose_name
ordering = ('-create_datetime',)
class Area(CoreModel):
name = models.CharField(max_length=100, verbose_name="名称", help_text="名称")
code = models.CharField(max_length=20, verbose_name="地区编码", help_text="地区编码", unique=True, db_index=True)
level = models.BigIntegerField(verbose_name="地区层级(1省份 2城市 3区县 4乡级)",
help_text="地区层级(1省份 2城市 3区县 4乡级)")
pinyin = models.CharField(max_length=255, verbose_name="拼音", help_text="拼音")
initials = models.CharField(max_length=20, verbose_name="首字母", help_text="首字母")
enable = models.BooleanField(default=True, verbose_name="是否启用", help_text="是否启用")
pcode = models.ForeignKey(to='self', verbose_name='父地区编码', to_field="code", on_delete=models.CASCADE,
db_constraint=False, null=True, blank=True, help_text="父地区编码")
class Meta:
db_table = "system_area"
verbose_name = '地区表'
verbose_name_plural = verbose_name
ordering = ('code',)
def __str__(self):
return f"{self.name}"
class ApiWhiteList(CoreModel):
url = models.CharField(max_length=200, help_text="url地址", verbose_name="url")
METHOD_CHOICES = (
(0, "GET"),
(1, "POST"),
(2, "PUT"),
(3, "DELETE"),
)
method = models.IntegerField(default=0, verbose_name="接口请求方法", null=True, blank=True,
help_text="接口请求方法")
enable_datasource = models.BooleanField(default=True, verbose_name="激活数据权限", help_text="激活数据权限",
blank=True)
class Meta:
db_table = "system_api_white_list"
verbose_name = '接口白名单'
verbose_name_plural = verbose_name
ordering = ('-create_datetime',)
class SystemConfig(CoreModel):
parent = models.ForeignKey(to='self', verbose_name='父级', on_delete=models.CASCADE,
db_constraint=False, null=True, blank=True, help_text="父级")
title = models.CharField(max_length=50, verbose_name="标题", help_text="标题")
key = models.CharField(max_length=20, verbose_name="", help_text="")
value = models.JSONField(max_length=100, verbose_name="", help_text="", null=True, blank=True)
status = models.BooleanField(default=False, verbose_name="启用状态", help_text="启用状态")
data_options = models.JSONField(verbose_name="数据options", help_text="数据options", null=True, blank=True)
FORM_ITEM_TYPE_LIST = (
(0, 'text'),
(1, 'textarea'),
(2, 'number'),
(3, 'select'),
(4, 'radio'),
(5, 'checkbox'),
(6, 'date'),
(7, 'datetime'),
(8, 'time'),
(9, 'imgs'),
(10, 'files'),
(11, 'array'),
(12, 'foreignkey'),
(13, 'manytomany'),
)
form_item_type = models.IntegerField(choices=FORM_ITEM_TYPE_LIST, verbose_name="表单类型", help_text="表单类型",
default=0,
blank=True)
rule = models.JSONField(null=True, blank=True, verbose_name="校验规则", help_text="校验规则")
placeholder = models.CharField(max_length=50, null=True, blank=True, verbose_name="提示信息", help_text="提示信息")
setting = models.JSONField(null=True, blank=True, verbose_name="配置", help_text="配置")
class Meta:
db_table = "system_config"
verbose_name = '系统配置表'
verbose_name_plural = verbose_name
ordering = ('sort',)
def __str__(self):
return f"{self.title}"
class LoginLog(CoreModel):
LOGIN_TYPE_CHOICES = (
(1, '普通登录'),
)
username = models.CharField(max_length=32, verbose_name="登录用户名", null=True, blank=True, help_text="登录用户名")
ip = models.CharField(max_length=32, verbose_name="登录ip", null=True, blank=True, help_text="登录ip")
agent = models.TextField(verbose_name="agent信息", null=True, blank=True, help_text="agent信息")
browser = models.CharField(max_length=200, verbose_name="浏览器名", null=True, blank=True, help_text="浏览器名")
os = models.CharField(max_length=200, verbose_name="操作系统", null=True, blank=True, help_text="操作系统")
continent = models.CharField(max_length=50, verbose_name="", null=True, blank=True, help_text="")
country = models.CharField(max_length=50, verbose_name="国家", null=True, blank=True, help_text="国家")
province = models.CharField(max_length=50, verbose_name="省份", null=True, blank=True, help_text="省份")
city = models.CharField(max_length=50, verbose_name="城市", null=True, blank=True, help_text="城市")
district = models.CharField(max_length=50, verbose_name="县区", null=True, blank=True, help_text="县区")
isp = models.CharField(max_length=50, verbose_name="运营商", null=True, blank=True, help_text="运营商")
area_code = models.CharField(max_length=50, verbose_name="区域代码", null=True, blank=True, help_text="区域代码")
country_english = models.CharField(max_length=50, verbose_name="英文全称", null=True, blank=True,
help_text="英文全称")
country_code = models.CharField(max_length=50, verbose_name="简称", null=True, blank=True, help_text="简称")
longitude = models.CharField(max_length=50, verbose_name="经度", null=True, blank=True, help_text="经度")
latitude = models.CharField(max_length=50, verbose_name="纬度", null=True, blank=True, help_text="纬度")
login_type = models.IntegerField(default=1, choices=LOGIN_TYPE_CHOICES, verbose_name="登录类型",
help_text="登录类型")
class Meta:
db_table = 'system_login_log'
verbose_name = '登录日志'
verbose_name_plural = verbose_name
ordering = ('-create_datetime',)
class GeneratorTemplate(CoreModel):
name = models.CharField(null=False, max_length=64, verbose_name="模板名称", help_text="模板名称")
code = models.CharField(max_length=32, verbose_name="模板编码", help_text="模板编码")
form_info = models.TextField(verbose_name="表单信息", help_text="表单信息")
table_info = models.TextField(verbose_name="表格信息", help_text="表格信息")
has_menu = models.BooleanField(default=False, verbose_name="是否已经生成菜单", help_text="是否已经生成菜单")
class Meta:
db_table = "system_generator_template"
verbose_name = '代码生成器模板'
verbose_name_plural = verbose_name
ordering = ('-create_datetime',)
#-------------------------------------------------追加----------------------------------------------------
class VDESData(models.Model):
"""本船VDES信息模型"""
mmsi = models.CharField(max_length=15, verbose_name="MMSI号码", unique=True, help_text="船舶唯一识别码") #唯一
latitude = models.FloatField(verbose_name="纬度", help_text="船舶当前位置纬度")
longitude = models.FloatField(verbose_name="经度", help_text="船舶当前位置经度")
speed = models.FloatField(verbose_name="航速", help_text="航速(节)", null=True, blank=True)
course = models.FloatField(verbose_name="航向", help_text="航向(度)", null=True, blank=True)
heading = models.FloatField(verbose_name="船首向", help_text="船首向(度)", null=True, blank=True)
nav_status = models.IntegerField(verbose_name="航行状态", null=True, blank=True, help_text="0=机动船在航,1=锚泊等")
timestamp = models.DateTimeField(verbose_name="时间戳", help_text="AIS数据更新时间")
ship_name = models.CharField(max_length=100, verbose_name="船名", null=True, blank=True)
ship_type = models.IntegerField(verbose_name="船舶类型", null=True, blank=True, help_text="1-99=各种船舶类型")
draught = models.FloatField(verbose_name="吃水", null=True, blank=True, help_text="单位:米")
destination = models.CharField(max_length=100, verbose_name="目的地", null=True, blank=True)
eta = models.DateTimeField(verbose_name="预计到达时间", null=True, blank=True)
class Meta:
db_table = "system_vdes_data"
verbose_name = 'VDES数据'
verbose_name_plural = verbose_name
ordering = ('-timestamp',) # 默认按时间倒序排列
class ShipLatestStatus(models.Model):
mmsi = models.CharField(max_length=15, verbose_name="MMSI号码", unique=True, help_text="船舶唯一识别码") #唯一
latitude = models.FloatField(verbose_name="纬度", help_text="船舶当前位置纬度")
longitude = models.FloatField(verbose_name="经度", help_text="船舶当前位置经度")
speed = models.FloatField(verbose_name="航速", help_text="航速(节)", null=True, blank=True)
course = models.FloatField(verbose_name="航向", help_text="航向(度)", null=True, blank=True)
heading = models.FloatField(verbose_name="船首向", help_text="船首向(度)", null=True, blank=True)
nav_status = models.IntegerField(verbose_name="航行状态", null=True, blank=True, help_text="0=机动船在航,1=锚泊等")
timestamp = models.DateTimeField(verbose_name="时间戳", help_text="AIS数据更新时间")
ship_name = models.CharField(max_length=100, verbose_name="船名", null=True, blank=True)
ship_type = models.IntegerField(verbose_name="船舶类型", null=True, blank=True, help_text="1-99=各种船舶类型")
draught = models.FloatField(verbose_name="吃水", null=True, blank=True, help_text="单位:米")
destination = models.CharField(max_length=100, verbose_name="目的地", null=True, blank=True)
eta = models.DateTimeField(verbose_name="预计到达时间", null=True, blank=True)
# 添加虚拟字段:不写入数据库,但可以在 raw 查询中赋值
distance_km = None
class Meta:
db_table = "ship_latest_status"
ordering = ('-timestamp',) # 默认按时间倒序排列
class GpsStatus(models.Model):
utc_time = models.DateTimeField(verbose_name="UTC时间")
longitude = models.FloatField(verbose_name="经度")
latitude = models.FloatField(verbose_name="纬度")
altitude = models.FloatField(verbose_name="海拔高度")
used_satellites = models.IntegerField(verbose_name="定位卫星数")
gps_satellites = models.IntegerField(verbose_name="GPS卫星数")
beidou_satellites = models.IntegerField(verbose_name="北斗卫星数")
gps_status = models.IntegerField(verbose_name="GPS状态")
fix_mode = models.IntegerField(verbose_name="定位模式")
hdop = models.FloatField(verbose_name="HDOP精度")
speed = models.FloatField(verbose_name="运动速度")
direction = models.FloatField(verbose_name="运动方向")
class Meta:
db_table = "gps_status"
ordering = ('-utc_time',)
class Content(models.Model):
Id = models.AutoField(primary_key=True, verbose_name="自增Id", help_text="自增Id")
SendId = models.BigIntegerField(verbose_name="发送人Id", null=True, help_text="发送人Id")
ReciverId = models.BigIntegerField(verbose_name="接收人Id", help_text="接收人Id")
Content = models.TextField(verbose_name="聊天内容", help_text="聊天内容")
Type = models.IntegerField(verbose_name="内容类型", help_text="内容类型0html文本1图片2视频3文件")
State = models.IntegerField(verbose_name="是否发送成功", help_text="是否发送成功0否1是")
NoCode = models.CharField(max_length=255, verbose_name="时间戳", help_text="时间戳")
CreateDateUtc = models.CharField(max_length=255, verbose_name="创建时间", help_text="创建时间")
Title = models.CharField(max_length=255, null=True, blank=True, verbose_name="拓展功能字段", help_text="拓展功能字段")
Description = models.CharField(max_length=255, null=True, blank=True, verbose_name="拓展功能字段", help_text="拓展功能字段")
Label = models.CharField(max_length=255, null=True, blank=True, verbose_name="拓展功能字段", help_text="拓展功能字段")
Thumbnail = models.CharField(max_length=255, null=True, blank=True, verbose_name="拓展功能字段", help_text="拓展功能字段")
ReadFlag = models.BooleanField(verbose_name="是否阅读", help_text="是否阅读0否1是")
Avatar = models.CharField(max_length=500, null=True, blank=True, verbose_name="头像", help_text="头像")
SoundStatus = models.IntegerField(default=0, verbose_name="音频播放状态", help_text="音频播放状态0未播放1播放中2已播放")
class Meta:
db_table = "content"
verbose_name = "内容表"
verbose_name_plural = verbose_name
ordering = ('-CreateDateUtc',)
class Contacts(models.Model):
Id = models.AutoField(primary_key=True, verbose_name="Id", help_text="Id自增")
Name = models.CharField(max_length=255, null=True, blank=True, verbose_name="备注", help_text="备注")
MMSI = models.CharField(max_length=255, verbose_name="MMSI号码", help_text="MMSI号码")
Mobile = models.CharField(max_length=255, null=True, blank=True, verbose_name="手机号", help_text="手机号")
OnlineState = models.BooleanField(null=True, blank=True, verbose_name="在线状态", help_text="在线状态")
Region = models.CharField(max_length=255, null=True, blank=True, verbose_name="地区", help_text="地区")
Avatar = models.CharField(max_length=500, null=True, blank=True, verbose_name="头像", help_text="头像")
HistorySessionList = models.TextField(null=True, blank=True, verbose_name="历史会话列表", help_text="历史会话列表")
OutTradeNo = models.CharField(max_length=255, null=True, blank=True, verbose_name="socket.id", help_text="socket.id")
NoCode = models.CharField(max_length=255, null=True, blank=True, verbose_name="时间戳", help_text="时间戳")
class Meta:
db_table = "contacts"
verbose_name = "通讯录"
verbose_name_plural = verbose_name
ordering = ('-Id',)
unique_together = ('Id', 'MMSI')
class HistorySession(models.Model):
Id = models.AutoField(primary_key=True, verbose_name="Id", help_text="Id自增")
FormId = models.BigIntegerField(verbose_name="来自用户Id", help_text="来自用户Id")
Name = models.CharField(max_length=255, null=True, blank=True, verbose_name="备注", help_text="备注")
MMSI = models.CharField(max_length=255, verbose_name="MMSI号码", help_text="MMSI号码")
Mobile = models.CharField(max_length=255, null=True, blank=True, verbose_name="手机号", help_text="手机号")
Region = models.CharField(max_length=255, null=True, blank=True, verbose_name="地区", help_text="地区")
Avatar = models.CharField(max_length=500, null=True, blank=True, verbose_name="头像", help_text="头像")
ById = models.BigIntegerField(verbose_name="归属用户Id", help_text="归属用户Id", default=1)
class Meta:
db_table = "history_session"
verbose_name = "历史会话表"
verbose_name_plural = verbose_name
ordering = ('-Id',)
unique_together = ('Id', 'MMSI')
#记录是否获取到vdes消息
class MessageFlag(models.Model):
has_new_message = models.BooleanField(default=False) # 是否有新消息
class Meta:
db_table = "message_flag"