user.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. from django.db import models
  2. from django.contrib.auth.models import AbstractUser
  3. import re
  4. class Role(models.Model):
  5. id = models.AutoField(primary_key=True)
  6. role_name = models.CharField(u'角色名称',max_length=100, default='') # 角色名称
  7. role_message = models.TextField(u'角色描述', default='') # 设备描述
  8. role_perm = models.TextField(u'角色拥有的权限', default='') # 角色拥有的权限
  9. role_status = models.PositiveIntegerField(default=1) # 角色状态 0被删除 1正常
  10. addtime = models.PositiveIntegerField(default=0) # 添加时间
  11. uptime = models.PositiveIntegerField(default=0) # 角色修改时间
  12. mark = models.TextField("备注", max_length=64, default="")
  13. add_by = models.PositiveIntegerField(u'创建人', null=True, blank=True, default=None) # 创建人,如果为空则是管理员创建,或者后续全部添加上。
  14. class Meta:
  15. db_table = "sa_role"
  16. class Purview(models.Model):
  17. id = models.AutoField(primary_key=True)
  18. parent_perm_id = models.PositiveIntegerField(u'父级权限',default=0) # 父级权限id
  19. purview_name = models.CharField(u'权限名称',max_length=100, default='')
  20. path = models.CharField(u'接口标识',max_length=100, default='')
  21. menu = models.CharField(u'菜单标识',max_length=100, default='')
  22. addtime = models.PositiveIntegerField(default=0) # 添加时间
  23. uptime = models.PositiveIntegerField(default=0) # 修改时间
  24. url = models.TextField(u'页面路由',default=0) # 修改时间
  25. enable = models.BooleanField(verbose_name="是否启用", default=True)
  26. priority = models.IntegerField(verbose_name="排序优先级,整数0最小", default=0)
  27. class Meta:
  28. db_table = "sa_purview"
  29. class UserPurview(models.Model):
  30. id = models.AutoField(primary_key=True)
  31. parent_perm_id = models.PositiveIntegerField(u'父级权限',default=0) # 父级权限id
  32. purview_name = models.CharField(u'权限名称',max_length=100, default='')
  33. path = models.CharField(u'接口标识',max_length=100, default='')
  34. menu = models.CharField(u'菜单标识',max_length=100, default='')
  35. addtime = models.PositiveIntegerField(default=0) # 添加时间
  36. uptime = models.PositiveIntegerField(default=0) # 修改时间
  37. url = models.TextField(u'页面路由',default=0) # 修改时间
  38. class Meta:
  39. db_table = "sa_user_purview"
  40. class MongoMenuPerGroupModel(models.Model):
  41. name = models.CharField(verbose_name="权限组名称", max_length=20)
  42. menus = models.TextField(verbose_name="菜单id列表")
  43. uid = models.IntegerField(verbose_name="创建用户uid")
  44. create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
  45. modify_time = models.DateTimeField(verbose_name="修改时间", auto_now=True)
  46. class Meta:
  47. db_table = "sa_menu_per_group"
  48. unique_together = ("name", "uid")
  49. class MongoUserMenuPerGroupModel(models.Model):
  50. uid = models.IntegerField(verbose_name="用户uid", unique=True)
  51. menus = models.TextField(verbose_name="菜单id列表")
  52. group_ids = models.CharField(verbose_name="权限组id列表", max_length=256)
  53. class Meta:
  54. db_table = "sa_user_menu_per_group"
  55. class DeviceUser(models.Model):
  56. TAG_CHOICES = [
  57. (1, "专业用户"),
  58. (2, "销售用户"),
  59. (3, "普通用户")
  60. ]
  61. USER_TYPE_CHOICES = [
  62. (1, "超级管理员"),
  63. (2, "经销商"),
  64. (3, "农林政府单位"),
  65. (4, "普通用户"),
  66. (5, "销售用户")
  67. ]
  68. USER_TYPE_LIST = [i[0] for i in USER_TYPE_CHOICES]
  69. user_tag = models.IntegerField(verbose_name="用户分类", choices=TAG_CHOICES, default=3)
  70. uid = models.PositiveIntegerField(default=0,unique=True) # 用户User表 关联表
  71. role_id = models.PositiveIntegerField(default=0) # 用户对应角色id
  72. mobile = models.CharField(max_length=15, default='') # 手机号 ,有些账号没有手机号,不能设置唯一键,唯一性验证在逻辑中做
  73. username_change_times = models.PositiveIntegerField(default=0) # 登录账号修改次数
  74. email = models.EmailField(max_length=80, default='') # 有些账号没有绑定邮箱,不能设置唯一键, 唯一性验证在逻辑中做
  75. real_name = models.CharField(max_length=100, default='') # 昵称
  76. image = models.CharField(max_length=100, default='') # 用户头像
  77. state = models.PositiveIntegerField(default=1) # 状态 1正常 4禁止使用
  78. province = models.CharField(u'设备归属 省', max_length=50, default='') # 设备归属 省
  79. city = models.CharField(u'设备归属 市', max_length=50, default='') # 设备归属 市
  80. district = models.CharField(u'设备归属 县', max_length=50, default='') # 设备归属 县
  81. remark = models.TextField(u'用户备注',default='')
  82. regiest_source = models.PositiveIntegerField(default=0) # 上级代理商的id
  83. login_time = models.PositiveIntegerField(default=0) # 登陆时间
  84. user_type = models.PositiveIntegerField(default=4) # 用户对应的类型 1超级管理员 2经销商 3农林政府单位 4普通用户 5 销售用户
  85. user_area = models.CharField(u'用户区域', max_length=50, default='') # 当用户类型为3农林政府单位的时候 必须存在
  86. package_time = models.PositiveIntegerField(default=60*60*24*365) # 套餐时间
  87. addtime = models.PositiveIntegerField(default=0) # 添加时间
  88. uptime = models.PositiveIntegerField(default=0) # 修改时间
  89. user_group_id = models.PositiveIntegerField(default=0) # 用户组id
  90. tets_user = models.PositiveIntegerField(default=0) # 区分是否为测试用户 测试用户1
  91. children_num = models.PositiveIntegerField(default=0) # 用户为代理商的时候可创建子账户数量
  92. identify_model = models.CharField(max_length=5,default='A') # 用户默认使用的识别模型
  93. user_purviews = models.TextField(u'角色拥有的用户权限') # 角色拥有的权限
  94. user_purviews_init = models.BooleanField("是否初始化用户权限", default=False) # 是否初始化用户权限,只有在专业用户情况下使用
  95. sms_count = models.PositiveIntegerField(default=100) # 用户可发送免费短信次数
  96. pay_sms_count = models.PositiveIntegerField(default=0) # 用户充值短信次数
  97. other_uuid = models.CharField(verbose_name="第三方登陆对接用户唯一标识", max_length=512, default="")
  98. other_type = models.CharField(verbose_name="第三方登陆用户类型标识", max_length=16, default="")
  99. user_attribute = models.IntegerField(verbose_name="用户属性,0 表示标准用户,1 表示中性用户", default=0)
  100. api_token = models.CharField(verbose_name="用户调用接口令牌", max_length=32, default="")
  101. class Meta(AbstractUser.Meta):
  102. db_table = "sa_device_user"
  103. def perm(self, uid):
  104. "获取用户的权限信息"
  105. try:
  106. mp = MongoUserMenuPerGroupModel.objects.get(uid=uid)
  107. role_perm = mp.menus
  108. except Exception as e:
  109. role_perm = Role.objects.get(role_status=1, id=self.role_id).role_perm
  110. if not role_perm:
  111. return ''
  112. if role_perm == 'all':
  113. return 'all'
  114. role_perm = re.split(',|,', role_perm)
  115. role_perm = [int(i) for i in role_perm if i]
  116. purviews = Purview.objects.filter(id__in=role_perm, enable=True)
  117. paths = [str(i.path).strip() for i in purviews]
  118. return str(paths)
  119. class MongoOtherUserTypeModel(models.Model):
  120. other_name = models.CharField(u'其他用户公司名称', max_length=50)
  121. other_type = models.CharField(u'公司标志', max_length=50)
  122. class Meta:
  123. db_table = "sa_other_user_type"
  124. unique_together = ('other_name', 'other_type')
  125. class MongoUserSaleDevice(models.Model):
  126. """销售卖出去的设备表"""
  127. uid = models.PositiveIntegerField(verbose_name="用户UID")
  128. device_id = models.CharField(u'设备本身id',max_length=50, unique=True)
  129. class Meta:
  130. db_table = "sa_user_sale_device"
  131. class MongoUserUploadsPictures(models.Model):
  132. """用户调用识别接口图片信息记录"""
  133. uid = models.PositiveIntegerField(u'用户ID',default=0)
  134. addr = models.CharField(u'原图路径', max_length=200, default='')
  135. indentify_photo = models.CharField(u'识别图路径', max_length=200, default='')
  136. indentify_result = models.CharField(max_length=100,default='')
  137. addtime = models.IntegerField(u'上传时间戳秒级',default=0)
  138. interface = models.CharField(max_length=50,default='')
  139. class Meta:
  140. db_table = "user_uploads_pictures"
  141. class MongoUserLoginLog(models.Model):
  142. "登录日志表"
  143. id = models.AutoField(primary_key=True)
  144. uid = models.PositiveIntegerField(default=0)
  145. ip = models.GenericIPAddressField(default='')
  146. addtime = models.PositiveIntegerField(default=0)
  147. device_type = models.PositiveIntegerField(default=0) # 设备类型 0 网页版
  148. class Meta:
  149. db_table = "sa_user_login_log"
  150. class MongoOperateLogs(models.Model):
  151. id = models.AutoField(primary_key=True)
  152. uid = models.PositiveIntegerField(u'操作用户id',default=0)
  153. target_id = models.CharField(u'被操作目标id',max_length=100,default='')
  154. content = models.CharField(u'操作内容', max_length=500)
  155. operation_type = models.PositiveIntegerField(u'操作类型对设备操作为0 对用户操作为1',default=0)
  156. ip = models.CharField(u'操作者ip', max_length=100)
  157. addtime = models.IntegerField(default=0) # 新增时间
  158. class Meta:
  159. db_table = "sa_operate_logs"
  160. class MongoUserDeviceOrderModel(models.Model):
  161. uid = models.IntegerField(u'负责人uid', default=0)
  162. device_id = models.CharField(u'设备id', max_length=50)
  163. order = models.IntegerField(u'排序字段', default=0)
  164. create_time = models.DateTimeField(verbose_name="创建时间", auto_now_add=True)
  165. class Meta:
  166. db_table = "sa_user_device_order"
  167. class HomeThemeModel(models.Model):
  168. id = models.AutoField(primary_key=True)
  169. logo_url = models.TextField(verbose_name="logo_url", null=True, blank=True, default="")
  170. title_name = models.CharField(verbose_name="标题名称", max_length=50, blank=False, null=False)
  171. copyright = models.TextField(verbose_name="版权信息", null=True, blank=True, default="")
  172. create_time = models.DateTimeField(verbose_name="创建时间", auto_now_add=True)
  173. class Meta:
  174. db_table = "sa_theme_home_theme"
  175. verbose_name = "首页主题表"