models.py 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870
  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. objects = UserManager()
  121. USERNAME_FIELD = 'userID' # 必须有一个唯一标识
  122. REQUIRED_FIELDS = ['is_superuser'] # 创建superuser时的必须字段
  123. class Meta:
  124. ordering = ('-data_joined',)
  125. verbose_name = u'用户信息'
  126. db_table = 'device_user'
  127. get_latest_by = 'last_login'
  128. def __str__(self):
  129. return self.username
  130. def get_role_id(self):
  131. rids = []
  132. roles = self.role.all()
  133. for role in roles:
  134. rids.append(role.rid)
  135. return rids
  136. def get_all_permission(self):
  137. roles = self.role.all()
  138. perms = self.permission.all()
  139. permslist = []
  140. for role in roles:
  141. if role.rid == 100:
  142. perms = Permissions.objects.all()
  143. for perm in perms:
  144. permslist.append(perm.permName)
  145. return permslist
  146. for perm in perms:
  147. permslist.append(perm.permName)
  148. permSet = set(permslist)
  149. for role in roles:
  150. permlist_tmp = []
  151. for perm in role.permission.all():
  152. permlist_tmp.append(perm.permName)
  153. permSet_tmp = set(permlist_tmp)
  154. permSet = permSet.union(permSet_tmp)
  155. permslist = list(permSet)
  156. permslist.sort()
  157. return permslist
  158. @property
  159. def is_staff(self):
  160. return self.is_superuser
  161. # 设备表是建项目开发者设计的,自己看着办
  162. class Device_Info(models.Model):
  163. id = models.CharField(blank=True, max_length=32, primary_key=True)
  164. userID = models.ForeignKey(Device_User, blank=True, to_field='userID', on_delete=models.CASCADE)
  165. NickName = models.CharField(blank=True, max_length=32, verbose_name=u'设备名称')
  166. UID = models.CharField(blank=True, max_length=32, verbose_name=u'设备UID', default='')
  167. SID = models.CharField(blank=True, max_length=32, verbose_name=u'服务器ID', default='')
  168. View_Account = models.CharField(blank=True, max_length=32, verbose_name=u'设备用户名称', default='')
  169. View_Password = models.CharField(blank=True, max_length=32, verbose_name=u'设备密码', default='')
  170. AudioFormat = models.IntegerField(blank=True, default=1, verbose_name=u'初始化影像')
  171. EventNotification = models.IntegerField(blank=True, verbose_name=u'报警类型', default=0)
  172. ChannelIndex = models.IntegerField(blank=True, verbose_name=u'通道号', default=0)
  173. Online = models.BooleanField(blank=True, default=False, verbose_name=u'设备是否在线')
  174. mMonitorIndex = models.IntegerField(blank=True, default=-1)
  175. Type = models.IntegerField(blank=True, verbose_name='设备类型')
  176. DebugMode = models.IntegerField(blank=True, verbose_name=u'调试模式', default=0)
  177. NotificationMode = models.IntegerField(blank=True, verbose_name=u'是否报警', default=0)
  178. qvgaLevel = models.BooleanField(blank=True, verbose_name=u'SD与HD画面', default=0,
  179. help_text=u'0代表:SD、1代表:HD')
  180. isShare = models.BooleanField(blank=True, verbose_name=u'共享设备',
  181. help_text=u'是否为共享获取的设备', default=False)
  182. primaryUserID = models.CharField(blank=True, verbose_name='主用户id', max_length=32, default='')
  183. primaryMaster = models.CharField(max_length=64, verbose_name=u'主用户名', default='')
  184. data_joined = models.DateTimeField(blank=True, verbose_name=u'设备添加时间', auto_now_add=True)
  185. update_time = models.DateTimeField(blank=True, verbose_name=u'更新时间', auto_now=True, null=True)
  186. ip = models.CharField(blank=True, max_length=20, default='', verbose_name=u'设备区域ip')
  187. area = models.CharField(blank=True, max_length=100, default='', verbose_name=u'设备区域area')
  188. # ios要求新增字段
  189. version = models.CharField(blank=True, max_length=20, default='', verbose_name=u'版本号')
  190. SpaceUsable = models.CharField(blank=True, max_length=20, default='', verbose_name=u'可用空间')
  191. SpaceSum = models.CharField(blank=True, max_length=20, default='', verbose_name=u'总空间')
  192. WIFIName = models.CharField(blank=True, max_length=50, default='', verbose_name=u'无线名称')
  193. WIFIIP = models.CharField(blank=True, max_length=20, default='', verbose_name=u'无线ip')
  194. WIFIPwd = models.CharField(blank=True, max_length=50, default='', verbose_name=u'无线密码')
  195. isDetector = models.BooleanField(blank=True, verbose_name=u'侦测开关0:关闭,1:开启)', default=False)
  196. DetectorRank = models.IntegerField(blank=True, default=0, verbose_name=u'侦测灵敏度 1:低,2:中,3:高4:最高')
  197. iSNotification = models.BooleanField(blank=True, verbose_name=u'报警通知 0:关闭,1:开启)', default=False)
  198. MirrorType = models.IntegerField(blank=True, default=0, verbose_name=u'镜像类型 0:关闭镜像,1:上下镜像,2:左右镜像,3:上下左右镜像')
  199. RecordType = models.IntegerField(blank=True, default=0, verbose_name=u'录像模式(0:关闭,1:全是录像,3:报警录像)')
  200. TimeZone = models.CharField(blank=True, max_length=50, default='', verbose_name=u'时区')
  201. isVod = models.SmallIntegerField(blank=True, default=0, verbose_name='是否支持云存') # 是否支持云存设备
  202. isExist = models.SmallIntegerField(blank=True, default=1, verbose_name='是否被删除') # 是否被删除了(需主用户交互) 1存在,0不存在,2设备被重置
  203. ###
  204. REQUIRED_FIELDS = []
  205. def __str__(self):
  206. return self.NickName
  207. def model_to_dict(self, fields=None, exclude=None):
  208. opts = self._meta
  209. data = {}
  210. for f in chain(opts.concrete_fields, opts.private_fields, opts.many_to_many):
  211. if not getattr(f, 'editable', False):
  212. continue
  213. if fields and f.name not in fields:
  214. continue
  215. if exclude and f.name in exclude:
  216. continue
  217. data[f.name] = f.value_from_object(self)
  218. return data
  219. class Meta:
  220. db_table = 'device_info'
  221. ordering = ('-data_joined',)
  222. verbose_name = u'用户设备信息表'
  223. verbose_name_plural = verbose_name
  224. class Access_Log(models.Model):
  225. id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
  226. user = models.CharField(max_length=100, default='', db_index=True, blank=True, verbose_name=u'用户')
  227. operation = models.CharField(max_length=100, db_index=True, default='', blank=True, verbose_name=u'操作')
  228. ip = models.CharField(max_length=100, default='', db_index=True, blank=True, verbose_name=u'访问ip地址')
  229. url = models.CharField(max_length=150, default='', blank=True, verbose_name=u'访问路径')
  230. status = models.IntegerField(default=0, blank=True, verbose_name=u'状态')
  231. time = models.DateTimeField(null=True, blank=True, db_index=True, verbose_name=u'访问时间')
  232. content = models.TextField(blank=True, default='', verbose_name=u'参数内容')
  233. class Meta:
  234. db_table = 'access_log'
  235. verbose_name = u'访问日志表'
  236. verbose_name_plural = verbose_name
  237. class Equipment_Info(models.Model):
  238. id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
  239. devUid = models.CharField(default='', blank=True, max_length=32, verbose_name=u'设备ID')
  240. devNickName = models.CharField(blank=True, max_length=32, default='', verbose_name=u'设备昵称')
  241. Channel = models.IntegerField(default=1, blank=True, verbose_name=u'设备通道')
  242. eventType = models.IntegerField(default=0, blank=True, verbose_name=u'事件类型')
  243. status = models.BooleanField(blank=True, default=False, verbose_name=u'事件状态')
  244. alarm = models.CharField(blank=True, max_length=256, verbose_name=u'报警信息')
  245. eventTime = models.CharField(blank=True, default='', max_length=16, verbose_name=u'设备报警时间')
  246. receiveTime = models.CharField(blank=True, default='', max_length=16, verbose_name=u'接收到报警时间')
  247. userID = models.ForeignKey(Device_User, null=True, blank=True, to_field='userID', on_delete=models.CASCADE)
  248. is_st = models.SmallIntegerField(default=0, verbose_name='是否截图') # 0 否,1 是图,2,视频
  249. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  250. def __str__(self):
  251. return self.id
  252. class Meta:
  253. db_table = 'equipment_info'
  254. verbose_name = u'设备信息推送表'
  255. verbose_name_plural = verbose_name
  256. ordering = ('-id',)
  257. class StatResModel(models.Model):
  258. id = models.AutoField(primary_key=True, verbose_name='自动ID')
  259. name = models.CharField(default='', max_length=120, verbose_name='图片名称', unique=True)
  260. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  261. def __str__(self):
  262. return self.name
  263. class Meta:
  264. db_table = 'statres'
  265. verbose_name = '静态资源表'
  266. verbose_name_plural = verbose_name
  267. ordering = ('id',)
  268. class FeedBackModel(models.Model):
  269. id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
  270. userID = models.ForeignKey(Device_User, null=True, blank=True, to_field='userID', on_delete=models.CASCADE)
  271. type = models.SmallIntegerField(default=0, verbose_name='反馈类型') # 【0:产品建议,1:功能异常,2:安全问题】
  272. status = models.SmallIntegerField(default=0, verbose_name='状态:0未解决/解决')
  273. content = models.TextField(blank=True, null=True, verbose_name=u'反馈描述')
  274. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  275. updTime = models.IntegerField(verbose_name='更新时间', default=0)
  276. FS = models.ManyToManyField(to='StatResModel', blank=True, verbose_name=u'用户反馈关联资源',
  277. db_table='fb_res')
  278. app = models.CharField(max_length=8, default='', verbose_name='类型') # [ios,android]
  279. phone_model = models.CharField(max_length=64, default='', verbose_name='手机型号') # [小米,android]
  280. os_version = models.CharField(max_length=16, default='', verbose_name='系统版本')
  281. uid = models.CharField(max_length=20, default='', verbose_name='设备uid')
  282. product_type = models.CharField(max_length=32, default='', verbose_name='设备uid')
  283. app_version = models.CharField(max_length=32, default='', verbose_name='app版本信息')
  284. appBundleId = models.CharField(max_length=32, default='', verbose_name='app版本appBundleId')
  285. email = models.CharField(max_length=32, default='', verbose_name='app版本email')
  286. score = models.CharField(max_length=32, default='0', verbose_name='评分--星星数')
  287. def __str__(self):
  288. return self.id
  289. class Meta:
  290. db_table = 'feedback'
  291. verbose_name = u'用户反馈信息表'
  292. verbose_name_plural = verbose_name
  293. ordering = ('-id',)
  294. class User_Brand(models.Model):
  295. id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
  296. # 关联用户
  297. userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)
  298. deviceSupplier = models.CharField(max_length=32, default='', verbose_name='(必填)设备供应商 string (例:华为、小米...)')
  299. deviceModel = models.CharField(max_length=32, default='', verbose_name='(必填)设备型号 string @mock=HM NOTE 1TD')
  300. osType = models.CharField(max_length=32, default='', verbose_name='(必填)操作系统名称 string @mock=Android')
  301. osVersion = models.CharField(max_length=32, default='', verbose_name='(必填)操作系统版本号 string @mock=4.0')
  302. country = models.CharField(max_length=200, default='', verbose_name='国家')
  303. province = models.CharField(max_length=150, default='', verbose_name='省')
  304. city = models.CharField(max_length=132, default='', verbose_name='市')
  305. area = models.CharField(max_length=132, default='', verbose_name='区')
  306. street = models.CharField(max_length=132, default='', verbose_name='街道')
  307. longitude = models.CharField(max_length=30, default='', verbose_name='经度')
  308. latitude = models.CharField(max_length=30, default='', verbose_name='纬度')
  309. appId = models.CharField(max_length=50, default='', verbose_name='appid_值')
  310. status = models.IntegerField(default=0, verbose_name='传国家省市信息过来就为状态:1 ,不传就为状态:0')
  311. ip = models.CharField(blank=True, max_length=20, default='', verbose_name=u'区域ip')
  312. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  313. def __str__(self):
  314. return self.id
  315. class Meta:
  316. db_table = 'user_brand'
  317. verbose_name = u'用户登录手机端手机品牌统计表'
  318. verbose_name_plural = verbose_name
  319. ordering = ('id',)
  320. # 存储通表
  321. class VodBucketModel(models.Model):
  322. id = models.AutoField(primary_key=True, verbose_name='主键')
  323. bucket = models.CharField(max_length=30, verbose_name='设备UID')
  324. storeDay = models.IntegerField(default=0, verbose_name='存储生命周期(天)')
  325. content = models.TextField(verbose_name='描述',default='')
  326. endpoint = models.CharField(max_length=125, default='', verbose_name='存储节点')
  327. area = models.CharField(max_length=16, default='', verbose_name='区域')
  328. region = models.CharField(max_length=16, default='', verbose_name='regionID')
  329. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  330. updTime = models.IntegerField(verbose_name='更新时间', default=0)
  331. def __str__(self):
  332. return self.id
  333. class Meta:
  334. db_table = 'vod_bucket'
  335. verbose_name = u'存储通信息'
  336. verbose_name_plural = verbose_name
  337. ordering = ('-id',)
  338. class Store_Meal(models.Model):
  339. id = models.AutoField(primary_key=True, verbose_name=u'自增ID')
  340. title = models.CharField(blank=True, max_length=32, verbose_name=u'标题')
  341. currency = models.CharField(blank=True, default='USD', max_length=32, verbose_name=u'货币')
  342. price = models.CharField(blank=True, max_length=32, verbose_name=u'价格')
  343. day = models.IntegerField(default=0, blank=True, verbose_name=u'套餐天数')
  344. content = models.TextField(blank=True, null=True, verbose_name=u'描述')
  345. add_time = models.DateTimeField(blank=True, null=True, verbose_name=u'加入时间', auto_now_add=True)
  346. type = models.SmallIntegerField(default=0, verbose_name='付款类型') # 0 是paypal,1为支付宝
  347. update_time = models.DateTimeField(blank=True, verbose_name=u'更新时间', auto_now=True)
  348. bucket = models.ForeignKey(VodBucketModel, blank=True, to_field='id', on_delete=models.CASCADE,
  349. default=1, verbose_name='存储空间')
  350. vod_type = models.SmallIntegerField(default=0, verbose_name='云存储套餐类型') # 0:事件型 1:连续型
  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. # 订单关联套餐
  436. rank = models.ForeignKey(Store_Meal, to_field='id', default='', on_delete=models.CASCADE, verbose_name='套餐类型')
  437. paypal = models.CharField(max_length=150, default='', verbose_name='paypal付款url')
  438. payType = models.SmallIntegerField(default=0, verbose_name='付款类型0:paypal,1:alipay')
  439. def __str__(self):
  440. return self.orderID
  441. class Meta:
  442. db_table = 'orders'
  443. verbose_name = u'订单信息表'
  444. verbose_name_plural = verbose_name
  445. ordering = ('-orderID',)
  446. class VodHlsModel(models.Model):
  447. id = models.AutoField(primary_key=True, verbose_name='回放列表主键')
  448. uid = models.CharField(max_length=20, verbose_name='设备UID')
  449. channel = models.SmallIntegerField(default=0, verbose_name='通道')
  450. time = models.IntegerField(verbose_name='播放列表名字时间戳', default=0, db_index=True)
  451. endTime = models.IntegerField(verbose_name='删除时间', default=0)
  452. sec = models.IntegerField(verbose_name='秒数', default=0)
  453. bucket = models.ForeignKey(VodBucketModel, blank=True, to_field='id', on_delete=models.CASCADE, default=1,
  454. verbose_name='存储空间')
  455. def __str__(self):
  456. return self.id
  457. class Meta:
  458. db_table = 'vod_hls'
  459. verbose_name = u'云存回放信息表'
  460. verbose_name_plural = verbose_name
  461. ordering = ('-id',)
  462. class OssCrdModel(models.Model):
  463. id = models.AutoField(primary_key=True, verbose_name='主键')
  464. uid = models.CharField(max_length=20, verbose_name='设备UID')
  465. channel = models.SmallIntegerField(default=0, verbose_name='通道')
  466. data = models.TextField(verbose_name='设备sts')
  467. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  468. bucket = models.ForeignKey(VodBucketModel, blank=True, to_field='id', on_delete=models.CASCADE, default=1,
  469. verbose_name='存储空间')
  470. def __str__(self):
  471. return self.id
  472. class Meta:
  473. db_table = 'osscrd'
  474. verbose_name = u'设备证书'
  475. verbose_name_plural = verbose_name
  476. ordering = ('-id',)
  477. class UID_Bucket(models.Model):
  478. id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
  479. uid = models.CharField(max_length=20, verbose_name='设备UID')
  480. channel = models.SmallIntegerField(default=0, verbose_name='通道')
  481. bucket = models.ForeignKey(VodBucketModel, blank=True, to_field='id', on_delete=models.CASCADE, verbose_name='存储空间')
  482. status = models.SmallIntegerField(default=0, verbose_name='状态[0:开启,1:关闭]')
  483. endTime = models.IntegerField(verbose_name='结束时间', default=0)
  484. class Meta:
  485. db_table = 'uid_bucket'
  486. verbose_name = u'设备关联套餐表'
  487. verbose_name_plural = verbose_name
  488. ordering = ('id',)
  489. class VOD_UID_Bucket(models.Model):
  490. id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
  491. uid = models.CharField(max_length=20, verbose_name='设备UID')
  492. channel = models.SmallIntegerField(default=0, verbose_name='通道')
  493. bucket = models.ForeignKey(VodBucketModel, blank=True, to_field='id', on_delete=models.CASCADE, verbose_name='存储空间')
  494. status = models.SmallIntegerField(default=0, verbose_name='状态[0:开启,1:关闭]')
  495. endTime = models.IntegerField(verbose_name='结束时间', default=0)
  496. order = models.ForeignKey(Order_Model,blank=True,to_field='orderID', on_delete=models.CASCADE,verbose_name='订单')
  497. class Meta:
  498. db_table = 'vod_uid_bucket'
  499. verbose_name = u'设备关联套餐订单表'
  500. verbose_name_plural = verbose_name
  501. ordering = ('id',)
  502. class UID_Preview(models.Model):
  503. id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
  504. uid = models.CharField(default='', max_length=20, db_index=True, verbose_name='设备UID')
  505. channel = models.SmallIntegerField(verbose_name=u'通道号', default=0)
  506. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  507. updTime = models.IntegerField(verbose_name='更新时间', default=0)
  508. class Meta:
  509. db_table = 'uid_preview'
  510. verbose_name = '设备预览图'
  511. verbose_name_plural = verbose_name
  512. ordering = ('id',)
  513. # 系统发送信息新到用户
  514. class SysMsgModel(models.Model):
  515. id = models.AutoField(primary_key=True, verbose_name='自增id')
  516. userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE) # 用户信息
  517. msg = models.TextField(blank=True, default='', verbose_name=u'发送内容')
  518. status = models.SmallIntegerField(verbose_name='是否已读', default=0) # 0:否,1:是
  519. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  520. updTime = models.IntegerField(verbose_name='更新时间', default=0)
  521. eventType = models.IntegerField(verbose_name='消息类型', default=0) # 默认系统消息类型,0系统消息,1 ipcamera消息
  522. uid = models.CharField(default='', max_length=20, db_index=True, verbose_name='设备UID')
  523. class Meta:
  524. db_table = 'sys_msg'
  525. verbose_name = '系统消息'
  526. verbose_name_plural = verbose_name
  527. ordering = ('-id',)
  528. # 设备推送重构
  529. # 设备配置表,新
  530. class UidSetModel(models.Model):
  531. id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
  532. uid = models.CharField(max_length=20, db_index=True, unique=True, verbose_name='设备UID')
  533. channel = models.SmallIntegerField(default=0, verbose_name='通道数量') #
  534. detect_status = models.SmallIntegerField(default=0, verbose_name='推送开关') # 状态[0:关闭,1:开启,2:用户解绑]
  535. detect_interval = models.IntegerField(verbose_name='推送间隔', default=60) # 秒
  536. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  537. updTime = models.IntegerField(verbose_name='更新时间', default=0)
  538. ucode = models.CharField(max_length=32, verbose_name='设备产品码', default='')
  539. version = models.CharField(max_length=32, verbose_name='设备版本', default='')
  540. p2p_region = models.CharField(max_length=16, verbose_name='设备p2p区域', default='ALL') # ALL CN EU US
  541. cloud_vod = models.SmallIntegerField(default=2, verbose_name='云存开关') # 0,关闭,1开启,2,不支持
  542. tz = models.CharField(default='', max_length=16, verbose_name='设备时区') # +8
  543. video_code = models.SmallIntegerField(default=0, verbose_name='编码类型') # 0:264,1:265
  544. nickname = models.CharField(default='', max_length=64, verbose_name='设备昵称')
  545. ip = models.CharField(max_length=20, default='', verbose_name=u'设备ip')
  546. # 设备重置后第一次启动时间
  547. is_alexa = models.IntegerField(default=0, verbose_name='是否支持alexa') # 0为不支持,1为支持,2为开启alexa发现
  548. detect_group = models.CharField(default='', max_length=32, verbose_name=u'检测类型')
  549. pwd = models.CharField(max_length=32, default='', verbose_name=u'设备密码')
  550. resetTime = models.IntegerField(default=0, verbose_name='设备重置时间')
  551. region_alexa = models.CharField(max_length=8, verbose_name='设备alexa区域', default='ALL') # ALL CN EU US
  552. class Meta:
  553. db_table = 'uid_set'
  554. verbose_name = u'设备配置表'
  555. verbose_name_plural = verbose_name
  556. ordering = ('id',)
  557. # 设备关联用户推送
  558. class UidPushModel(models.Model):
  559. id = models.AutoField(primary_key=True, verbose_name='自增id')
  560. userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)
  561. uid_set = models.ForeignKey(UidSetModel, to_field='id', on_delete=models.CASCADE)
  562. appBundleId = models.CharField(blank=True, max_length=32, verbose_name=u'appID')
  563. app_type = models.IntegerField(default=0, verbose_name=u'app类型 1:ios,2:安卓')
  564. push_type = models.IntegerField(default=0, verbose_name=u'推送类型') # 0,apns 1,安卓gcm 2,极光
  565. token_val = models.CharField(default='', max_length=160, verbose_name=u'设备验证令牌')
  566. m_code = models.CharField(default='', max_length=64, verbose_name='手机唯一标识')
  567. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  568. updTime = models.IntegerField(verbose_name='更新时间', default=0)
  569. lang = models.CharField(max_length=8, verbose_name='推送语言类型', default='en') # en英文 cn中文
  570. tz = models.CharField(max_length=8, verbose_name='utc时区', default='0')
  571. class Meta:
  572. db_table = 'uid_push'
  573. verbose_name = '设备绑定'
  574. verbose_name_plural = verbose_name
  575. ordering = ('-id',)
  576. # oauth2 第三方登录补全信息
  577. class UserExModel(models.Model):
  578. id = models.AutoField(primary_key=True, verbose_name='自增id')
  579. userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)
  580. appBundleId = models.CharField(default='', max_length=32, verbose_name=u'appID')
  581. region = models.CharField(default='', max_length=16, verbose_name='区域语言')
  582. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  583. updTime = models.IntegerField(verbose_name='更新时间', default=0)
  584. # {'cn': '简体中文', 'tc': '繁体中文', 'fr': '法文', 'ru': '俄文', 'es': '西班牙文', 'pl': '波兰文', 'ja': '日文', 'de': '德文', 'en': '英文'}
  585. class Meta:
  586. db_table = 'user_ex'
  587. verbose_name = '用户扩展信息表'
  588. verbose_name_plural = verbose_name
  589. ordering = ('-id',)
  590. # oauth2 第三方登录补全信息
  591. class UserOauth2Model(models.Model):
  592. id = models.AutoField(primary_key=True, verbose_name='自增id')
  593. userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)
  594. authType = models.SmallIntegerField(default=0, verbose_name=0) # 授权类型 0 非授权,1 微信授权
  595. unionID = models.CharField(default='', max_length=64, verbose_name='唯一标记') # 绑定唯一标记 unionID
  596. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  597. updTime = models.IntegerField(verbose_name='更新时间', default=0)
  598. # {'cn': '简体中文', 'tc': '繁体中文', 'fr': '法文', 'ru': '俄文', 'es': '西班牙文', 'pl': '波兰文', 'ja': '日文', 'de': '德文', 'en': '英文'}
  599. class Meta:
  600. db_table = 'user_oauth2'
  601. verbose_name = '用户oauth2关联'
  602. verbose_name_plural = verbose_name
  603. ordering = ('-id',)
  604. class SysMassModel(models.Model):
  605. id = models.AutoField(primary_key=True, verbose_name='主键自增id')
  606. sender = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE) # 发送人
  607. platform = models.CharField(default='', verbose_name='平台', max_length=16)
  608. lang = models.TextField(blank=True, default='', verbose_name=u'语种')
  609. recever = models.TextField(blank=True, default='', verbose_name=u'接受者')
  610. msg = models.TextField(blank=True, default='', verbose_name=u'发送内容')
  611. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  612. updTime = models.IntegerField(verbose_name='修改时间', default=0)
  613. class Meta:
  614. db_table = 'sys_mass'
  615. verbose_name = '群发消息记录表'
  616. verbose_name_plural = verbose_name
  617. ordering = ('-id',)
  618. class UidUserModel(models.Model):
  619. id = models.CharField(max_length=32, primary_key=True)
  620. userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)
  621. NickName = models.CharField(max_length=32, verbose_name=u'设备名称')
  622. UID = models.CharField(max_length=32, verbose_name=u'设备UID', default='')
  623. View_Account = models.CharField(max_length=32, verbose_name=u'设备用户名称', default='')
  624. View_Password = models.CharField(max_length=32, verbose_name=u'设备密码', default='')
  625. ChannelIndex = models.IntegerField(verbose_name=u'通道号', default=0)
  626. Type = models.IntegerField(verbose_name='设备类型')
  627. NotificationMode = models.IntegerField(verbose_name=u'是否报警', default=0)
  628. isShare = models.BooleanField(verbose_name=u'共享设备', default=False)
  629. primaryUserID = models.CharField(verbose_name='主用户id', max_length=32, default='')
  630. primaryMaster = models.CharField(max_length=64, verbose_name=u'主用户名', default='')
  631. data_joined = models.DateTimeField(verbose_name=u'设备添加时间', auto_now_add=True)
  632. version = models.CharField(max_length=20, default='', verbose_name=u'版本号')
  633. isVod = models.SmallIntegerField(default=0, verbose_name='是否支持云存') # 是否支持云存设备
  634. isExist = models.SmallIntegerField(default=1, verbose_name='是否被删除') # 是否被删除了(需主用户交互) 1存在,0不存在
  635. is_ap = models.SmallIntegerField(default=1, verbose_name='是否为ap模式添加') # 1为ap模式添加,0为非ap模式添加
  636. class Meta:
  637. db_table = 'uid_user'
  638. ordering = ('-data_joined',)
  639. verbose_name = u'用户设备ap表'
  640. verbose_name_plural = verbose_name
  641. class pushDeployModel(models.Model):
  642. id = models.AutoField(primary_key=True, verbose_name='主键自增id')
  643. name = models.CharField(max_length=32, default='', verbose_name=u'推送配置名称')
  644. key = models.CharField(max_length=32, default='', verbose_name=u'推送配置key')
  645. secret = models.CharField(max_length=32, default='', verbose_name=u'推送配置密钥')
  646. pem = models.CharField(max_length=32, default='', verbose_name=u'推送配置路径')
  647. type = models.CharField(max_length=32, default='', verbose_name=u'推送配置类型') # ios 1,android 2
  648. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  649. updTime = models.IntegerField(verbose_name='修改时间', default=0)
  650. class Meta:
  651. db_table = 'push_deploy'
  652. verbose_name = '推送配置表'
  653. verbose_name_plural = verbose_name
  654. ordering = ('-id',)
  655. class AppSetModel(models.Model):
  656. id = models.AutoField(primary_key=True, verbose_name='主键自增id')
  657. appBundleId = models.CharField(max_length=64, default='', verbose_name=u'APPid')
  658. content = models.TextField(default='', verbose_name=u'里面包含评分,用户帮助,ap添加方式,ap工具,广告模块等json字段值')
  659. addTime = models.IntegerField(verbose_name='添加时间', default=0)
  660. updTime = models.IntegerField(verbose_name='修改时间', default=0)
  661. class Meta:
  662. db_table = 'app_set'
  663. verbose_name = 'app的各个版本控制表'
  664. verbose_name_plural = verbose_name
  665. ordering = ('-id',)
  666. # 认证客户端类型表
  667. class ApplicationModel(models.Model):
  668. CLIENT_TYPES = (
  669. ('confidential', 'confidential'),
  670. ('public', 'public'),
  671. )
  672. # authorization_code
  673. # 授权码模式(即先登录获取code, 再获取token)
  674. # password
  675. # 密码模式(将用户名, 密码传过去, 直接获取token)
  676. # client_credentials
  677. # 客户端模式(无用户, 用户向客户端注册, 然后客户端以自己的名义向’服务端’获取资源)
  678. # implicit
  679. # 简化模式(在redirect_uri
  680. # 的Hash传递token;
  681. # Auth客户端运行在浏览器中, 如JS, Flash)
  682. # refresh_token
  683. # 刷新access_token
  684. GRANT_TYPES = (
  685. ('authorization_code', "authorization_code"),
  686. ('password', "password"),
  687. ('client_credentials', "client_credentials"),
  688. ('implicit', "implicit"),
  689. ('refresh_token', "refresh_token"),
  690. )
  691. id = models.BigAutoField(primary_key=True)
  692. name = models.CharField(max_length=128, blank=True, verbose_name='client名字描述')
  693. client_id = models.CharField(max_length=50, unique=True, verbose_name='客户端id')
  694. client_secret = models.CharField(max_length=50, unique=True, verbose_name='客户端secret')
  695. client_type = models.CharField(max_length=32, choices=CLIENT_TYPES, verbose_name='客户端类型')
  696. grant_type = models.CharField(max_length=32, choices=GRANT_TYPES, blank=True, null=True)
  697. redirect_uri = models.TextField(blank=True, null=True, verbose_name='重定向url')
  698. skip_auth = models.BooleanField(default=False, verbose_name='是否跳过点击授权')
  699. add_time = models.IntegerField(verbose_name='添加时间', default=0)
  700. update_time = models.IntegerField(verbose_name='更新时间', default=0)
  701. class Meta:
  702. ordering = ('-add_time',)
  703. verbose_name = u'可授权客户端表'
  704. db_table = 'oauth_application'
  705. # 授权码信息表
  706. class GrantCodeModel(models.Model):
  707. id = models.BigAutoField(primary_key=True)
  708. userID = models.ForeignKey(Device_User, verbose_name="用户表userID", to_field='userID', on_delete=models.CASCADE)
  709. code = models.CharField(max_length=32, unique=True)
  710. app_id = models.CharField(max_length=100, default='', verbose_name="appBundleId")
  711. application = models.ForeignKey(ApplicationModel, verbose_name="用户表id", to_field='id', on_delete=models.CASCADE)
  712. expire_time = models.IntegerField(verbose_name='过期时间', default=0)
  713. add_time = models.IntegerField(verbose_name='添加时间', default=0)
  714. update_time = models.IntegerField(verbose_name='更新时间', default=0)
  715. # 输出的永远是本地时间输出的永远是本地时间
  716. def is_expired(self):
  717. return timezone.now() >= self.expire_time
  718. class Meta:
  719. ordering = ('-add_time',)
  720. verbose_name = u'授权码表'
  721. db_table = 'oauth_grant_code'