first commit

This commit is contained in:
lihansani
2026-07-13 15:37:05 +08:00
commit 8b11aa2efc
299 changed files with 206339 additions and 0 deletions

550
code/system/models.py Normal file
View File

@@ -0,0 +1,550 @@
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"