control_user.py 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. #coding=utf-8
  2. '''
  3. '''
  4. import json
  5. import datetime
  6. import logging
  7. import re
  8. import time
  9. import random
  10. import hashlib
  11. import xlrd
  12. from django.core.cache import cache
  13. from django.db.models import Q
  14. from django.db.models import Sum
  15. from django.db import transaction
  16. from django.contrib import auth
  17. import common.models as cm
  18. import common.error_info as ce
  19. import password_handle as ph
  20. import common.common_functions as ccf
  21. from utils.aestool import aescbc
  22. import common.common_control as ccc
  23. def add_user(request):
  24. """
  25. """
  26. kwargs = request.json
  27. need_params = ["realname","phone","department_id","utype","is_active"]
  28. mse = ccf.check_params(*need_params,**kwargs)
  29. if mse:
  30. raise ce.TipException(mse)
  31. if cm.UserInfo.objects.filter(phone=kwargs.get("phone")).exists():
  32. raise ce.TipException(u"该用户已存在!")
  33. need_params.extend(["email","remark"])
  34. cvals = ccf.get_need_params(*need_params,**kwargs)
  35. cvals.update({"name":cvals.get("phone")})
  36. cvals.update({"password":ph.make_password(cvals.get("phone")[-6:],True)})
  37. cvals["cid"] = request.user.id
  38. cvals["cperson"] = request.user.realname
  39. obj = cm.UserInfo.objects.create(**cvals)
  40. return obj
  41. def delete_user(request):
  42. kwargs = request.json
  43. need_params = ["id"]
  44. mse = ccf.check_params(*need_params,**kwargs)
  45. if mse:
  46. raise ce.TipException(mse)
  47. ids = str(kwargs.get("id")).split(",")
  48. cm.UserInfo.objects.filter(id__in=ids).update(status=0)
  49. def update_user(request):
  50. """
  51. """
  52. kwargs = request.json
  53. need_params = ["id"]
  54. mse = ccf.check_params(*need_params,**kwargs)
  55. if mse:
  56. raise ce.TipException(mse)
  57. id = kwargs.get("id")
  58. if cm.UserInfo.objects.exclude(id=id).filter(phone=kwargs.get("phone")).exists():
  59. raise ce.TipException(u"该用户已存在!")
  60. need_params.extend(["realname","phone","department_id","utype","is_active","email","remark"])
  61. cvals = ccf.get_need_params(*need_params,**kwargs)
  62. cvals.update({"name":cvals.get("phone")})
  63. cvals.update({"password":ph.make_password(cvals.get("phone")[-6:],True)})
  64. cvals["cid"] = request.user.id
  65. cvals["cperson"] = request.user.realname
  66. obj = cm.UserInfo.objects.filter(id=id).update(**cvals)
  67. return obj
  68. def login_user(request):
  69. """
  70. """
  71. info = request.json
  72. username = info.get('username')
  73. password = info.get('password')
  74. utype = info.get('utype')
  75. captcha_id = info.get('imgcode_id')
  76. idcode = info.get('imgcode')
  77. captcha = cache.get(captcha_id, '')
  78. cache.delete(captcha_id)
  79. #if not username or not password:
  80. # raise ce.TipException(u"账户或密码不能为空!")
  81. #if not idcode:
  82. # raise ce.TipException(u"验证码不能为空!")
  83. #if idcode.upper() != captcha.upper():
  84. # raise ce.TipException(u"验证码错误!")
  85. user = auth.authenticate(request, account=username, pwd=password)
  86. if user:
  87. auth.login(request, user)
  88. return user
  89. else:
  90. raise ce.TipException(u"账号或密码错误!")
  91. def reset_password(request):
  92. """
  93. @attention: 重置密码
  94. """
  95. qdata = request.json
  96. need_params = ["password","repassword"]
  97. mse = ccf.check_params(*need_params,**qdata)
  98. if mse:
  99. raise ce.TipException(mse)
  100. uid = request.json.get("uid")
  101. if not uid:
  102. uid = request.user.id
  103. phone = qdata.get("phone")
  104. password = qdata.get("password")
  105. repassword = qdata.get("repassword")
  106. if password != repassword:
  107. raise ce.TipException(u"两次输入的密码不一致!")
  108. pwd = ph.make_password(password)
  109. cm.SysUserInfo.objects.filter(phone=phone).update(password=pwd)
  110. def reset_user_password(request):
  111. qdata = request.json
  112. need_params = ["uid","code","password"]
  113. mse = ccf.check_params(*need_params,**qdata)
  114. if mse:
  115. raise ce.TipException(mse)
  116. upk = qdata.get("uid")
  117. code = qdata.get("code")
  118. pkey = request.user.phone
  119. if cache.get(pkey,"") != code:
  120. raise ce.TipException(u"验证码不正确!")
  121. newpwd = qdata.get("password")
  122. pwd = ph.make_password(newpwd)
  123. cm.UserInfo.objects.filter(pk=upk).update(password=pwd)
  124. def regist_user(request):
  125. """
  126. """
  127. kwargs = request.json
  128. need_parms = ["realname","password","repassword","phone","email"]
  129. mse = ccf.check_params(*need_parms,**kwargs)
  130. if mse:
  131. raise ce.TipException(mse)
  132. if cm.UserInfo.objects.filter(phone=kwargs.get("phone")).exists():
  133. raise ce.TipException(u"该手机号已注册!")
  134. cvals = ccf.get_need_params(*need_parms,**kwargs)
  135. cvals.pop("repassword")
  136. cvals["name"] = cvals["phone"]
  137. if kwargs["password"] != kwargs["repassword"]:
  138. raise ce.TipException(u"前后输入的密码不一致!")
  139. if not cvals.get("password"):
  140. pwd,password = ph.make_default_password(None)
  141. cvals.update({"password":password})
  142. else:
  143. pwd = cvals.get("password")
  144. cvals.update({"password":ph.make_password(cvals.get("password"))})
  145. uobj = cm.UserInfo.objects.create(**cvals)
  146. return None
  147. def format_user(*ids):
  148. """
  149. """
  150. eset = cm.SysUserInfo.objects.filter(id__in=ids,is_active=1)
  151. if not eset.exists():
  152. raise ce.TipException(u"账号不存在!")
  153. data = list(eset.values())
  154. return data
  155. def get_user_info(request):
  156. """
  157. """
  158. kwargs = request.json
  159. need_params = ["id"]
  160. mse = ccf.check_params(*need_params,**kwargs)
  161. if mse:
  162. raise ce.TipException(mse)
  163. ids = str(kwargs.get("id")).split(",")
  164. info = format_user(*ids)
  165. info = info[0] if info else {}
  166. return info
  167. def get_user_personal_info(request):
  168. """
  169. """
  170. id = request.user.id
  171. info = format_user(*[id])
  172. info = info[0] if info else {}
  173. return info
  174. def get_account_info(request):
  175. """
  176. """
  177. id = request.user.id
  178. info = format_user(*[id])
  179. info = info[0] if info else {}
  180. info["p"] = ["Product.*.*"]
  181. return info
  182. def get_user_list(request):
  183. """
  184. """
  185. kwargs = request.json
  186. eset = cm.UserInfo.objects.filter(status=1)
  187. if "name" in kwargs and kwargs.get("name"):
  188. eset = eset.filter(name__icontains=kwargs.get("name"))
  189. if "department_id" in kwargs and kwargs.get("department_id"):
  190. eset = eset.filter(department_id=kwargs.get("department_id"))
  191. if "utype" in kwargs and kwargs.get("utype"):
  192. eset = eset.filter(utype=kwargs.get("utype"))
  193. if "is_active" in kwargs and kwargs.get("is_active"):
  194. eset = eset.filter(is_active=kwargs.get("is_active"))
  195. total = eset.count()
  196. edata = list(eset.values())
  197. page = int(kwargs.get("page",1))
  198. page_size = int(kwargs.get("page_size",20))
  199. total,data = ccf.get_page_list(edata,page,page_size)
  200. return (total,data)
  201. def get_unaudit_user_list(request):
  202. """
  203. """
  204. kwargs = request.json
  205. eset = cm.UserInfo.objects.filter(status=1,is_active=0)
  206. if "name" in kwargs and kwargs.get("name"):
  207. eset = eset.filter(name__icontains=kwargs.get("name"))
  208. if "utype" in kwargs and kwargs.get("utype"):
  209. eset = eset.filter(utype=kwargs.get("utype"))
  210. total = eset.count()
  211. edata = list(eset.values())
  212. page = int(kwargs.get("page",1))
  213. page_size = int(kwargs.get("page_size",20))
  214. total,data = ccf.get_page_list(edata,page,page_size)
  215. return (total,data)
  216. def login_user_by_token(request):
  217. """
  218. """
  219. info = request.json
  220. name = info.get('name','')
  221. phone = info.get('phone','')
  222. phcode = info.get('phcode')
  223. role = info.get('role')
  224. if not phone:
  225. raise ce.TipException(u"缺少手机号!")
  226. if not phcode:
  227. raise ce.TipException(u"缺少验证码!")
  228. org_phcode = ccc.cache.get(phone)
  229. #if not org_phcode == phcode:
  230. # raise ce.TipException(u"验证码错误!")
  231. if str(role)=="1":
  232. user = cm.Doctors.objects.filter(phone=phone,name=name).first()
  233. else:
  234. pinyin = ccf.get_name_pinyin(name)
  235. code = pinyin + ccf.get_now_str("%Y%m%d")
  236. user,flag = cm.Patients.objects.get_or_create(phone=phone,name=name)
  237. user.name = name
  238. user.code = code
  239. user.save()
  240. if not user:
  241. raise ce.TipException(u"医生不存在!")
  242. else:
  243. tstr = "{}_{}_{}{}".format(role,user.id,time.time(),random.randint(100000,999999))
  244. token = aescbc.encrypt(tstr)
  245. return {"id":user.id,"token":token,"status":1,"role":role}
  246. def get_authinfo_by_token(request):
  247. """
  248. """
  249. user = request.user
  250. uid = user.get("id")
  251. role = user.get("role")
  252. if str(role) == "1":
  253. user = cm.Doctors.objects.filter(id=uid).values().first()
  254. user["doctor_role"] = user.get("role")
  255. else:
  256. user = cm.Patients.objects.filter(id=uid).values().first()
  257. user["role"] = role
  258. return user