models.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. from django.db import models
  2. from django.contrib.auth.hashers import check_password
  3. from datetime import datetime
  4. from .functions import *
  5. # Create your models here.
  6. class Organizer(models.Model):
  7. # 定义扫码组织者
  8. ID = models.AutoField(primary_key=True)
  9. username = models.CharField(max_length=30, unique=True)
  10. nickname = models.CharField(max_length=30, unique=False)
  11. email = models.EmailField(max_length=30, null=True)
  12. mobile = models.IntegerField(unique=True)
  13. password = models.CharField(max_length=128)
  14. photo = models.CharField(null=True, max_length=256)
  15. userActive = models.BooleanField(default=True) # 用户激活,开发阶段默认为true
  16. accountType = models.IntegerField(default=0) # 定义用户类型 0:基础用户;1高级用户
  17. registerDate = models.DateField(auto_now_add=True)
  18. registerIP = models.GenericIPAddressField(null=True)
  19. emailConfirmation = models.BooleanField(default=False)
  20. mobileConfirmation = models.BooleanField(default=False)
  21. def __str__(self):
  22. return self.username
  23. def createNew(self):
  24. Organizer.objects.get_or_create(username=self.username,
  25. nickname=self.nickname,
  26. email=self.email,
  27. mobile=self.mobile,
  28. password=self.password,
  29. photo=self.photo,
  30. registerIP=self.registerIP,
  31. )
  32. def sameUsername(self):
  33. # 检查是否有同样的用户名
  34. result = len(Organizer.objects.filter(username=self.username))
  35. if result == 0:
  36. return False
  37. else:
  38. return True
  39. def sameMobile(self):
  40. # 检查是否有同样的手机号码
  41. result = len(Organizer.objects.filter(mobile=self.mobile))
  42. if result == 0:
  43. return False
  44. else:
  45. return True
  46. def upadteInfo(self):
  47. return True
  48. def login(self):
  49. result = False
  50. try:
  51. result = check_password(self.password,
  52. Organizer.objects.filter(username=self.username).values('password')[0]['password'])
  53. except:
  54. pass
  55. return result
  56. def searchByID(self):
  57. try:
  58. result = Organizer.objects.get(ID=self.ID)
  59. return result
  60. except:
  61. return None
  62. def searchByUsername(self):
  63. try:
  64. result = Organizer.objects.get(username=self.username)
  65. return result
  66. except:
  67. return None
  68. def updateByID(self):
  69. Organizer.objects.filter(ID=self.ID).update(username=self.username,
  70. nickname=self.nickname,
  71. email=self.email,
  72. mobile=self.mobile,
  73. password=self.password,
  74. photo=self.photo,
  75. )
  76. class CheckIn(models.Model):
  77. # 定义一个扫码签到活动
  78. ID = models.AutoField(primary_key=True)
  79. startTime = models.DateField()
  80. endTime = models.DateField(null=True)
  81. createTime = models.DateTimeField(null=True, blank=True)
  82. o_ID = models.IntegerField() # 组织者的ID
  83. description = models.CharField(max_length=256)
  84. maxNum = models.IntegerField(null=True, blank=True) # 签到人数最大
  85. creatorConfirm = models.IntegerField() # 定义签到后组织者确认方式:0不需要确认,1点击确认,2扫码确认
  86. captcha = models.BooleanField() # 确认签到的时候是否需要验证码
  87. status = models.CharField(max_length=30, null=True) # draft 未发布可修改 active 可以签到 pause 已发布不可签到不可修改 delete删除
  88. def __str__(self):
  89. return self.description
  90. def searchByID(self):
  91. try:
  92. result = CheckIn.objects.get(ID=self.ID)
  93. return result
  94. except Exception:
  95. return None
  96. def createNew(self):
  97. existing = CheckIn.objects.filter(description=self.description, o_ID=self.o_ID).count()
  98. if existing != 0:
  99. return 0 # 如果检测到重名的就返回0.
  100. else:
  101. CheckIn.objects.get_or_create(startTime=self.startTime,
  102. endTime=self.endTime,
  103. createTime=datetime.datetime.now(),
  104. o_ID=self.o_ID,
  105. description=self.description,
  106. maxNum=self.maxNum,
  107. creatorConfirm=self.creatorConfirm,
  108. captcha=self.captcha,
  109. status='draft',
  110. )
  111. createdCheckIn = CheckIn.objects.get(o_ID=self.o_ID, description=self.description) # 搜索到创建的ID,并返回
  112. return createdCheckIn.ID
  113. def updateByID(self):
  114. CheckIn.objects.filter(ID=self.ID).update(startTime=self.startTime,
  115. endTime=self.endTime,
  116. description=self.description,
  117. maxNum=self.maxNum,
  118. creatorConfirm=self.creatorConfirm,
  119. captcha=self.captcha,
  120. status=self.status,
  121. )
  122. def getExistingList(self):
  123. qs = CheckIn.objects.filter(o_ID=self.o_ID).order_by('createTime').values().exclude(status='delete')
  124. return qs
  125. class Item(models.Model):
  126. # 保存一个签到项目下具体的签到内容要求
  127. ID = models.AutoField(primary_key=True)
  128. o_ID = models.IntegerField() # 组织者的ID
  129. c_ID = models.IntegerField() # checkIn的ID
  130. c_description = models.CharField(max_length=256) # checkIn项目的ID
  131. description = models.CharField(max_length=256)
  132. type = models.IntegerField() # 类型:0字符串,1数字,2邮件,3日期,4选项
  133. order = models.IntegerField() # 同一个checkIn项目内显示排序
  134. createTime = models.DateTimeField(auto_now_add=True, null=True) # 创建时间,用于排序
  135. unique = models.BooleanField(default=False)
  136. reservedFlag = models.BooleanField(default=False) # 是否预制签到验证信息
  137. reservedContent = models.TextField(null=True, blank=True)
  138. itemSelection = models.TextField(null=True, blank=True) # 选项内容
  139. def __str__(self):
  140. return self.c_description + self.description
  141. def createNew(self):
  142. existing_items = Item.objects.filter(o_ID=self.o_ID, c_ID=self.c_ID).order_by('-order')
  143. if len(existing_items) == 0:
  144. item_count = 0
  145. else:
  146. item_count = existing_items[0].order
  147. Item.objects.create(o_ID=self.o_ID, c_ID=self.c_ID, c_description=self.c_description,
  148. description=self.description,
  149. type=self.type, unique=self.unique, reservedFlag=self.reservedFlag,
  150. reservedContent=self.reservedContent, itemSelection=self.itemSelection,
  151. order=item_count + 1, )
  152. def sameItem(self):
  153. # 检查是否有同样的内容
  154. result = Item.objects.filter(o_ID=self.o_ID, c_description=self.c_description,
  155. description=self.description, ).count()
  156. if result == 0:
  157. return False
  158. else:
  159. return True
  160. def searchByC_ID(self):
  161. result = Item.objects.filter(c_ID=self.c_ID).order_by('createTime').values()
  162. return result
  163. def updateItemByID(self):
  164. Item.objects.filter(ID=self.ID).update(description=self.description, type=self.type, unique=self.unique,
  165. reservedFlag=self.reservedFlag, reservedContent=self.reservedContent,
  166. itemSelection=self.itemSelection)
  167. def searchByID(self):
  168. try:
  169. result = Item.objects.get(ID=self.ID)
  170. return result
  171. except Exception:
  172. return None
  173. def deleteByID(self):
  174. try:
  175. Item.objects.get(ID=self.ID).delete()
  176. return True
  177. except:
  178. return False
  179. # 定义数据收集后的存储
  180. class UserContent(models.Model):
  181. ID = models.AutoField(primary_key=True)
  182. c_ID = models.IntegerField() # checkIn的ID
  183. o_ID = models.IntegerField() # Organizor的ID
  184. content = models.TextField()
  185. confirmation = models.IntegerField() # 0不需要确认,10需要但是未确认, 11需要并且确认
  186. datetime = models.DateTimeField(auto_now_add=True)
  187. IPAddress = models.GenericIPAddressField(null=True)
  188. def createNew(self):
  189. UserContent.objects.create(c_ID=self.c_ID, o_ID=self.o_ID, content=self.content, confirmation=self.confirmation,
  190. IPAddress=self.IPAddress)
  191. def getContentList(self):
  192. result = UserContent.objects.filter(c_ID=self.c_ID).values('content')
  193. return result
  194. def searchByC_ID(self):
  195. result = UserContent.objects.filter(c_ID=self.c_ID).exclude(confirmation='10')
  196. return result
  197. def existingInContent(self):
  198. result = UserContent.objects.filter(content__contains=self.content)
  199. return result
  200. def getContentQty(self):
  201. result = UserContent.objects.filter(c_ID=self.c_ID).count()
  202. return result
  203. def uniqueCheck(self):
  204. resultQty = UserContent.objects.filter(content__contains=self.content).count()
  205. if resultQty == 0:
  206. return True
  207. else:
  208. return False
  209. def clearByC_ID(self):
  210. try:
  211. UserContent.objects.filter(c_ID=self.c_ID).delete()
  212. return True
  213. except:
  214. return False