models.py 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995
  1. from itertools import chain
  2. from Service.CommonService import CommonService
  3. from django.contrib.auth.models import BaseUserManager, AbstractBaseUser
  4. from django.db import models
  5. from django.utils import six, timezone
  6. from django.utils.encoding import python_2_unicode_compatible
  7. from imagekit.models import ProcessedImageField
  8. from imagekit.processors import ResizeToFill
  9. from Ansjer.config import SERVER_DOMAIN
  10. from django.utils import timezone
  11. class PermissionsManager(models.Manager):
  12. use_in_migrations = True
  13. def get_by_natural_key(self, permName):
  14. return self.get(
  15. permName=permName
  16. )
  17. class RoleManager(models.Manager):
  18. """
  19. The manager for the auth's Role model.
  20. """
  21. use_in_migrations = True
  22. def get_by_natural_key(self, roleName):
  23. return self.get(roleName=roleName)
  24. class UserManager(BaseUserManager):
  25. def create_user(self, username, password, userID, is_active,
  26. user_isValid, **extra_fields):
  27. user = self.model(
  28. username=username,
  29. userID=userID,
  30. is_active=is_active,
  31. user_isValid=user_isValid,
  32. **extra_fields
  33. )
  34. user.set_password(password)
  35. user.save(using=self._db)
  36. role = Role.objects.get(rid=1)
  37. user.role.add(role)
  38. return user
  39. def create_superuser(self, username, password, userID, is_active,
  40. user_isValid, **extra_fields):
  41. # extra_fields.setdefault('is_superuser', is_superuser)
  42. is_superuser = extra_fields.get('is_superuser', None)
  43. if is_superuser != 100 and is_superuser != 1:
  44. raise ValueError('Superuser must have is_superuser=1 or 100.')
  45. return self.create_user(username, password, userID, is_active,
  46. user_isValid, **extra_fields)
  47. @python_2_unicode_compatible
  48. class Permissions(models.Model):
  49. permName = models.CharField(blank=True, null=True, max_length=32, unique=True, verbose_name=u'权限名称')
  50. description = models.CharField(blank=True, null=True, max_length=128, verbose_name=u'描述信息', default='')
  51. objects = PermissionsManager()
  52. def __str__(self):
  53. return "%s" % (
  54. six.text_type(self.description))
  55. class Meta:
  56. ordering = ['permName']
  57. db_table = 'permissions'
  58. verbose_name = u'role permission'
  59. verbose_name_plural = verbose_name
  60. unique_together = (('permName'),)
  61. def natural_key(self):
  62. return (self.permName)
  63. class Role(models.Model):
  64. rid = models.SmallIntegerField(primary_key=True, unique=True, verbose_name=u'用户角色组ID')
  65. roleName = models.CharField(max_length=32, unique=True,
  66. default='User', verbose_name=u'角色名称')
  67. permission = models.ManyToManyField(to='Permissions', blank=True, verbose_name=u'权限', db_table='role_permissions')
  68. Description = models.TextField(blank=True, default='', verbose_name=u'描述信息')
  69. objects = RoleManager()
  70. class Meta:
  71. ordering = ['roleName']
  72. db_table = 'role'
  73. verbose_name = u'用户角色'
  74. verbose_name_plural = verbose_name
  75. def __str__(self):
  76. return self.roleName
  77. def natural_key(self):
  78. return (self.roleName,)
  79. def get_all_permission(self):
  80. perms = self.permission.all()
  81. permslist = []
  82. if self.rid == 100:
  83. perms = Permissions.objects.all()
  84. for perm in perms:
  85. permslist.append(perm.permName)
  86. return permslist
  87. else:
  88. permlist_tmp = []
  89. for perm in perms:
  90. permlist_tmp.append(perm.permName)
  91. permSet = set(permlist_tmp)
  92. permslist = list(permSet)
  93. permslist.sort()
  94. return permslist
  95. class Device_User(AbstractBaseUser):
  96. userID = models.CharField(blank=True, max_length=32, primary_key=True,
  97. verbose_name=u'用户ID', unique=True)
  98. role = models.ManyToManyField(to='Role', blank=True, verbose_name=u'用户角色', db_table='user_role')
  99. username = models.CharField(max_length=64, verbose_name=u'用户名', default='', blank=True)
  100. password = models.CharField(max_length=128, verbose_name=u'密码')
  101. userEmail = models.EmailField(max_length=64, verbose_name=u'邮箱', default='', blank=True)
  102. # 实际的路径就是 MEDIA_ROOT/Image/filename,所以可用upload_to来指定文件存放的前缀路径
  103. userIconPath = ProcessedImageField(blank=True, upload_to='User/Images/', default='static/User/default.png',
  104. verbose_name=u'头像',
  105. # 图片将处理成85x85的尺寸
  106. processors=[ResizeToFill(85, 85)], )
  107. userIconUrl = models.URLField(blank=True, max_length=128, default=SERVER_DOMAIN
  108. + 'account/getAvatar/User/defaultUser.png')
  109. NickName = models.CharField(blank=True, max_length=64, default='', verbose_name=u'用户昵称')
  110. is_superuser = models.IntegerField(blank=True, default=0, verbose_name=u'用户类型')
  111. is_active = models.BooleanField(blank=True, default=False, verbose_name=u'用户活动状态')
  112. data_joined = models.DateTimeField(blank=True, verbose_name=u'加入时间', auto_now_add=True)
  113. last_login = models.DateTimeField(blank=True, verbose_name='u最后登录时间', auto_now=True)
  114. user_isValid = models.BooleanField(blank=True, default=False, verbose_name=u'用户有效性', help_text=u'是否是认证通过的用户')
  115. online = models.BooleanField(blank=True, default=False, verbose_name=u'用户登录状态')
  116. machine_code = models.CharField(blank=True, max_length=128, default='', verbose_name=u'机械码')
  117. language = models.CharField(blank=True, max_length=16, default='en', verbose_name=u'语言地区')
  118. # 手机注册增加字段
  119. phone = models.CharField(max_length=16, verbose_name=u'手机号', default='', blank=True)
  120. fingerprint_enable = models.SmallIntegerField(default=0, verbose_name=u'是否开启了指纹登录') # 0:未开启,1:已开启
  121. fingerprint_key = models.CharField(max_length=128, default='', verbose_name=u'客户端用于解码的密钥等信息')
  122. objects = UserManager()
  123. USERNAME_FIELD = 'userID' # 必须有一个唯一标识
  124. REQUIRED_FIELDS = ['is_superuser'] # 创建superuser时的必须字段
  125. class Meta:
  126. ordering = ('-data_joined',)
  127. verbose_name = u'用户信息'
  128. db_table = 'device_user'
  129. get_latest_by = 'last_login'
  130. def __str__(self):
  131. return self.username
  132. def get_role_id(self):
  133. rids = []
  134. roles = self.role.all()
  135. for role in roles:
  136. rids.append(role.rid)
  137. return rids
  138. def get_all_permission(self):
  139. roles = self.role.all()
  140. perms = self.permission.all()
  141. permslist = []
  142. for role in roles:
  143. if role.rid == 100:
  144. perms = Permissions.objects.all()
  145. for perm in perms:
  146. permslist.append(perm.permName)
  147. return permslist
  148. for perm in perms:
  149. permslist.append(perm.permName)
  150. permSet = set(permslist)
  151. for role in roles:
  152. permlist_tmp = []
  153. for perm in role.permission.all():
  154. permlist_tmp.append(perm.permName)
  155. permSet_tmp = set(permlist_tmp)
  156. permSet = permSet.union(permSet_tmp)
  157. permslist = list(permSet)
  158. permslist.sort()
  159. return permslist
  160. @property
  161. def is_staff(self):
  162. return self.is_superuser
  163. # 设备表是建项目开发者设计的,自己看着办
  164. # 谢谢提醒!我选择凉拌。
  165. class Device_Info(models.Model):
  166. id = models.CharField(blank=True, max_length=32, primary_key=True)
  167. userID = models.ForeignKey(Device_User, blank=True, to_field='userID', on_delete=models.CASCADE)
  168. NickName = models.CharField(blank=True, max_length=32, verbose_name=u'设备名称')
  169. UID = models.CharField(blank=True, max_length=32, verbose_name=u'设备UID', default='')
  170. SID = models.CharField(blank=True, max_length=32, verbose_name=u'服务器ID', default='')
  171. View_Account = models.CharField(blank=True, max_length=32, verbose_name=u'设备用户名称', default='')
  172. View_Password = models.CharField(blank=True, max_length=32, verbose_name=u'设备密码', default='')
  173. AudioFormat = models.IntegerField(blank=True, default=1, verbose_name=u'初始化影像')
  174. EventNotification = models.IntegerField(blank=True, verbose_name=u'报警类型', default=0)
  175. ChannelIndex = models.IntegerField(blank=True, verbose_name=u'通道号', default=0)
  176. Online = models.BooleanField(blank=True, default=False, verbose_name=u'设备是否在线')
  177. mMonitorIndex = models.IntegerField(blank=True, default=-1)
  178. Type = models.IntegerField(blank=True, verbose_name='设备类型')
  179. DebugMode = models.IntegerField(blank=True, verbose_name=u'调试模式', default=0)
  180. NotificationMode = models.IntegerField(blank=True, verbose_name=u'是否报警', default=0)
  181. qvgaLevel = models.BooleanField(blank=True, verbose_name=u'SD与HD画面', default=0,
  182. help_text=u'0代表:SD、1代表:HD')
  183. isShare = models.BooleanField(blank=True, verbose_name=u'共享设备',
  184. help_text=u'是否为共享获取的设备', default=False)
  185. primaryUserID = models.CharField(blank=True, verbose_name='主用户id', max_length=32, default='')
  186. primaryMaster = models.CharField(max_length=64, verbose_name=u'主用户名', default='')
  187. data_joined = models.DateTimeField(blank=True, verbose_name=u'设备添加时间', auto_now_add=True)
  188. update_time = models.DateTimeField(blank=True, verbose_name=u'更新时间', auto_now=True, null=True)
  189. ip = models.CharField(blank=True, max_length=20, default='', verbose_name=u'设备区域ip')
  190. area = models.CharField(blank=True, max_length=100, default='', verbose_name=u'设备区域area')
  191. # ios要求新增字段
  192. version = models.CharField(blank=True, max_length=20, default='', verbose_name=u'版本号')
  193. iSNotification = models.BooleanField(blank=True, verbose_name=u'报警通知 0:关闭,1:开启)', default=False)
  194. isVod = models.SmallIntegerField(blank=True, default=0, verbose_name='是否支持云存') # 是否支持云存设备
  195. isExist = models.SmallIntegerField(blank=True, default=1, verbose_name='是否被删除') # 是否被删除了(需主用户交互) 1存在,0不存在,2设备被重置
  196. ###
  197. REQUIRED_FIELDS = []
  198. def __str__(self):
  199. return self.NickName
  200. def model_to_dict(self, fields=None, exclude=None):
  201. opts = self._meta
  202. data = {}
  203. for f in chain(opts.concrete_fields, opts.private_fields, opts.many_to_many):
  204. if not getattr(f, 'editable', False):
  205. continue
  206. if fields and f.name not in fields:
  207. continue
  208. if exclude and f.name in exclude:
  209. continue
  210. data[f.name] = f.value_from_object(self)
  211. return data
  212. class Meta:
  213. db_table = 'device_info'
  214. ordering = ('-data_joined',)
  215. verbose_name = u'用户设备信息表'
  216. verbose_name_plural = verbose_name
  217. class Access_Log(models.Model):
  218. id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
  219. user = models.CharField(max_length=100, default='', db_index=True, blank=True, verbose_name=u'用户')
  220. operation = models.CharField(max_length=100, db_index=True, default='', blank=True, verbose_name=u'操作')
  221. ip = models.CharField(max_length=100, default='', db_index=True, blank=True, verbose_name=u'访问ip地址')
  222. url = models.CharField(max_length=150, default='', blank=True, verbose_name=u'访问路径')
  223. status = models.IntegerField(default=0, blank=True, verbose_name=u'状态')
  224. time = models.DateTimeField(null=True, blank=True, db_index=True, verbose_name=u'访问时间')
  225. content = models.TextField(blank=True, default='', verbose_name=u'参数内容')
  226. class Meta:
  227. db_table = 'access_log'
  228. verbose_name = u'访问日志表'
  229. verbose_name_plural = verbose_name
  230. class Equipment_Info(models.Model):
  231. id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
  232. devUid = models.CharField(default='', blank=True, max_length=32, verbose_name=u'设备ID')
  233. devNickName = models.CharField(blank=True, max_length=32, default='', verbose_name=u'设备昵称')
  234. Channel = models.IntegerField(default=1, blank=True, verbose_name=u'设备通道')
  235. eventType = models.IntegerField(default=0, blank=True, verbose_name=u'事件类型')
  236. status = models.BooleanField(blank=True, default=False, verbose_name=u'事件状态')
  237. alarm = models.CharField(blank=True, max_length=256, verbose_name=u'报警信息')
  238. eventTime = models.CharField(blank=True, default='', max_length=16, verbose_name=u'设备报警时间')
  239. receiveTime = models.CharField(blank=True, default='', max_length=16, verbose_name=u'接收到报警时间')
  240. userID_id = models.CharField(default='', blank=True, max_length=32, verbose_name=u'用户ID')
  241. is_st = models.SmallIntegerField(default=0, verbose_name='是否截图') # 0 否,1 是图,2,视频
  242. # message_id = models.CharField(max_length=32, default='', verbose_name='第三方推送服务器返回的id')
  243. # push_type = models.SmallIntegerField(default=0, verbose_name='第三方推送服务器标志。0:APNS推送,1:谷歌推送,2:极光推送')
  244. # push_server_status = models.IntegerField(default=200, verbose_name='是否成功推送到第三方服务器。200:成功,other:失败')
  245. # push_device_status = models.SmallIntegerField(default=-1, verbose_name='是否成功推送到目标设备。0:失败,1:成功')
  246. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  247. def __str__(self):
  248. return self.id
  249. class Meta:
  250. db_table = 'equipment_info'
  251. verbose_name = u'设备信息推送表'
  252. verbose_name_plural = verbose_name
  253. ordering = ('-id',)
  254. app_label = "db2"
  255. class StatResModel(models.Model):
  256. id = models.AutoField(primary_key=True, verbose_name='自动ID')
  257. name = models.CharField(default='', max_length=120, verbose_name='图片名称', unique=True)
  258. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  259. def __str__(self):
  260. return self.name
  261. class Meta:
  262. db_table = 'statres'
  263. verbose_name = '静态资源表'
  264. verbose_name_plural = verbose_name
  265. ordering = ('id',)
  266. class FeedBackModel(models.Model):
  267. id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
  268. userID = models.ForeignKey(Device_User, null=True, blank=True, to_field='userID', on_delete=models.CASCADE)
  269. type = models.SmallIntegerField(default=0, verbose_name='反馈类型') # 【0:产品建议,1:功能异常,2:安全问题】
  270. status = models.SmallIntegerField(default=0, verbose_name='状态:0未解决/解决')
  271. content = models.TextField(blank=True, null=True, verbose_name=u'反馈描述')
  272. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  273. updTime = models.IntegerField(verbose_name='更新时间', default=0)
  274. FS = models.ManyToManyField(to='StatResModel', blank=True, verbose_name=u'用户反馈关联资源',
  275. db_table='fb_res')
  276. app = models.CharField(max_length=8, default='', verbose_name='类型') # [ios,android]
  277. phone_model = models.CharField(max_length=64, default='', verbose_name='手机型号') # [小米,android]
  278. os_version = models.CharField(max_length=16, default='', verbose_name='系统版本')
  279. uid = models.CharField(max_length=20, default='', verbose_name='设备uid')
  280. product_type = models.CharField(max_length=32, default='', verbose_name='设备uid')
  281. app_version = models.CharField(max_length=32, default='', verbose_name='app版本信息')
  282. appBundleId = models.CharField(max_length=32, default='', verbose_name='app版本appBundleId')
  283. email = models.CharField(max_length=32, default='', verbose_name='app版本email')
  284. score = models.CharField(max_length=32, default='0', verbose_name='评分--星星数')
  285. def __str__(self):
  286. return self.id
  287. class Meta:
  288. db_table = 'feedback'
  289. verbose_name = u'用户反馈信息表'
  290. verbose_name_plural = verbose_name
  291. ordering = ('-id',)
  292. class User_Brand(models.Model):
  293. id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
  294. # 关联用户
  295. userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)
  296. deviceSupplier = models.CharField(max_length=32, default='', verbose_name='(必填)设备供应商 string (例:华为、小米...)')
  297. deviceModel = models.CharField(max_length=64, default='', verbose_name='(必填)设备型号 string @mock=HM NOTE 1TD')
  298. osType = models.CharField(max_length=32, default='', verbose_name='(必填)操作系统名称 string @mock=Android')
  299. osVersion = models.CharField(max_length=32, default='', verbose_name='(必填)操作系统版本号 string @mock=4.0')
  300. country = models.CharField(max_length=200, default='', verbose_name='国家')
  301. province = models.CharField(max_length=150, default='', verbose_name='省')
  302. city = models.CharField(max_length=132, default='', verbose_name='市')
  303. area = models.CharField(max_length=132, default='', verbose_name='区')
  304. street = models.CharField(max_length=132, default='', verbose_name='街道')
  305. longitude = models.CharField(max_length=30, default='', verbose_name='经度')
  306. latitude = models.CharField(max_length=30, default='', verbose_name='纬度')
  307. appId = models.CharField(max_length=50, default='', verbose_name='appid_值')
  308. status = models.IntegerField(default=0, verbose_name='传国家省市信息过来就为状态:1 ,不传就为状态:0')
  309. ip = models.CharField(blank=True, max_length=20, default='', verbose_name=u'区域ip')
  310. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  311. def __str__(self):
  312. return self.id
  313. class Meta:
  314. db_table = 'user_brand'
  315. verbose_name = u'用户登录手机端手机品牌统计表'
  316. verbose_name_plural = verbose_name
  317. ordering = ('id',)
  318. # 存储通表
  319. class VodBucketModel(models.Model):
  320. id = models.AutoField(primary_key=True, verbose_name='主键')
  321. bucket = models.CharField(max_length=30, verbose_name='设备UID')
  322. storeDay = models.IntegerField(default=0, verbose_name='存储生命周期(天)')
  323. content = models.TextField(verbose_name='描述', default='')
  324. endpoint = models.CharField(max_length=125, default='', verbose_name='存储节点')
  325. area = models.CharField(max_length=16, default='', verbose_name='区域')
  326. region = models.CharField(max_length=16, default='', verbose_name='regionID')
  327. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  328. updTime = models.IntegerField(verbose_name='更新时间', default=0)
  329. mold = models.SmallIntegerField(default=0, verbose_name='存储区域类型') # 0:国内阿里 1:国外aws
  330. def __str__(self):
  331. return self.id
  332. class Meta:
  333. db_table = 'vod_bucket'
  334. verbose_name = u'存储通信息'
  335. verbose_name_plural = verbose_name
  336. ordering = ('-id',)
  337. class Store_Meal(models.Model):
  338. id = models.AutoField(primary_key=True, verbose_name=u'自增ID')
  339. title = models.CharField(blank=True, max_length=32, verbose_name=u'标题')
  340. currency = models.CharField(blank=True, default='USD', max_length=32, verbose_name=u'货币')
  341. price = models.CharField(blank=True, max_length=32, verbose_name=u'价格')
  342. day = models.IntegerField(default=0, blank=True, verbose_name=u'套餐天数')
  343. content = models.TextField(blank=True, null=True, verbose_name=u'描述')
  344. add_time = models.DateTimeField(blank=True, null=True, verbose_name=u'加入时间', auto_now_add=True)
  345. type = models.SmallIntegerField(default=0, verbose_name='付款类型') # 0 是paypal,1为支付宝
  346. update_time = models.DateTimeField(blank=True, verbose_name=u'更新时间', auto_now=True)
  347. bucket = models.ForeignKey(VodBucketModel, blank=True, to_field='id', on_delete=models.CASCADE,
  348. default=1, verbose_name='存储空间')
  349. commodity_type = models.SmallIntegerField(default=0, verbose_name='云存储套餐类型') # 0:事件型 1:连续型
  350. commodity_code = models.CharField(default='', max_length=32, verbose_name='套餐规格码')
  351. def __str__(self):
  352. return self.id
  353. class Meta:
  354. db_table = 'store_meal'
  355. verbose_name = u'存储套餐'
  356. verbose_name_plural = verbose_name
  357. ordering = ('id',)
  358. class Equipment_Version(models.Model):
  359. eid = models.CharField(blank=True, max_length=32, primary_key=True)
  360. ESN = models.CharField(blank=True, max_length=32, verbose_name=u'设备规格名称')
  361. code = models.CharField(blank=True, max_length=64, verbose_name=u'设备规格代码')
  362. version = models.CharField(blank=True, max_length=64, verbose_name=u'设备版本')
  363. softwareVersion = models.CharField(blank=True, max_length=32, verbose_name=u'软件版本')
  364. chipModelList2Code = models.CharField(max_length=32, blank=True, verbose_name=u'主芯片码')
  365. channel = models.IntegerField(blank=True, verbose_name=u'通道数')
  366. resolutionRatio = models.IntegerField(blank=True, verbose_name=u'分辨率')
  367. type = models.CharField(blank=True, max_length=16, verbose_name=u'设备机型')
  368. companyCode = models.CharField(blank=True, max_length=128, verbose_name=u'用户公司名称')
  369. data_joined = models.DateTimeField(blank=True, verbose_name=u'加入时间', auto_now_add=True)
  370. fileSize = models.IntegerField(blank=True, verbose_name=u'文件总大小')
  371. filePath = models.CharField(blank=True, max_length=256, verbose_name=u'升级文件路径')
  372. Description = models.TextField(blank=True, default='', verbose_name=u'描述信息')
  373. fileMd5 = models.CharField(blank=True, max_length=32, default='', verbose_name=u'上传文件MD5加密')
  374. status = models.BooleanField(blank=True, default=True, verbose_name=u'是否开启更新状态')
  375. update_time = models.DateTimeField(blank=True, verbose_name=u'更新时间', auto_now=True)
  376. lang = models.CharField(blank=True, default='en', max_length=32, verbose_name=u'ota包内置语言')
  377. mci = models.CharField(default='', blank=True, max_length=10, verbose_name='设备类型')
  378. img = models.CharField(max_length=300, blank=True, default='', verbose_name=u'图片路径')
  379. max_ver = models.CharField(default='', max_length=16, verbose_name='最大版本号')
  380. def __str__(self):
  381. return self.eid
  382. class Meta:
  383. verbose_name = '设备版本信息'
  384. ordering = ('-data_joined',)
  385. db_table = 'equipment_version'
  386. class App_Info(models.Model):
  387. id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
  388. appBundleId = models.CharField(blank=True, max_length=32, verbose_name=u'appID')
  389. appName = models.CharField(blank=True, max_length=32, verbose_name=u'app名称')
  390. systemLanguage = models.CharField(blank=True, max_length=32, verbose_name=u'系统语言')
  391. newAppversion = models.CharField(blank=True, max_length=12, verbose_name=u'系统版本')
  392. minAppversion = models.CharField(default='', blank=True, max_length=12, verbose_name=u'最小系统版本')
  393. bundleVersion = models.CharField(blank=True, max_length=12, verbose_name=u'项目版本')
  394. content = models.TextField(blank=True, default='', verbose_name=u'更新内容')
  395. app_type = models.IntegerField(default=0, blank=True, verbose_name=u'app类型') # ios 1,android 2
  396. add_time = models.DateTimeField(blank=True, null=True, verbose_name=u'加入时间', auto_now_add=True)
  397. update_time = models.DateTimeField(blank=True, verbose_name=u'更新时间', auto_now=True)
  398. downloadLink = models.CharField(max_length=300, blank=True, default='', verbose_name='升级')
  399. img = models.CharField(default='', max_length=128, verbose_name='图片路径')
  400. def __str__(self):
  401. return self.id
  402. class Meta:
  403. db_table = 'app_info'
  404. verbose_name = u'app信息表'
  405. verbose_name_plural = verbose_name
  406. ordering = ('id',)
  407. class App_Colophon(models.Model):
  408. id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
  409. app_id = models.ForeignKey(App_Info, to_field='id', on_delete=models.CASCADE, verbose_name='appid编号', blank=True,
  410. default=1)
  411. lang = models.CharField(blank=True, max_length=32, verbose_name=u'系统语言')
  412. newApp_version = models.CharField(blank=True, max_length=12, verbose_name=u'系统版本')
  413. content = models.TextField(blank=True, default='', verbose_name=u'更新内容')
  414. version_time = models.IntegerField(default=0, blank=True, verbose_name=u'版本更新的时间')
  415. def __str__(self):
  416. return self.id
  417. class Meta:
  418. db_table = 'app_colophon'
  419. verbose_name = u'app信息表的记录关联到App_Info'
  420. verbose_name_plural = verbose_name
  421. ordering = ('id',)
  422. class Order_Model(models.Model):
  423. orderID = models.CharField(blank=True, max_length=20, primary_key=True, verbose_name=u'订单id')
  424. # 订单关联用户
  425. userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)
  426. UID = models.CharField(max_length=20, verbose_name='设备UID')
  427. channel = models.SmallIntegerField(default=0, verbose_name=u'通道数')
  428. desc = models.CharField(max_length=50, default='', verbose_name='商品描述')
  429. price = models.CharField(default='', max_length=16, verbose_name='价格')
  430. currency = models.CharField(blank=True, default='USD', max_length=32, verbose_name=u'货币')
  431. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  432. updTime = models.IntegerField(verbose_name='更新时间', default=0)
  433. endTime = models.IntegerField(verbose_name='结束时间', default=0)
  434. status = models.SmallIntegerField(default=0, verbose_name='付款状态') # 0:否,1:成功
  435. payType = models.SmallIntegerField(default=0, verbose_name='付款类型0:paypal,1:alipay')
  436. payTime = models.IntegerField(verbose_name='支付成功时间', default=0)
  437. rank = models.ForeignKey(Store_Meal, to_field='id', default='', on_delete=models.CASCADE, verbose_name='套餐类型')
  438. nickname = models.CharField(default='', max_length=64, verbose_name='设备昵称')
  439. uid_bucket_id = models.IntegerField(default=0, verbose_name='关联uid_bucket的字段')
  440. commodity_type = models.SmallIntegerField(default=0, verbose_name='云存储套餐类型')
  441. commodity_code = models.CharField(default='', max_length=32, verbose_name='套餐规格码')
  442. pay_url = models.CharField(max_length=500, default='', verbose_name='支付url')
  443. paypal = models.CharField(max_length=500, null=True, blank=True, verbose_name='支付批准url')
  444. def __str__(self):
  445. return self.orderID
  446. class Meta:
  447. db_table = 'orders'
  448. verbose_name = u'订单信息表'
  449. verbose_name_plural = verbose_name
  450. ordering = ('-orderID',)
  451. class VodHlsModel(models.Model):
  452. id = models.AutoField(primary_key=True, verbose_name='回放列表主键')
  453. uid = models.CharField(max_length=20, verbose_name='设备UID')
  454. channel = models.SmallIntegerField(default=0, verbose_name='通道')
  455. time = models.IntegerField(verbose_name='播放列表名字时间戳', default=0, db_index=True)
  456. endTime = models.IntegerField(verbose_name='删除时间', default=0)
  457. sec = models.IntegerField(verbose_name='秒数', default=0)
  458. bucket = models.ForeignKey(VodBucketModel, blank=True, to_field='id', on_delete=models.CASCADE, default=1,
  459. verbose_name='存储空间')
  460. fg = models.SmallIntegerField(default=0,verbose_name='时间片段数') # 0为阿里云存储方案 >0为亚马逊方案
  461. def __str__(self):
  462. return self.id
  463. class Meta:
  464. db_table = 'vod_hls'
  465. verbose_name = u'云存回放信息表'
  466. verbose_name_plural = verbose_name
  467. ordering = ('-id',)
  468. class OssCrdModel(models.Model):
  469. id = models.AutoField(primary_key=True, verbose_name='主键')
  470. uid = models.CharField(max_length=20, verbose_name='设备UID')
  471. channel = models.SmallIntegerField(default=0, verbose_name='通道')
  472. data = models.TextField(verbose_name='设备sts')
  473. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  474. bucket = models.ForeignKey(VodBucketModel, blank=True, to_field='id', on_delete=models.CASCADE, default=1,
  475. verbose_name='存储空间')
  476. def __str__(self):
  477. return self.id
  478. class Meta:
  479. db_table = 'osscrd'
  480. verbose_name = u'设备证书'
  481. verbose_name_plural = verbose_name
  482. ordering = ('-id',)
  483. class StsCrdModel(models.Model):
  484. id = models.AutoField(primary_key=True, verbose_name='主键')
  485. uid = models.CharField(max_length=20, verbose_name='设备UID')
  486. channel = models.SmallIntegerField(default=0, verbose_name='通道')
  487. data = models.TextField(verbose_name='设备sts')
  488. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  489. bucket = models.ForeignKey(VodBucketModel, blank=True, to_field='id', on_delete=models.CASCADE, default=1,
  490. verbose_name='存储空间')
  491. type = models.SmallIntegerField(default=0,verbose_name='sts类型') # 0:阿里云,1:s3
  492. def __str__(self):
  493. return self.id
  494. class Meta:
  495. db_table = 'stscrd'
  496. verbose_name = u'设备证书'
  497. verbose_name_plural = verbose_name
  498. ordering = ('-id',)
  499. class UID_Bucket(models.Model):
  500. id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
  501. uid = models.CharField(max_length=20, verbose_name='设备UID')
  502. channel = models.SmallIntegerField(default=0, verbose_name='通道')
  503. bucket = models.ForeignKey(VodBucketModel, blank=True, to_field='id', on_delete=models.CASCADE, verbose_name='存储空间')
  504. status = models.SmallIntegerField(default=0, verbose_name='状态[0:开启,1:关闭]')
  505. endTime = models.IntegerField(verbose_name='结束时间', default=0)
  506. class Meta:
  507. db_table = 'vod_uid_bucket'
  508. verbose_name = '设备关联套餐表'
  509. verbose_name_plural = verbose_name
  510. ordering = ('id',)
  511. class UID_Preview(models.Model):
  512. id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
  513. uid = models.CharField(default='', max_length=20, db_index=True, verbose_name='设备UID')
  514. channel = models.SmallIntegerField(verbose_name=u'通道号', default=0)
  515. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  516. updTime = models.IntegerField(verbose_name='更新时间', default=0)
  517. class Meta:
  518. db_table = 'uid_preview'
  519. verbose_name = '设备预览图'
  520. verbose_name_plural = verbose_name
  521. ordering = ('id',)
  522. # 系统发送信息新到用户
  523. class SysMsgModel(models.Model):
  524. id = models.AutoField(primary_key=True, verbose_name='自增id')
  525. userID_id = models.CharField(default='', blank=True, max_length=32, verbose_name=u'用户ID')
  526. msg = models.TextField(blank=True, default='', verbose_name=u'发送内容')
  527. status = models.SmallIntegerField(verbose_name='是否已读', default=0) # 0:否,1:是
  528. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  529. updTime = models.IntegerField(verbose_name='更新时间', default=0)
  530. eventType = models.IntegerField(verbose_name='消息类型', default=0) # 默认系统消息类型,0系统消息,1 ipcamera消息
  531. uid = models.CharField(default='', max_length=20, db_index=True, verbose_name='设备UID')
  532. class Meta:
  533. db_table = 'sys_msg'
  534. verbose_name = '系统消息'
  535. verbose_name_plural = verbose_name
  536. ordering = ('-id',)
  537. app_label = "db2"
  538. # 设备推送重构
  539. # 设备配置表,新
  540. class UidSetModel(models.Model):
  541. id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
  542. uid = models.CharField(max_length=20, db_index=True, unique=True, verbose_name='设备UID')
  543. channel = models.SmallIntegerField(default=0, verbose_name='通道数量') #
  544. detect_status = models.SmallIntegerField(default=0, verbose_name='推送开关') # 状态[0:关闭,1:开启,2:用户解绑]
  545. detect_interval = models.IntegerField(verbose_name='推送间隔', default=60) # 秒
  546. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  547. updTime = models.IntegerField(verbose_name='更新时间', default=0)
  548. ucode = models.CharField(max_length=32, verbose_name='设备产品码', default='')
  549. version = models.CharField(max_length=32, verbose_name='设备版本', default='')
  550. p2p_region = models.CharField(max_length=16, verbose_name='设备p2p区域', default='ALL') # ALL CN EU US
  551. cloud_vod = models.SmallIntegerField(default=2, verbose_name='云存开关') # 0,关闭,1开启,2,不支持
  552. tz = models.CharField(default='', max_length=16, verbose_name='设备时区') # +8
  553. video_code = models.SmallIntegerField(default=0, verbose_name='编码类型') # 0:264,1:265
  554. nickname = models.CharField(default='', max_length=64, verbose_name='设备昵称')
  555. ip = models.CharField(max_length=20, default='', verbose_name=u'设备ip')
  556. # 设备重置后第一次启动时间
  557. is_alexa = models.IntegerField(default=0, verbose_name='是否支持alexa') # 0为不支持,1为支持,2为开启alexa发现
  558. detect_group = models.CharField(default='', max_length=32, verbose_name=u'检测类型')
  559. pwd = models.CharField(max_length=32, default='', verbose_name=u'设备密码') # 暂时是预留字段
  560. resetTime = models.IntegerField(default=0, verbose_name='设备重置时间')
  561. region_alexa = models.CharField(max_length=8, verbose_name='设备alexa区域', default='ALL') # ALL CN EU US
  562. deviceModel = models.CharField(blank=True, max_length=64, default='', verbose_name=u'设备型号')
  563. TimeZone = models.CharField(blank=True, max_length=50, default='', verbose_name=u'时区')
  564. TimeStatus = models.SmallIntegerField(default=0, verbose_name='同步手机时间开关。0:关闭,1:开启')
  565. SpaceUsable = models.CharField(blank=True, max_length=20, default='', verbose_name=u'可用空间')
  566. SpaceSum = models.CharField(blank=True, max_length=20, default='', verbose_name=u'总空间')
  567. MirrorType = models.IntegerField(blank=True, default=0, verbose_name=u'镜像类型 0:关闭镜像,1:上下镜像,2:左右镜像,3:上下左右镜像')
  568. RecordType = models.IntegerField(blank=True, default=0, verbose_name=u'录像模式(0:关闭,1:全是录像,3:报警录像)')
  569. OutdoorModel = models.IntegerField(blank=True, default=0, verbose_name=u'室外模式 0:关闭,1:开启')
  570. WIFIName = models.CharField(blank=True, max_length=50, default='', verbose_name=u'无线名称')
  571. isDetector = models.SmallIntegerField(default=0, verbose_name=u'侦测开关0:关闭,1:开启')
  572. DetectorRank = models.IntegerField(default=0, verbose_name=u'侦测灵敏度 0:低,1:中,2:高,3:最高')
  573. class Meta:
  574. db_table = 'uid_set'
  575. verbose_name = u'设备配置表'
  576. verbose_name_plural = verbose_name
  577. ordering = ('id',)
  578. # 设备关联用户推送
  579. class UidPushModel(models.Model):
  580. id = models.AutoField(primary_key=True, verbose_name='自增id')
  581. userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)
  582. uid_set = models.ForeignKey(UidSetModel, to_field='id', on_delete=models.CASCADE)
  583. appBundleId = models.CharField(blank=True, max_length=32, verbose_name=u'appID')
  584. app_type = models.IntegerField(default=0, verbose_name=u'app类型 1:ios,2:安卓')
  585. push_type = models.IntegerField(default=0, verbose_name=u'推送类型') # 0,apns 1,安卓gcm 2,极光
  586. token_val = models.CharField(default='', max_length=160, verbose_name=u'设备验证令牌')
  587. m_code = models.CharField(default='', max_length=64, verbose_name='手机唯一标识')
  588. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  589. updTime = models.IntegerField(verbose_name='更新时间', default=0)
  590. lang = models.CharField(max_length=8, verbose_name='推送语言类型', default='en') # en英文 cn中文
  591. tz = models.CharField(max_length=8, verbose_name='utc时区', default='0')
  592. class Meta:
  593. db_table = 'uid_push'
  594. verbose_name = '设备绑定'
  595. verbose_name_plural = verbose_name
  596. ordering = ('-id',)
  597. # 设备通道配置
  598. class UidChannelSetModel(models.Model):
  599. id = models.AutoField(primary_key=True, verbose_name='自增id')
  600. uid = models.ForeignKey(UidSetModel, to_field='id', on_delete=models.CASCADE)
  601. channel = models.IntegerField(default=1, verbose_name='通道号')
  602. pir_audio = models.SmallIntegerField(default=0, verbose_name='pir声音。0:关闭,1:开启')
  603. mic_audio = models.SmallIntegerField(default=0, verbose_name='mic声音。0:关闭,1:开启')
  604. battery_status = models.SmallIntegerField(default=0, verbose_name='低电量提醒状态。0:关闭,1:开启')
  605. battery_level = models.SmallIntegerField(default=0, verbose_name='低电量提醒级别。0: 低于10%;1:低于25%;2:低于50%;3:低于75%')
  606. sleep_status = models.SmallIntegerField(default=0, verbose_name='是否开启【休眠通知】。0:关闭;1:开启')
  607. sleep_time = models.SmallIntegerField(default=0, verbose_name='摄像机进入休眠时间。0:不休眠;1:10秒;2:20秒;3:30秒')
  608. light_night_model = models.IntegerField(default=0, verbose_name='夜视模式') # 0:全彩模式,1:黑白模式,2:智能夜视模式
  609. light_alarm_type = models.IntegerField(default=0, verbose_name='警报人形类型') # 0为人形,1为移动,3是人形和移动侦测0x0f
  610. light_alarm_level = models.IntegerField(default=0,
  611. verbose_name='声光报警级别') # 0: 关闭,1:强烈声光告警,2:轻微声光告警,3: 强烈声告警,4:轻微声告警,5:强烈光告警
  612. light_alarm_man_en = models.IntegerField(default=0, verbose_name='人为告警状态') # 0:关,1:开
  613. light_alarm_vol = models.IntegerField(default=0, verbose_name='报警音量') # 音量值0-100
  614. light_long_light = models.IntegerField(default=0, verbose_name='长亮')
  615. class Meta:
  616. db_table = 'uid_channel'
  617. verbose_name = '设备通道设置'
  618. verbose_name_plural = verbose_name
  619. # oauth2 第三方登录补全信息
  620. class UserExModel(models.Model):
  621. id = models.AutoField(primary_key=True, verbose_name='自增id')
  622. userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)
  623. appBundleId = models.CharField(default='', max_length=32, verbose_name=u'appID')
  624. region = models.CharField(default='', max_length=16, verbose_name='区域语言')
  625. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  626. updTime = models.IntegerField(verbose_name='更新时间', default=0)
  627. # {'cn': '简体中文', 'tc': '繁体中文', 'fr': '法文', 'ru': '俄文', 'es': '西班牙文', 'pl': '波兰文', 'ja': '日文', 'de': '德文', 'en': '英文'}
  628. class Meta:
  629. db_table = 'user_ex'
  630. verbose_name = '用户扩展信息表'
  631. verbose_name_plural = verbose_name
  632. ordering = ('-id',)
  633. # oauth2 第三方登录补全信息
  634. class UserOauth2Model(models.Model):
  635. id = models.AutoField(primary_key=True, verbose_name='自增id')
  636. userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)
  637. authType = models.SmallIntegerField(default=0, verbose_name=0) # 授权类型 0 非授权,1 微信授权,2 苹果授权
  638. unionID = models.CharField(default='', max_length=64, verbose_name='唯一标记') # 绑定唯一标记 unionID
  639. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  640. updTime = models.IntegerField(verbose_name='更新时间', default=0)
  641. # {'cn': '简体中文', 'tc': '繁体中文', 'fr': '法文', 'ru': '俄文', 'es': '西班牙文', 'pl': '波兰文', 'ja': '日文', 'de': '德文', 'en': '英文'}
  642. class Meta:
  643. db_table = 'user_oauth2'
  644. verbose_name = '用户oauth2关联'
  645. verbose_name_plural = verbose_name
  646. ordering = ('-id',)
  647. class SysMassModel(models.Model):
  648. id = models.AutoField(primary_key=True, verbose_name='主键自增id')
  649. sender = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE) # 发送人
  650. platform = models.CharField(default='', verbose_name='平台', max_length=16)
  651. lang = models.TextField(blank=True, default='', verbose_name=u'语种')
  652. recever = models.TextField(blank=True, default='', verbose_name=u'接受者')
  653. msg = models.TextField(blank=True, default='', verbose_name=u'发送内容')
  654. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  655. updTime = models.IntegerField(verbose_name='修改时间', default=0)
  656. class Meta:
  657. db_table = 'sys_mass'
  658. verbose_name = '群发消息记录表'
  659. verbose_name_plural = verbose_name
  660. ordering = ('-id',)
  661. class UidUserModel(models.Model):
  662. id = models.CharField(max_length=32, primary_key=True)
  663. userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)
  664. NickName = models.CharField(max_length=32, verbose_name=u'设备名称')
  665. UID = models.CharField(max_length=32, verbose_name=u'设备UID', default='')
  666. View_Account = models.CharField(max_length=32, verbose_name=u'设备用户名称', default='')
  667. View_Password = models.CharField(max_length=32, verbose_name=u'设备密码', default='')
  668. ChannelIndex = models.IntegerField(verbose_name=u'通道号', default=0)
  669. Type = models.IntegerField(verbose_name='设备类型')
  670. NotificationMode = models.IntegerField(verbose_name=u'是否报警', default=0)
  671. isShare = models.BooleanField(verbose_name=u'共享设备', default=False)
  672. primaryUserID = models.CharField(verbose_name='主用户id', max_length=32, default='')
  673. primaryMaster = models.CharField(max_length=64, verbose_name=u'主用户名', default='')
  674. data_joined = models.DateTimeField(verbose_name=u'设备添加时间', auto_now_add=True)
  675. version = models.CharField(max_length=20, default='', verbose_name=u'版本号')
  676. isVod = models.SmallIntegerField(default=0, verbose_name='是否支持云存') # 是否支持云存设备
  677. isExist = models.SmallIntegerField(default=1, verbose_name='是否被删除') # 是否被删除了(需主用户交互) 1存在,0不存在
  678. is_ap = models.SmallIntegerField(default=1, verbose_name='是否为ap模式添加') # 1为ap模式添加,0为非ap模式添加
  679. class Meta:
  680. db_table = 'uid_user'
  681. ordering = ('-data_joined',)
  682. verbose_name = u'用户设备ap表'
  683. verbose_name_plural = verbose_name
  684. class pushDeployModel(models.Model):
  685. id = models.AutoField(primary_key=True, verbose_name='主键自增id')
  686. name = models.CharField(max_length=32, default='', verbose_name=u'推送配置名称')
  687. key = models.CharField(max_length=32, default='', verbose_name=u'推送配置key')
  688. secret = models.CharField(max_length=32, default='', verbose_name=u'推送配置密钥')
  689. pem = models.CharField(max_length=32, default='', verbose_name=u'推送配置路径')
  690. type = models.CharField(max_length=32, default='', verbose_name=u'推送配置类型') # ios 1,android 2
  691. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  692. updTime = models.IntegerField(verbose_name='修改时间', default=0)
  693. class Meta:
  694. db_table = 'push_deploy'
  695. verbose_name = '推送配置表'
  696. verbose_name_plural = verbose_name
  697. ordering = ('-id',)
  698. class AppSetModel(models.Model):
  699. id = models.AutoField(primary_key=True, verbose_name='主键自增id')
  700. appBundleId = models.CharField(max_length=64, default='', verbose_name=u'APPid')
  701. content = models.TextField(default='', verbose_name=u'里面包含评分,用户帮助,ap添加方式,ap工具,广告模块等json字段值')
  702. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  703. updTime = models.IntegerField(verbose_name='修改时间', default=0)
  704. class Meta:
  705. db_table = 'app_set'
  706. verbose_name = 'app的各个版本控制表'
  707. verbose_name_plural = verbose_name
  708. ordering = ('-id',)
  709. # 认证客户端类型表
  710. class ApplicationModel(models.Model):
  711. CLIENT_TYPES = (
  712. ('confidential', 'confidential'),
  713. ('public', 'public'),
  714. )
  715. # authorization_code
  716. # 授权码模式(即先登录获取code, 再获取token)
  717. # password
  718. # 密码模式(将用户名, 密码传过去, 直接获取token)
  719. # client_credentials
  720. # 客户端模式(无用户, 用户向客户端注册, 然后客户端以自己的名义向’服务端’获取资源)
  721. # implicit
  722. # 简化模式(在redirect_uri
  723. # 的Hash传递token;
  724. # Auth客户端运行在浏览器中, 如JS, Flash)
  725. # refresh_token
  726. # 刷新access_token
  727. GRANT_TYPES = (
  728. ('authorization_code', "authorization_code"),
  729. ('password', "password"),
  730. ('client_credentials', "client_credentials"),
  731. ('implicit', "implicit"),
  732. ('refresh_token', "refresh_token"),
  733. )
  734. id = models.BigAutoField(primary_key=True)
  735. name = models.CharField(max_length=128, blank=True, verbose_name='client名字描述')
  736. client_id = models.CharField(max_length=50, unique=True, verbose_name='客户端id')
  737. client_secret = models.CharField(max_length=50, unique=True, verbose_name='客户端secret')
  738. client_type = models.CharField(max_length=32, choices=CLIENT_TYPES, verbose_name='客户端类型')
  739. grant_type = models.CharField(max_length=32, choices=GRANT_TYPES, blank=True, null=True)
  740. redirect_uri = models.TextField(blank=True, null=True, verbose_name='重定向url')
  741. skip_auth = models.BooleanField(default=False, verbose_name='是否跳过点击授权')
  742. add_time = models.IntegerField(verbose_name='添加时间', default=0)
  743. update_time = models.IntegerField(verbose_name='更新时间', default=0)
  744. class Meta:
  745. ordering = ('-add_time',)
  746. verbose_name = u'可授权客户端表'
  747. db_table = 'oauth_application'
  748. # 授权码信息表
  749. class GrantCodeModel(models.Model):
  750. id = models.BigAutoField(primary_key=True)
  751. userID = models.ForeignKey(Device_User, verbose_name="用户表userID", to_field='userID', on_delete=models.CASCADE)
  752. code = models.CharField(max_length=32, unique=True)
  753. app_id = models.CharField(max_length=100, default='', verbose_name="appBundleId")
  754. application = models.ForeignKey(ApplicationModel, verbose_name="用户表id", to_field='id', on_delete=models.CASCADE)
  755. expire_time = models.IntegerField(verbose_name='过期时间', default=0)
  756. add_time = models.IntegerField(verbose_name='添加时间', default=0)
  757. update_time = models.IntegerField(verbose_name='更新时间', default=0)
  758. # 输出的永远是本地时间输出的永远是本地时间
  759. def is_expired(self):
  760. return timezone.now() >= self.expire_time
  761. class Meta:
  762. ordering = ('-add_time',)
  763. verbose_name = u'授权码表'
  764. db_table = 'oauth_grant_code'
  765. class UserAppFrequencyModel(models.Model):
  766. id = models.AutoField(primary_key=True)
  767. user = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE, verbose_name='关联设备用户表')
  768. type = models.SmallIntegerField(default=0, verbose_name='使用频率类型') # 1:每天,2:三天,3:一周,4:两周,5:一个月,6:一个月以上
  769. data_time = models.IntegerField(default=0, verbose_name='数据时间')
  770. add_time = models.IntegerField(default=0, verbose_name='添加时间')
  771. update_time = models.IntegerField(default=0, verbose_name='更新时间')
  772. class Meta:
  773. verbose_name = '用户使用APP频率表'
  774. verbose_name_plural = verbose_name
  775. db_table = 'user_app_frequency'
  776. ordering = ('-add_time',)
  777. class AppFrequencyStatisticsModel(models.Model):
  778. id = models.AutoField(primary_key=True)
  779. data = models.TextField(default='', verbose_name='统计好的数据')
  780. month = models.IntegerField(default=0, verbose_name='月份')
  781. year = models.IntegerField(default=0, verbose_name='年份')
  782. class Meta:
  783. verbose_name = 'app月使用频率统计表'
  784. verbose_name_plural = verbose_name
  785. db_table = 'app_frequency_statistics'
  786. class AppFrequencyYearStatisticsModel(models.Model):
  787. id = models.AutoField(primary_key=True)
  788. data = models.TextField(default='', verbose_name='统计好的数据')
  789. year = models.IntegerField(default=0, verbose_name='年份')
  790. num = models.IntegerField(default=0, verbose_name='总人数')
  791. class Meta:
  792. verbose_name = 'app使用频率统计表,年度统计'
  793. verbose_name_plural = verbose_name
  794. db_table = 'app_frequency_year_statistics'
  795. # alexa连接数统计表
  796. class AlexaConnectStatisticsModel(models.Model):
  797. id = models.AutoField(primary_key=True)
  798. num = models.IntegerField(default=0, verbose_name='总人数')
  799. data_time = models.IntegerField(default=0, verbose_name='数据时间')
  800. class Meta:
  801. verbose_name = 'alexa连接数统计表'
  802. verbose_name_plural = verbose_name
  803. db_table = 'alexa_statistics'
  804. class FAQModel(models.Model):
  805. id = models.AutoField(primary_key=True)
  806. title = models.CharField(max_length=64, default='', unique=True, verbose_name='标题')
  807. content = models.TextField(default='', verbose_name='内容')
  808. add_time = models.IntegerField(default=0, verbose_name='添加时间')
  809. update_time = models.IntegerField(default=0, verbose_name='更新时间')
  810. class Meta:
  811. db_table = 'tb_faq'
  812. verbose_name = '问题帮助表'
  813. verbose_name_plural = verbose_name
  814. class AppLogModel(models.Model):
  815. id = models.AutoField(primary_key=True)
  816. user = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE, verbose_name='关联设备用户表')
  817. uid = models.CharField(max_length=20, default='', verbose_name='设备uid')
  818. average_delay = models.CharField(max_length=32, default='', verbose_name='最高平均延时')
  819. status = models.SmallIntegerField(default=0, verbose_name='失败状态')
  820. filename = models.CharField(max_length=120, default='', verbose_name='文件名')
  821. add_time = models.IntegerField(default=0, verbose_name='日期')
  822. class Meta:
  823. db_table = 'app_log'
  824. verbose_name = 'APP日志表'
  825. verbose_name_plural = verbose_name