models.py 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613
  1. from django.db import models
  2. from itertools import chain
  3. from django.utils import six
  4. from imagekit.processors import ResizeToFill
  5. from imagekit.models import ProcessedImageField
  6. import Ansjer.settings as api_settings
  7. from django.utils.encoding import python_2_unicode_compatible
  8. from django.contrib.auth.models import BaseUserManager, AbstractBaseUser
  9. from Service.CommonService import CommonService
  10. class PermissionsManager(models.Manager):
  11. use_in_migrations = True
  12. def get_by_natural_key(self, permName):
  13. return self.get(
  14. permName = permName
  15. )
  16. class RoleManager(models.Manager):
  17. """
  18. The manager for the auth's Role model.
  19. """
  20. use_in_migrations = True
  21. def get_by_natural_key(self, roleName):
  22. return self.get(roleName = roleName)
  23. class UserManager(BaseUserManager):
  24. def create_user(self, username, password, userID, is_active,
  25. user_isValid, **extra_fields):
  26. user = self.model(
  27. username = username,
  28. userID = userID,
  29. is_active = is_active,
  30. user_isValid = user_isValid,
  31. **extra_fields
  32. )
  33. user.set_password(password)
  34. user.save(using=self._db)
  35. role = Role.objects.get(rid = 1)
  36. user.role.add(role)
  37. return user
  38. def create_superuser(self, username, password, userID, is_active,
  39. user_isValid , **extra_fields):
  40. #extra_fields.setdefault('is_superuser', is_superuser)
  41. is_superuser = extra_fields.get('is_superuser', None)
  42. if is_superuser != 100 and is_superuser != 1:
  43. raise ValueError('Superuser must have is_superuser=1 or 100.')
  44. return self.create_user(username, password, userID, is_active,
  45. user_isValid, **extra_fields)
  46. @python_2_unicode_compatible
  47. class Permissions(models.Model):
  48. permName = models.CharField(blank=True, null=True, max_length=32, unique=True, verbose_name=u'权限名称')
  49. description = models.CharField(blank=True, null=True, max_length=128, verbose_name=u'描述信息', default='')
  50. objects = PermissionsManager()
  51. def __str__(self):
  52. return "%s" % (
  53. six.text_type(self.description))
  54. class Meta:
  55. ordering = ['permName']
  56. db_table = 'permissions'
  57. verbose_name = u'role permission'
  58. verbose_name_plural = verbose_name
  59. unique_together = (('permName'),)
  60. def natural_key(self):
  61. return (self.permName)
  62. class Role(models.Model):
  63. ROLE_TYPES = (
  64. ('Guests', u'Guests'),
  65. ('Users', u'Users'),
  66. ('Admins', u'Admins'),
  67. ('SysAdmins', u'SysAdmins'),
  68. ('LOGAdmins', u'LOGAdmins'),
  69. ('OTAAdmins', u'OTAAdmins'),
  70. ('DBAAdmins', u'DBAAdmins'),
  71. ('SuperAdmins', u'SuperAdmins'),
  72. )
  73. rid = models.SmallIntegerField(primary_key=True, unique=True, verbose_name=u'用户角色组ID')
  74. roleName = models.CharField(max_length=32, choices=ROLE_TYPES, unique=True,
  75. default='User', verbose_name=u'角色名称')
  76. permission = models.ManyToManyField(to='Permissions', blank=True, verbose_name=u'权限', db_table='role_permissions')
  77. Description = models.TextField(blank=True, default='', verbose_name=u'描述信息')
  78. objects = RoleManager()
  79. class Meta:
  80. ordering = ['roleName']
  81. db_table = 'role'
  82. verbose_name = u'用户角色'
  83. verbose_name_plural = verbose_name
  84. def __str__(self):
  85. return self.roleName
  86. def natural_key(self):
  87. return (self.roleName,)
  88. def has_perm(self, permission, obj=None):
  89. if self.rid == 100:
  90. return True
  91. permlist = self.permission.all()
  92. for perm in permlist:
  93. if perm.permName == permission:
  94. return True
  95. return False
  96. def get_all_perms_id(self):
  97. perms = self.permission.all()
  98. permslist = []
  99. if self.rid == 100:
  100. perms = Permissions.objects.all()
  101. for perm in perms:
  102. permslist.append(perm.id)
  103. return permslist
  104. else:
  105. permlist_tmp = []
  106. for perm in perms:
  107. permlist_tmp.append(perm.id)
  108. permSet = set(permlist_tmp)
  109. permslist = list(permSet)
  110. permslist.sort()
  111. return permslist
  112. def get_all_permission(self):
  113. perms = self.permission.all()
  114. permslist = []
  115. if self.rid == 100:
  116. perms = Permissions.objects.all()
  117. for perm in perms:
  118. permslist.append(perm.permName)
  119. return permslist
  120. else:
  121. permlist_tmp = []
  122. for perm in perms:
  123. permlist_tmp.append(perm.permName)
  124. permSet = set(permlist_tmp)
  125. permslist = list(permSet)
  126. permslist.sort()
  127. return permslist
  128. class Device_User(AbstractBaseUser):
  129. userID = models.CharField(blank=True, max_length=32, primary_key=True,
  130. verbose_name=u'用户ID', unique=True, default=CommonService.getUserID(getUser=True))
  131. role = models.ManyToManyField(to='Role', blank=True, verbose_name=u'用户角色', db_table='user_role')
  132. username = models.CharField(max_length=40, verbose_name=u'用户名', unique = True)
  133. password = models.CharField(max_length=128, verbose_name=u'密码')
  134. userEmail = models.EmailField(max_length = 64, verbose_name=u'邮箱', unique = True, default='AnonymousUser@qq.com')
  135. # 实际的路径就是 MEDIA_ROOT/Image/filename,所以可用upload_to来指定文件存放的前缀路径
  136. userIconPath = ProcessedImageField(blank=True, upload_to='User/Images/', default='static/User/default.png',
  137. verbose_name=u'头像',
  138. # 图片将处理成85x85的尺寸
  139. processors=[ResizeToFill(85, 85)],)
  140. userIconUrl = models.URLField(blank = True, max_length = 128, default=api_settings.SERVER_DOMAIN
  141. + '/account/getAvatar/User/defaultUser.png')
  142. NickName = models.CharField(blank=True, max_length=32, default='', verbose_name=u'用户昵称')
  143. is_superuser = models.IntegerField(blank=True, default=0, verbose_name=u'用户类型')
  144. is_active = models.BooleanField(blank=True, default=False, verbose_name=u'用户活动状态')
  145. data_joined = models.DateTimeField(blank=True, verbose_name=u'加入时间', auto_now_add=True)
  146. last_login = models.DateTimeField(blank=True, verbose_name='u最后登录时间', auto_now=True)
  147. user_isValid = models.BooleanField(blank=True, default=False, verbose_name=u'用户有效性', help_text=u'是否是认证通过的用户')
  148. online = models.BooleanField(blank=True, default=False, verbose_name=u'用户登录状态')
  149. machine_code = models.CharField(blank=True, max_length=128, default='', verbose_name=u'机械码')
  150. language = models.CharField(blank=True, null=True, max_length=16, default='', verbose_name=u'语言地区')
  151. objects = UserManager()
  152. USERNAME_FIELD = 'username' # 必须有一个唯一标识
  153. REQUIRED_FIELDS = ['userID', 'is_superuser'] # 创建superuser时的必须字段
  154. class Meta:
  155. ordering = ('-data_joined', )
  156. verbose_name = u'用户信息'
  157. db_table = 'device_user'
  158. get_latest_by = 'last_login'
  159. def __str__(self):
  160. return self.username
  161. def get_full_name(self):
  162. return self.userEmail
  163. def get_short_name(self):
  164. return self.username
  165. def get_role_id(self):
  166. rids = []
  167. roles = self.role.all()
  168. for role in roles:
  169. rids.append(role.rid)
  170. return rids
  171. def has_perm(self, permission, obj=None):
  172. roles = self.role.all()
  173. for role in roles:
  174. if role.rid == 100:
  175. return True
  176. permlist = self.permission.all()
  177. for perm in permlist:
  178. if perm.permName == permission:
  179. return True
  180. for role in roles:
  181. permlist = role.permission.all()
  182. for perm in permlist:
  183. if perm.permName == permission:
  184. return True
  185. return False
  186. def get_all_perms_id(self):
  187. roles = self.role.all()
  188. perms = self.permission.all()
  189. permslist = []
  190. for role in roles:
  191. if role.rid == 100:
  192. perms = Permissions.objects.all()
  193. for perm in perms:
  194. permslist.append(perm.id)
  195. return permslist
  196. for perm in perms:
  197. permslist.append(perm.id)
  198. permSet = set(permslist)
  199. for role in roles:
  200. permlist_tmp = []
  201. for perm in role.permission.all():
  202. permlist_tmp.append(perm.id)
  203. permSet_tmp = set(permlist_tmp)
  204. permSet = permSet.union(permSet_tmp)
  205. permslist = list(permSet)
  206. permslist.sort()
  207. return permslist
  208. def get_all_permission(self):
  209. roles = self.role.all()
  210. perms = self.permission.all()
  211. permslist = []
  212. for role in roles:
  213. if role.rid == 100:
  214. perms = Permissions.objects.all()
  215. for perm in perms:
  216. permslist.append(perm.permName)
  217. return permslist
  218. for perm in perms:
  219. permslist.append(perm.permName)
  220. permSet = set(permslist)
  221. for role in roles:
  222. permlist_tmp = []
  223. for perm in role.permission.all():
  224. permlist_tmp.append(perm.permName)
  225. permSet_tmp = set(permlist_tmp)
  226. permSet = permSet.union(permSet_tmp)
  227. permslist = list(permSet)
  228. permslist.sort()
  229. return permslist
  230. def has_module_perms(self, app_label):
  231. return True
  232. '''
  233. def toJSON(self, fields=None, exclude=None):
  234. Fields = []
  235. for field in self._meta.fields:
  236. Fields.append(field.name)
  237. data = {}
  238. for attr in Fields:
  239. if fields and attr not in fields:
  240. continue
  241. if exclude and attr in exclude:
  242. continue
  243. if isinstance(getattr(self, attr), datetime.datetime):
  244. data[attr] = getattr(self, attr).strftime('%Y-%m-%d %H:%M:%S')
  245. elif isinstance(getattr(self, attr), datetime.date):
  246. data[attr] = getattr(self, attr).strftime('%Y-%m-%d')
  247. elif isinstance(getattr(self, attr), ProcessedImageFieldFile):
  248. data[attr] = str(getattr(self, attr))
  249. else:
  250. data[attr] = getattr(self, attr)
  251. import simplejson as json
  252. return json.dumps(data, ensure_ascii=False)
  253. '''
  254. @property
  255. def is_staff(self):
  256. return self.is_superuser
  257. class Device_Info(models.Model):
  258. id = models.CharField(blank=True, max_length=32, primary_key=True)
  259. # to_field 指定当前关系与被关联对象中的哪个字段关联。默认情况下,to_field 指向被关联对象的主键
  260. userID = models.ForeignKey(Device_User, blank=True, to_field='userID',
  261. on_delete=models.CASCADE)
  262. NickName = models.CharField(blank=True, max_length=32, verbose_name=u'设备名称')
  263. UID = models.CharField(blank=True, max_length=32, verbose_name=u'设备UID')
  264. SID = models.CharField(blank=True, max_length=32, verbose_name=u'服务器ID')
  265. View_Account = models.CharField(blank=True, max_length=32, verbose_name=u'设备用户名称')
  266. View_Password = models.CharField(blank=True, max_length=32, verbose_name=u'设备密码')
  267. AudioFormat = models.IntegerField(blank=True, default=1, verbose_name=u'初始化影像')
  268. EventNotification = models.IntegerField(blank=True, verbose_name=u'报警类型')
  269. ChannelIndex = models.IntegerField(blank=True, verbose_name=u'通道号')
  270. Online = models.BooleanField(blank=True, default=False, verbose_name=u'设备是否在线')
  271. mMonitorIndex = models.IntegerField(blank=True, default=-1)
  272. Type = models.IntegerField(blank=True)
  273. DebugMode = models.IntegerField(blank=True, verbose_name=u'调试模式')
  274. NotificationMode = models.IntegerField(blank=True, verbose_name=u'是否报警')
  275. qvgaLevel = models.BooleanField(blank=True, verbose_name=u'SD与HD画面', default=0,
  276. help_text=u'0代表:SD、1代表:HD')
  277. isShare = models.BooleanField(blank=True, verbose_name=u'共享设备',
  278. help_text=u'是否为共享获取的设备', default=False)
  279. primaryUserID = models.CharField(blank=True, verbose_name='主用户',
  280. help_text=u'该设备的主用户', max_length=32, default='')
  281. data_joined = models.DateTimeField(blank=True, verbose_name=u'设备添加时间', auto_now_add=True)
  282. update_time = models.DateTimeField(blank=True, verbose_name=u'更新时间', auto_now=True,null=True)
  283. ip = models.CharField(blank=True, max_length=100, null=True, verbose_name=u'设备区域ip')
  284. area = models.CharField(blank=True, max_length=100, null=True, verbose_name=u'设备区域area')
  285. REQUIRED_FIELDS = []
  286. def __str__(self):
  287. return self.NickName
  288. '''
  289. def toJSON(self, fields=None, exclude=None):
  290. Fields = []
  291. for field in self._meta.fields:
  292. Fields.append(field.name)
  293. data = {}
  294. for attr in Fields:
  295. if fields and attr not in fields:
  296. continue
  297. if exclude and attr in exclude:
  298. continue
  299. if isinstance(getattr(self, attr), datetime.datetime):
  300. data[attr] = getattr(self, attr).strftime('%Y-%m-%d %H:%M:%S')
  301. elif isinstance(getattr(self, attr), datetime.date):
  302. data[attr] = getattr(self, attr).strftime('%Y-%m-%d')
  303. elif isinstance(getattr(self, attr), Device_User):
  304. data[attr] = getattr(self, attr).userID
  305. else:
  306. data[attr] = getattr(self, attr)
  307. import simplejson as json
  308. return json.dumps(data,ensure_ascii=False)
  309. '''
  310. def model_to_dict(self, fields=None, exclude=None):
  311. opts = self._meta
  312. data = {}
  313. for f in chain(opts.concrete_fields, opts.private_fields, opts.many_to_many):
  314. if not getattr(f, 'editable', False):
  315. continue
  316. if fields and f.name not in fields:
  317. continue
  318. if exclude and f.name in exclude:
  319. continue
  320. data[f.name] = f.value_from_object(self)
  321. return data
  322. class Meta:
  323. db_table = 'device_info'
  324. ordering = ('-data_joined',)
  325. verbose_name = u'用户设备信息表'
  326. verbose_name_plural=verbose_name
  327. class AuthToken_Token(models.Model):
  328. tokenID = models.OneToOneField(Device_User, blank=True,on_delete=models.CASCADE,
  329. primary_key=True) #定义一对一关系
  330. access_token = models.CharField(blank=True, max_length=256)
  331. refresh_token = models.CharField(blank=True, max_length=256)
  332. last_update = models.DateTimeField(blank=True, auto_now=True)
  333. iCode = models.CharField(blank=True, max_length=12, verbose_name=u'干扰码')
  334. mCode = models.CharField(blank=True, max_length=64, verbose_name=u'设备码')
  335. class Meta:
  336. verbose_name = u'用户Token'
  337. db_table = 'authtoken_token'
  338. ordering = ('-last_update', )
  339. class AuthToken_JWT(models.Model):
  340. jwtID = models.OneToOneField(Device_User, blank=True, on_delete=models.CASCADE,
  341. primary_key=True, verbose_name=u'token userID')
  342. access_token = models.CharField(blank=True, max_length=384, verbose_name=u'Access Token')
  343. refresh_token = models.CharField(blank=True, max_length=384, verbose_name=u'Refresh Token')
  344. secret = models.CharField(blank=True, max_length=32, verbose_name=u'Secret')
  345. last_update = models.DateTimeField(blank=True, auto_now=True, verbose_name=u'Last Update')
  346. class Meta:
  347. verbose_name = u'用户JWT'
  348. verbose_name_plural = verbose_name
  349. db_table = 'authtoken_jwt'
  350. ordering = ('-last_update', )
  351. class Email_Captcha(models.Model):
  352. userCaptcha = models.CharField(max_length=10, verbose_name=u'验证码')
  353. userEmail = models.EmailField(max_length=50, verbose_name=u'邮箱')
  354. sendType = models.CharField(choices=(("register",u"注册"),("forget",u"找回密码")), max_length=15)
  355. sendTime = models.DateField(auto_now_add=True)
  356. class Meta:
  357. db_table = 'email_captcha'
  358. ordering = ('-sendTime',)
  359. verbose_name = u'邮箱验证码'
  360. verbose_name_plural=verbose_name
  361. class Auth_Captcha(models.Model):
  362. username = models.CharField(max_length=50, help_text=u'用户名(邮箱或电话号码)')
  363. authcaptca = models.CharField(max_length=6, help_text=u'验证码')
  364. sendtype = models.CharField(max_length=15, choices=(("register",u"注册"),("forget",u"找回密码")))
  365. sendtime = models.DateTimeField(auto_now_add=True)
  366. class Meta:
  367. db_table = 'auth_captcha'
  368. ordering = ('-sendtime',)
  369. verbose_name = u'邮箱验证码'
  370. verbose_name_plural=verbose_name
  371. class Access_Log(models.Model):
  372. id = models.AutoField(primary_key=True,verbose_name=u'自增标记ID')
  373. user = models.CharField(max_length=100,null=True,blank=True,verbose_name=u'用户')
  374. operation = models.CharField(max_length=100,null=True,blank=True,verbose_name=u'操作')
  375. ip = models.CharField(max_length=100,null=True,blank=True,verbose_name=u'访问ip地址')
  376. url = models.CharField(max_length=150,null=True,blank=True,verbose_name=u'访问路径')
  377. status = models.IntegerField(null=True,blank=True,verbose_name=u'状态')
  378. time = models.DateTimeField(null=True,blank=True, db_index=True,verbose_name=u'访问时间')
  379. content = models.TextField(blank=True,null=True, verbose_name=u'参数内容')
  380. class Meta:
  381. db_table = 'access_log'
  382. verbose_name = u'访问日志表'
  383. verbose_name_plural=verbose_name
  384. class Equipment_Stream(models.Model):
  385. id = models.AutoField(primary_key=True,verbose_name=u'自增标记ID')
  386. userID = models.CharField(blank=True, max_length=32,verbose_name=u'用户ID')
  387. status = models.IntegerField(null=True, blank=True, verbose_name=u'状态')
  388. uid = models.CharField(null=True, blank=True,max_length=32, verbose_name=u'设备ID')
  389. channel = models.IntegerField(null=True, blank=True, verbose_name=u'设备通道')
  390. access_token = models.CharField(blank=True, max_length=128,verbose_name=u'设备推流验证令牌')
  391. total_flow = models.FloatField(null=True, blank=True, verbose_name=u'传输总容量')
  392. add_time = models.DateTimeField(blank=True, null=True,verbose_name=u'加入时间', auto_now_add=True)
  393. update_time = models.DateTimeField(blank=True, verbose_name=u'更新时间', auto_now=True)
  394. rank = models.IntegerField(null=True, blank=True, verbose_name=u'推流套餐类型')
  395. class Meta:
  396. db_table = 'equipment_stream'
  397. verbose_name = u'用户设备推流表'
  398. verbose_name_plural=verbose_name
  399. class Equipment_Sensor(models.Model):
  400. id = models.AutoField(primary_key=True,verbose_name=u'自增标记ID')
  401. status = models.IntegerField(null=True, blank=True, verbose_name=u'状态')
  402. type = models.IntegerField(null=True, blank=True, verbose_name=u'类型')
  403. name = models.CharField(null=True, blank=True,max_length=128, verbose_name=u'传感器名称')
  404. add_time = models.DateTimeField(blank=True,null=True, verbose_name=u'加入时间', auto_now_add=True)
  405. update_time = models.DateTimeField(blank=True, verbose_name=u'更新时间', auto_now=True)
  406. uid = models.CharField(null=True, blank=True,max_length=32, verbose_name=u'设备ID')
  407. def __str__(self):
  408. return self.id
  409. class Meta:
  410. db_table = 'equipment_sensor'
  411. verbose_name = u'设备传感器表'
  412. verbose_name_plural=verbose_name
  413. ordering = ('id',)
  414. class Equipment_Info(models.Model):
  415. id = models.AutoField(primary_key=True,verbose_name=u'自增标记ID')
  416. devUid = models.CharField(null=True, blank=True,max_length=32, verbose_name=u'设备ID')
  417. devNickName = models.CharField(blank=True, max_length=32, default='', verbose_name=u'设备昵称')
  418. Channel = models.IntegerField(null=True, blank=True, verbose_name=u'设备通道')
  419. eventType = models.IntegerField(null=True, blank=True, verbose_name=u'事件类型')
  420. viewAccont = models.CharField(blank=True,null=True, max_length=32, verbose_name=u'设备账户')
  421. viewPwd = models.CharField(blank=True, null=True,max_length=32, verbose_name=u'设备密码')
  422. status = models.BooleanField(blank=True, default=False, verbose_name=u'事件状态')
  423. alarm = models.CharField(blank=True, max_length=256, verbose_name=u'报警信息')
  424. eventTime = models.CharField(blank=True,null=True, max_length=16, verbose_name=u'设备报警时间')
  425. receiveTime = models.CharField(blank=True,null=True, max_length=16, verbose_name=u'接收到报警时间')
  426. def __str__(self):
  427. return self.id
  428. class Meta:
  429. db_table = 'equipment_info'
  430. verbose_name = u'设备信息推送表'
  431. verbose_name_plural=verbose_name
  432. ordering = ('id',)
  433. class Feedback_Info(models.Model):
  434. id = models.AutoField(primary_key=True,verbose_name=u'自增标记ID')
  435. userID = models.CharField(blank=True, max_length=32, verbose_name=u'用户ID')
  436. status = models.BooleanField(blank=True, default=False, verbose_name=u'状态:0未解决/解决')
  437. content = models.TextField(blank=True,null=True, verbose_name=u'反馈描述')
  438. add_time = models.DateTimeField(blank=True, null=True, verbose_name=u'加入时间/反馈时间', auto_now_add=True)
  439. update_time = models.DateTimeField(blank=True, verbose_name=u'更新时间', auto_now=True)
  440. def __str__(self):
  441. return self.id
  442. class Meta:
  443. db_table = 'feedback_info'
  444. verbose_name = u'用户反馈信息表'
  445. verbose_name_plural=verbose_name
  446. ordering = ('id',)
  447. class Store_Meal(models.Model):
  448. id = models.AutoField(primary_key=True,verbose_name=u'自增ID')
  449. title = models.CharField(blank=True, max_length=32, verbose_name=u'标题')
  450. price = models.CharField(blank=True, max_length=32, verbose_name=u'价格')
  451. day = models.IntegerField(null=True, blank=True, verbose_name=u'存储时间')
  452. content = models.TextField(blank=True,null=True, verbose_name=u'描述')
  453. add_time = models.DateTimeField(blank=True,null=True, verbose_name=u'加入时间', auto_now_add=True)
  454. update_time = models.DateTimeField(blank=True, verbose_name=u'更新时间', auto_now=True)
  455. def __str__(self):
  456. return self.id
  457. class Meta:
  458. db_table = 'store_meal'
  459. verbose_name = u'存储套餐'
  460. verbose_name_plural=verbose_name
  461. ordering = ('id',)
  462. class Device_Meal(models.Model):
  463. id = models.AutoField(primary_key=True,verbose_name=u'自增标记ID')
  464. status = models.IntegerField(null=True, blank=True, verbose_name=u'状态')
  465. uid = models.CharField(null=True, blank=True,max_length=32,verbose_name=u'设备ID')
  466. channel = models.IntegerField(null=True, blank=True, verbose_name=u'设备通道')
  467. add_time = models.DateTimeField(blank=True, null=True,verbose_name=u'加入时间', auto_now_add=True)
  468. update_time = models.DateTimeField(blank=True, verbose_name=u'更新时间', auto_now=True)
  469. end_time = models.DateTimeField(blank=True, verbose_name=u'最后时间')
  470. rank = models.ForeignKey(Store_Meal, blank=True, to_field='id',
  471. on_delete=models.CASCADE,verbose_name='套餐类型')
  472. class Meta:
  473. db_table = 'device_meal'
  474. verbose_name = u'设备关联套餐表'
  475. verbose_name_plural=verbose_name
  476. ordering = ('id',)
  477. def __str__(self):
  478. return self.id
  479. class Equipment_Version(models.Model):
  480. eid = models.CharField(blank=True, max_length=32, primary_key=True)
  481. ESN = models.CharField(blank=True, max_length=32, verbose_name=u'设备规格名称')
  482. code = models.CharField(blank=True, max_length=32, verbose_name=u'设备规格代码')
  483. version = models.CharField(blank=True, max_length=32, verbose_name=u'设备版本')
  484. softwareVersion = models.CharField(blank=True, max_length=32, verbose_name=u'软件本版本')
  485. chipModelList2Code = models.CharField(max_length=32,blank=True, verbose_name=u'主芯片码')
  486. channel = models.IntegerField(blank=True, verbose_name=u'通道数')
  487. resolutionRatio = models.IntegerField(blank=True, verbose_name=u'分辨率')
  488. type = models.CharField(blank=True, max_length=16, verbose_name=u'设备机型')
  489. companyCode = models.CharField(blank=True, max_length=128, verbose_name=u'用户公司名称')
  490. data_joined = models.DateTimeField(blank=True, verbose_name=u'加入时间', auto_now_add=True)
  491. fileSize = models.IntegerField(blank=True, verbose_name=u'文件总大小')
  492. filePath = models.CharField(blank=True, max_length=256, verbose_name=u'升级文件路径')
  493. Description = models.TextField(blank=True, default='', verbose_name=u'描述信息')
  494. fileMd5 = models.CharField(blank=True,max_length=32,null=True,verbose_name=u'上传文件MD5加密')
  495. status = models.BooleanField(blank=True, default=True, verbose_name=u'是否开启更新状态')
  496. update_time = models.DateTimeField(blank=True, verbose_name=u'更新时间', auto_now=True)
  497. class Meta:
  498. verbose_name = '设备版本信息'
  499. ordering = ('-data_joined',)
  500. db_table = 'equipment_version'
  501. class App_Info(models.Model):
  502. id = models.AutoField(primary_key=True,verbose_name=u'自增标记ID')
  503. appBundleId = models.CharField(blank=True, max_length=32, verbose_name=u'appID')
  504. appName = models.CharField(blank=True, max_length=32, verbose_name=u'app名称')
  505. systemLanguage = models.CharField(blank=True, max_length=32, verbose_name=u'系统语言')
  506. newAppversion = models.CharField(blank=True, max_length=12, verbose_name=u'系统版本')
  507. bundleVersion = models.CharField(blank=True, max_length=12, verbose_name=u'项目版本')
  508. content = models.TextField(blank=True,null=True, verbose_name=u'更新内容')
  509. app_type = models.IntegerField(null=True, blank=True, verbose_name=u'app类型')
  510. add_time = models.DateTimeField(blank=True,null=True, verbose_name=u'加入时间', auto_now_add=True)
  511. update_time = models.DateTimeField(blank=True, verbose_name=u'更新时间', auto_now=True)
  512. def __str__(self):
  513. return self.id
  514. class Meta:
  515. db_table = 'app_info'
  516. verbose_name = u'app信息表'
  517. verbose_name_plural=verbose_name
  518. ordering = ('id',)