models.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. # coding=utf-8
  2. import requests
  3. from django.db import transaction
  4. from django.db import models
  5. from django.utils import timezone
  6. from django.conf import settings
  7. from apps.images.models import Images
  8. from utils.wx.wechat import WeChat
  9. from utils.wx.WXBizDataCrypt import WXBizDataCrypt
  10. from utils.exceptions import CustomError
  11. from apps.foundation.models import Config
  12. class Customer(models.Model):
  13. name = models.CharField(max_length=100, verbose_name=u"姓名")
  14. tel = models.CharField(max_length=50, verbose_name=u'电话')
  15. gender = models.PositiveSmallIntegerField(choices=settings.GENDER_CHOICES, verbose_name=u'性别', null=True)
  16. create_time = models.DateTimeField(verbose_name=u"添加时间", default=timezone.now, editable=False)
  17. face = models.ForeignKey(Images, verbose_name=u'头像', on_delete=models.PROTECT, null=True)
  18. class Meta:
  19. db_table = "customer"
  20. verbose_name = u"客户管理"
  21. ordering = ['-id']
  22. index_together = (
  23. 'name',
  24. 'tel',
  25. )
  26. default_permissions = ()
  27. def setInfo(self, nickName, gender, avatarUrl):
  28. self.name = nickName
  29. if gender == 1:
  30. self.gender = settings.MALE
  31. elif gender == 2:
  32. self.gender = settings.FEMALE
  33. else:
  34. self.gender = settings.UNKNOW
  35. if self.face == None and avatarUrl != None:
  36. self.face = Images.downLoadFace(self, avatarUrl)
  37. self.save()
  38. class CustomerWechat(models.Model):
  39. customer = models.ForeignKey(Customer, verbose_name=u'客户', on_delete=models.PROTECT, editable=False, null=True)
  40. openid = models.CharField(max_length=512, verbose_name=u"openid")
  41. session_key = models.CharField(max_length=512, verbose_name=u'session_key',null=True)
  42. class Meta:
  43. db_table = 'customer_wechat'
  44. verbose_name = u'微信客户'
  45. unique_together = [
  46. ('openid')
  47. ]
  48. default_permissions = ()
  49. @staticmethod
  50. def login(code, appid):
  51. secret = Config.getConfigValue(Config.KEY_WECHAT_SESSION_KEY)
  52. res = WeChat.code2Session(appid, secret, code)
  53. instance = CustomerWechat.objects.filter(openid=res['openid']).first()
  54. if not instance:
  55. instance = CustomerWechat.objects.create(
  56. openid=res['openid'],
  57. session_key=res['session_key']
  58. )
  59. else:
  60. instance.session_key = res['session_key']
  61. instance.save()
  62. return instance
  63. @staticmethod
  64. def bindWechat(appid, openid, phoneEncryptedData, phoneIv):
  65. customer_wechat = CustomerWechat.objects.filter(openid=openid).first()
  66. if not customer_wechat:
  67. raise CustomError(u'未找到相应的微信客户!')
  68. pc = WXBizDataCrypt(appid, customer_wechat.session_key)
  69. phon_data = pc.decrypt(phoneEncryptedData, phoneIv)
  70. tel = phon_data['purePhoneNumber']
  71. if customer_wechat.customer:
  72. if customer_wechat.customer.user.username != tel:
  73. raise CustomError(u'微信绑定的手机号与系统记录的不符!')
  74. else:
  75. return customer_wechat.customer
  76. customer = Customer.objects.filter(tel=tel).first()
  77. if not customer:
  78. Customer.objects.create(tel=tel, name=tel)
  79. customer_wechat.customer = customer
  80. customer_wechat.save()
  81. return customer
  82. class CustomerVehicle(models.Model):
  83. customer = models.ForeignKey(Customer, verbose_name=u'客户', on_delete=models.PROTECT)
  84. number = models.CharField(max_length=20)
  85. model = models.CharField(max_length=200)
  86. mileage = models.FloatField(verbose_name=u"车辆里程")
  87. img = models.ForeignKey(Images, verbose_name=u'行驶证', on_delete=models.PROTECT, null=True)
  88. class Meta:
  89. db_table = 'customer_vehicle'
  90. verbose_name = u'客户车辆'
  91. default_permissions = ()