models.py 11 KB

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