PageRenderTime 65ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/Model/ShopModel.py

https://gitlab.com/CloudPrintTech/CloudPrintBackend
Python | 513 lines | 429 code | 56 blank | 28 comment | 89 complexity | 57e50b9224caa45d55789fecb6cf281e MD5 | raw file
  1. # -*- coding: utf-8 -*-
  2. __author__ = 'raytlty'
  3. import os
  4. import time
  5. import base64
  6. import hashlib
  7. from Model.BaseModel import BaseModel
  8. from Model.ORM import *
  9. from sqlalchemy.sql import exists
  10. from sqlalchemy.sql import and_
  11. import logging
  12. import tornado.web
  13. class ShopModel(BaseModel):
  14. def updateInfo(self, **kwargs):
  15. session = self.session
  16. redisconn = self.redisconn
  17. try:
  18. token = kwargs['token']
  19. managerid = kwargs['managerid']
  20. school = kwargs['school']
  21. building = kwargs['building']
  22. manage_buildings = kwargs.get('manage_buildings',[])
  23. logging.info(building)
  24. logging.info(school)
  25. data = dict(
  26. manager_name = kwargs['manager_name'],
  27. school_id = school['ID'],
  28. qq = kwargs['qq'],
  29. sex = kwargs['sex'],
  30. email = kwargs['email'],
  31. graduate_year = kwargs['graduate_year'],
  32. alipay_account = kwargs['alipay_account'],
  33. dorm = kwargs['dorm'],
  34. building_id = building['ID'],
  35. ID_number = kwargs['ID_number'],
  36. #已完善信息
  37. )
  38. session.query(ShopManager).filter(ShopManager.manager_id == managerid).update(values=data,synchronize_session=False)
  39. items = session.query(Building).filter(Building.deliver_id == managerid).all()
  40. session.flush()
  41. if items:
  42. for item in items:
  43. building_id = item.id
  44. session.query(Building).filter(Building.id == building_id).update(dict(deliver_id=None))
  45. session.flush()
  46. if manage_buildings:
  47. for item in manage_buildings:
  48. buildingID, buildingName, buildingStatus= item['ID'], item['name'], item['status']
  49. session.query(Building).filter(and_(Building.id == buildingID,
  50. Building.name == buildingName,
  51. Building.status == buildingStatus)).update(dict(deliver_id=managerid),synchronize_session=False)
  52. session.flush()
  53. session.commit()
  54. return self.success(msg='更新成功')
  55. except KeyError :
  56. raise tornado.web.HTTPError(400)
  57. except Exception as emsg:
  58. return self.err(msg=emsg)
  59. def completeInfo(self, **kwargs):
  60. session = self.session
  61. try:
  62. #获取了managerid之后就以managerid命名
  63. managerid = kwargs['managerid']
  64. # 原为保存学生证和身份证但现在不需要保存只需要存base64串
  65. # studentCard = kwargs['certificate']
  66. # studentCard_decode = base64.b64decode(studentCard)
  67. # IDCard = kwargs['ID_card']
  68. # IDCard_decode = base64.b64decode(IDCard)
  69. # filePath = kwargs.get('filePath')
  70. # if not os.path.exists(filePath):
  71. # os.makedirs(filePath)
  72. school = kwargs['school']
  73. building = kwargs['building']
  74. manage_buildings = kwargs.get('manage_buildings',[])
  75. data = dict(
  76. manager_name = kwargs['manager_name'],
  77. school_id = school['ID'],
  78. qq = kwargs['qq'],
  79. sex = kwargs['sex'],
  80. email = kwargs['email'],
  81. graduate_year = kwargs['graduate_year'],
  82. alipay_account = kwargs['alipay_account'] ,
  83. certificate = kwargs['certificate'],
  84. dorm = kwargs['dorm'],
  85. ID_number = kwargs['ID_number'],
  86. building_id = building['ID'],
  87. state = 1 #已完善信息
  88. )
  89. except KeyError:
  90. raise tornado.web.HTTPError(400)
  91. except Exception as emsg:
  92. return self.err(emsg)
  93. else:
  94. try:
  95. if manage_buildings:
  96. for item in manage_buildings:
  97. buildingID, buildingName, buildingStatus= item['ID'], item['name'], item['status']
  98. session.query(Building).filter(and_(Building.id == buildingID,
  99. Building.name == buildingName,
  100. Building.status == buildingStatus)).update(dict(deliver_id=managerid),synchronize_session=False)
  101. session.flush()
  102. session.query(ShopManager).filter(ShopManager.manager_id == managerid).update(values=data,synchronize_session=False)
  103. session.commit()
  104. # 原为保存学生证和身份证但现在不需要保存只需要存base64串
  105. # ptr = open(os.path.join(filePath, 'studentCard.png'), 'wb')
  106. # try:
  107. # ptr.write(studentCard_decode)
  108. # except Exception as emsg:
  109. # return self.err(msg=emsg)
  110. # finally:
  111. # ptr.close()
  112. # ptr = open(os.path.join(filePath, 'IDCard.png'), 'wb')
  113. # try:
  114. # ptr.write(IDCard_decode)
  115. # except Exception as emsg:
  116. # return self.err(msg=emsg)
  117. # finally:
  118. # ptr.close()
  119. except Exception as emsg:
  120. return self.err(emsg)
  121. else:
  122. return self.success([], '完善个人信息成功')
  123. def signUp(self, **kwargs):
  124. session = self.session
  125. redisconn = self.redisconn
  126. try:
  127. username = kwargs['username']
  128. password = kwargs['password']
  129. smsCode = kwargs['smsCode']
  130. smanager = session.query(ShopManager).filter(ShopManager.username == username).first()
  131. if smanager != None:
  132. return self.err("此手机号已注册,请登录")
  133. if not redisconn.exists(username):
  134. return self.err("验证码已过期,请重新请求发送")
  135. if redisconn.get(username)!=smsCode.encode('utf8'):
  136. return self.err( "输入的验证码错误")
  137. password = hashlib.md5((password+':'+username).encode()).hexdigest()
  138. shopmanager = ShopManager(username=username,password=password)
  139. session.add(shopmanager)
  140. session.commit()
  141. token = hashlib.md5((username+':'+str(time.time())+smsCode).encode()).hexdigest()
  142. manager_id= session.query(ShopManager.manager_id)\
  143. .filter(ShopManager.username == username).first()[0]
  144. redisconn.set(token,manager_id)
  145. except Exception as emsg:
  146. return self.err(str(emsg))
  147. else:
  148. return self.success([{'token':token}],"注册成功,请完善信息")
  149. def login(self, **kwargs):
  150. session = self.session
  151. redisconn = self.redisconn
  152. try:
  153. username = kwargs['username']
  154. password = kwargs['password']
  155. device_token = kwargs['device_token']
  156. smanager = session.query(ShopManager).filter(ShopManager.username == username).first()
  157. if smanager == None:
  158. return self.err('请用手机号注册账号')
  159. else :
  160. if smanager.state == 3:
  161. return self.err(msg='您已经辞职')
  162. realpasswd, manager_id, state = smanager.password, smanager.manager_id, smanager.state
  163. testpasswd = hashlib.md5((password+':'+username).encode()).hexdigest()
  164. token = hashlib.md5((username + ':' +str(time.time()) + realpasswd).encode()).hexdigest()
  165. week = 60 * 60 * 24 * 7
  166. redisconn.setex(token, manager_id, week)
  167. redisconn.setex(manager_id, device_token, week)
  168. results = []
  169. if realpasswd == testpasswd:
  170. results.append({'token':token, 'state':state})
  171. return self.success(results=results, msg='登录成功')
  172. else :
  173. return self.err(msg='密码错误')
  174. except KeyError:
  175. raise tornado.web.HTTPError(400)
  176. except Exception as emsg:
  177. return self.err(msg=emsg)
  178. def logout(self, **kwargs):
  179. session = self.session
  180. redisconn = self.redisconn
  181. try:
  182. token = kwargs['token']
  183. managerid = kwargs['managerid']
  184. device_token = redisconn.get(managerid)
  185. redisconn.delete(token)
  186. redisconn.delete(device_token)
  187. return self.success()
  188. except Exception as emsg:
  189. return self.err(msg=emsg)
  190. except KeyError:
  191. raise tornado.web.HTTPError(400)
  192. def forgetPassword(self,**kwargs):
  193. session = self.session
  194. redisconn = self.redisconn
  195. try:
  196. username = kwargs['username']
  197. password = kwargs['password']
  198. smsCode = kwargs['smsCode']
  199. if not redisconn.exists(username):
  200. return self.err("验证码已过期,请重新请求发送")
  201. if redisconn.get(username)!=smsCode:
  202. return self.err( "输入的验证码错误")
  203. realpassword = hashlib.md5((str(password) + ':' + username).encode()).hexdigest()
  204. token = hashlib.md5((username + ':' + str(time.time()) + realpassword).encode()).hexdigest()
  205. shopManager = session.query(ShopManager).filter(ShopManager.username == username).first()
  206. if shopManager is None:
  207. return self.err(msg='用手机号注册')
  208. week = 60 * 60 * 24 * 7
  209. redisconn.setex(token, shopManager.manager_id, week)
  210. session.query(ShopManager).filter(ShopManager.username == username).update(dict(password=realpassword),synchronize_session=False)
  211. session.commit()
  212. except Exception as emsg:
  213. return self.err(msg=emsg)
  214. else:
  215. return self.success([{'token':token}],'修改密码成功')
  216. def getMyInfo(self,**kwargs):
  217. session = self.session
  218. redconn = self.redisconn
  219. try:
  220. token = kwargs['token']
  221. managerid = kwargs['managerid']
  222. item = session.query(ShopManager).filter(ShopManager.manager_id == managerid).first()
  223. if item is None:
  224. return self.err(msg='请用手机号登陆')
  225. def getAddress(school_id, building_id):
  226. if not school_id and not building_id:
  227. return {'ID':school_id, 'name':None}, {'ID':building_id, 'name':None, 'status':None}
  228. elif not school_id:
  229. return {'ID':school_id, 'name':None}, {'ID':building_id, 'name':None, 'status':None}
  230. name = session.query(Community.name).filter(Community.id == school_id).first().name
  231. buildName, status = session.query(Building.name, Building.status).filter(Building.id == building_id).first()
  232. return {'ID':school_id, 'name':name}, {'ID':building_id, 'name':buildName, 'status':status}
  233. def getManageBuilding(managerid):
  234. res = []
  235. items = session.query(Building).filter(Building.deliver_id == managerid).all()
  236. if items:
  237. for item in items:
  238. data = dict(
  239. ID = item.id,
  240. name = item.name,
  241. status = item.status,
  242. )
  243. res.append(data)
  244. return res
  245. school, building= getAddress(school_id=item.school_id, building_id=item.building_id)
  246. manage_buildings = getManageBuilding(managerid)
  247. results = [
  248. dict(
  249. manager_name = item.manager_name,
  250. qq = item.qq,
  251. sex = item.sex,
  252. email = item.email,
  253. graduate_year = item.graduate_year,
  254. alipay_account = item.alipay_account,
  255. ID_number = item.ID_number,
  256. dorm = item.dorm,
  257. state = item.state,
  258. school = school,
  259. building = building,
  260. manage_buildings = manage_buildings,
  261. )
  262. ]
  263. return self.success(results=results)
  264. except KeyError :
  265. raise tornado.web.HTTPError(400)
  266. except Exception as emsg:
  267. return self.err(msg=emsg)
  268. def changePassword(self,**kwargs):
  269. session = self.session
  270. redisconn = self.redisconn
  271. try:
  272. managerid = kwargs['managerid']
  273. oldpassword = kwargs['oldPassword']
  274. newpassword = kwargs['newPassword']
  275. item= session.query(ShopManager).filter(ShopManager.manager_id == managerid).first()
  276. if item is None:
  277. return self.err(msg='请重新登录')
  278. username = item.username
  279. passwd = item.password
  280. testpasswd = hashlib.md5((str(oldpassword) + ':' + username).encode()).hexdigest()
  281. if testpasswd != passwd:
  282. return self.err(msg='输入原密码错误')
  283. realpasswd = hashlib.md5((str(newpassword) + ':' + username).encode()).hexdigest()
  284. session.query(ShopManager).filter(ShopManager.manager_id == managerid).update(dict(password=realpasswd),synchronize_session=False)
  285. session.commit()
  286. token = hashlib.md5((username + ':' + str(time.time()) + realpasswd).encode()).hexdigest()
  287. week = 60 * 60 * 24 * 7
  288. redisconn.setex(token, managerid, week)
  289. return self.success(msg='修改成功')
  290. except KeyError :
  291. raise tornado.web.HTTPError(400)
  292. except Exception as emsg:
  293. return self.err(msg=emsg)
  294. def resign(self, **kwargs):
  295. session = self.session
  296. redisconn = self.redisconn
  297. try:
  298. mananerid = kwargs['managerid']
  299. token = kwargs['token']
  300. state = 3 #已辞职
  301. session.query(ShopManager).filter(ShopManager.manager_id == mananerid).update(dict(state=state))
  302. session.flush()
  303. session.query(Building).filter(Building.deliver_id == mananerid).update(dict(deliver_id=None), synchronize_session=False)
  304. session.commit()
  305. redisconn.delete(token)
  306. device_token = redisconn.get(mananerid)
  307. redisconn.delete(device_token)
  308. return self.success()
  309. except KeyError:
  310. raise tornado.web.HTTPError(400)
  311. except Exception as emsg:
  312. return self.err(msg=emsg)
  313. def getComplain(self, **kwargs):
  314. session = self.session
  315. redisconn = self.redisconn
  316. try:
  317. mananerid = kwargs['managerid']
  318. token = kwargs['token']
  319. lastid = kwargs.get('lastid', 0)
  320. items = session.query(PrintOrder).order_by(PrintOrder.order_id.desc())
  321. if lastid != 0:
  322. items = items.filter(and_(PrintOrder.manager_id == mananerid,
  323. PrintOrder.order_id < lastid,
  324. PrintOrder.complain != None)).limit(20).all()
  325. else:
  326. items = items.filter(and_(PrintOrder.manager_id == mananerid,
  327. PrintOrder.complain != None)).limit(20).all()
  328. results = []
  329. if items is None:
  330. return self.success(results=results, msg='恭喜你~没有投诉信息')
  331. for item in items:
  332. data = dict(
  333. ID = item.order_id,
  334. trade_no = item.trade_no,
  335. complain_at = int(time.mktime(time.strptime(item.complain_at.strftime('%Y-%m-%d %H:%M:%S'),'%Y-%m-%d %H:%M:%S'))),
  336. complain = item.complain,
  337. )
  338. results.append(data)
  339. return self.success(results=results, msg='获取成功')
  340. except KeyError:
  341. raise tornado.web.HTTPError(400)
  342. except Exception as emsg:
  343. return self.err(msg=emsg)
  344. ##########################################
  345. #打印店
  346. def ShopsignUp(self,**kwargs):
  347. session = self.session
  348. redisconn = self.redisconn
  349. try:
  350. username = kwargs['username']
  351. password = kwargs['password']
  352. smsCode = kwargs['smsCode']
  353. shopitem = session.query(Shop).filter(Shop.username == username).first()
  354. if shopitem != None:
  355. return self.err("此手机号已注册,请登录")
  356. if not redisconn.exists(username):
  357. return self.err("验证码已过期,请重新请求发送")
  358. if redisconn.get(username)!=smsCode.encode('utf8'):
  359. return self.err( "输入的验证码错误")
  360. password = hashlib.md5((password+':'+username).encode()).hexdigest()
  361. shop = Shop(username=username,password=password)
  362. session.add(shop)
  363. session.commit()
  364. token = hashlib.md5((username+':'+str(time.time())+smsCode).encode()).hexdigest()
  365. shop_id= session.query(Shop.id)\
  366. .filter(Shop.username == username).first()[0]
  367. redisconn.set(token,shop_id)
  368. return self.success(results=[{'token':token}],msg='注册成功,请登陆完善信息')
  369. except KeyError:
  370. raise tornado.web.HTTPError(400)
  371. except Exception as emsg:
  372. return self.err(msg=emsg)
  373. def Shoplogin(self, **kwargs):
  374. session = self.session
  375. redisconn = self.redisconn
  376. try:
  377. username = kwargs['username']
  378. password = kwargs['password']
  379. shopitem = session.query(Shop).filter(Shop.username == username).first()
  380. if shopitem == None:
  381. return self.err('请用手机号注册账号')
  382. else :
  383. realpasswd, shop_id, state = shopitem.password, shopitem.id, shopitem.state
  384. testpasswd = hashlib.md5((password+':'+username).encode()).hexdigest()
  385. token = hashlib.md5((username + ':' +str(time.time()) + realpasswd).encode()).hexdigest()
  386. week = 60 * 60 * 24 * 7
  387. redisconn.setex(token, shop_id,week)
  388. results = []
  389. if realpasswd == testpasswd:
  390. results.append({'token':token, 'state':state})
  391. return self.success(results=results, msg='登录成功')
  392. else :
  393. return self.err(msg='密码错误')
  394. except KeyError:
  395. raise tornado.web.HTTPError(400)
  396. except Exception as emsg:
  397. return self.err(msg=emsg)
  398. def completeShopInfo(self, **kwargs):
  399. session = self.session
  400. redisconn = self.redisconn
  401. try:
  402. token = kwargs['token']
  403. shopid = kwargs['shopid']
  404. school = kwargs['school']
  405. del kwargs['token'], kwargs['shopid'], kwargs['school']
  406. kwargs['community_id'] = school['ID']
  407. session.query(Shop).filter(Shop.id == shopid).update(values=kwargs,synchronize_session=False)
  408. session.commit()
  409. return self.success()
  410. except KeyError:
  411. raise tornado.web.HTTPError(400)
  412. except Exception as emsg:
  413. return self.err(msg=emsg)
  414. def Shoplogout(self, **kwargs):
  415. session = self.session
  416. redisconn = self.redisconn
  417. try:
  418. token = kwargs['token']
  419. shopid = kwargs['shopid']
  420. redisconn.delete(token)
  421. return self.success()
  422. except Exception as emsg:
  423. return self.err(msg=emsg)
  424. except KeyError:
  425. raise tornado.web.HTTPError(400)
  426. def ShopForgetPassword(self, **kwargs):
  427. session = self.session
  428. redisconn = self.redisconn
  429. try:
  430. username = kwargs['username']
  431. password = kwargs['password']
  432. smsCode = kwargs['smsCode']
  433. shopitem = session.query(Shop).filter(Shop.username == username).first()
  434. if shopitem == None:
  435. return self.err(msg='请用手机号注册')
  436. if not redisconn.exists(username):
  437. return self.err("验证码已过期,请重新请求发送")
  438. if redisconn.get(username)!=smsCode.encode('utf8'):
  439. return self.err( "输入的验证码错误")
  440. shop_id = shopitem.id
  441. password = hashlib.md5((password+':'+username).encode()).hexdigest()
  442. shop = Shop(id=shop_id,password=password)
  443. session.merge(shop)
  444. session.commit()
  445. token = hashlib.md5((username+':'+str(time.time())+smsCode).encode()).hexdigest()
  446. redisconn.set(token,shop_id)
  447. return self.success(results=[{'token':token}],msg='修改密码成功')
  448. except KeyError:
  449. raise tornado.web.HTTPError(400)
  450. except Exception as emsg:
  451. return self.err(msg=emsg)
  452. if __name__ == '__main__':
  453. shopModel = ShopModel()
  454. args = dict(
  455. managerid = 2,
  456. )
  457. shopModel.getMyInfo(**args)