views.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. # coding=utf-8
  2. import traceback
  3. from django.db import transaction
  4. from rest_framework.decorators import action
  5. from rest_framework_jwt.views import ObtainJSONWebToken,VerifyJSONWebToken,RefreshJSONWebToken
  6. from rest_framework.serializers import ValidationError
  7. from utils.custom_modelviewset import CustomModelViewSet
  8. from utils import response_error, response_ok
  9. from .serializers import TenantJWTSerializer
  10. from utils.permission import IsTenantUser, IsAdministratorUser
  11. from .models import Tenant, Pay
  12. from apps.admin.tenant.serializers import TenantSerializer
  13. from apps.admin.tenant.filters import TenantFilter
  14. from apps.log.models import BizLog
  15. from apps.tenant.config.models import Config
  16. from utils.exceptions import CustomError
  17. from apps.base import Formater
  18. class TenantLoginView(ObtainJSONWebToken):
  19. serializer_class = TenantJWTSerializer
  20. def post(self, request, *args, **kwargs):
  21. try:
  22. ser = self.serializer_class(data=request.data)
  23. ser.request = request
  24. if ser.is_valid(raise_exception=True):
  25. return response_ok(ser.validated_data)
  26. except ValidationError as e:
  27. return response_error(e.detail['error'][0])
  28. class TenantVerifyTokenView(VerifyJSONWebToken):
  29. def post(self, request, *args, **kwargs):
  30. try:
  31. ser = self.serializer_class(data=request.data)
  32. if ser.is_valid(raise_exception=True):
  33. return response_ok({'token': ser.validated_data['token']})
  34. except ValidationError as e:
  35. return response_error(u'登录状态失效,请重新登录[' + e.detail['error'][0] + ']')
  36. class TenantRefreshTokenView(RefreshJSONWebToken):
  37. def post(self, request, *args, **kwargs):
  38. try:
  39. ser = self.serializer_class(data=request.data)
  40. if ser.is_valid(raise_exception=True):
  41. return response_ok({'token': ser.validated_data['token']})
  42. except ValidationError as e:
  43. return response_error(u'登录状态失效,请重新登录[' + e.detail['error'][0] + ']')
  44. class CompanyViewSet(CustomModelViewSet):
  45. permission_classes = [IsAdministratorUser,]
  46. queryset = Tenant.objects.filter(delete=False)
  47. serializer_class = TenantSerializer
  48. def filter_queryset(self, queryset):
  49. queryset = queryset.filter(id=self.request.user.employee.tenant.id)
  50. f = TenantFilter(self.request.GET, queryset=queryset)
  51. return f.qs
  52. @action(methods=['post'], detail=True)
  53. def update_company(self,request,pk):
  54. name = request.POST.get('name')
  55. tel = request.POST.get('tel')
  56. Tenant.objects.filter(id=pk).update(name=name,tel=tel)
  57. BizLog.objects.addnew(self.request.user.employee.tenant, self.request.user, BizLog.INSERT, u'修改企业联系人,id=%s' % pk, request.POST)
  58. return response_ok()
  59. @action(methods=['get'], detail=True)
  60. def get_code(self, request, pk):
  61. pay_channel = request.GET.get('pay_channel')
  62. config = Config.objects.filter(property=Config.KEY_RENEW_AMOUNT_1).first()
  63. year = Config.objects.filter(property=Config.KEY_RENEW_YEAR_1).first()
  64. if config:
  65. amount = Formater.formatAmount(config.value)
  66. year = year.value
  67. else:
  68. raise CustomError('续费金额错误')
  69. result = []
  70. try:
  71. with transaction.atomic():
  72. if int(pay_channel) == Pay.WECHAT:
  73. line_data = Pay.wechatPay(request.user, pk ,amount)
  74. elif int(pay_channel) == Pay.ALIPAY:
  75. line_data = Pay.alipayPay(request.user, pk ,amount)
  76. else:
  77. raise CustomError('请选择正确的支付方式')
  78. data = {
  79. 'year': year,
  80. 'amount': Formater.formatAmountShow(amount),
  81. 'id': line_data.id,
  82. 'qrcode': line_data.qrcode
  83. }
  84. return response_ok(data)
  85. except CustomError as e:
  86. return response_error(str(e))
  87. except Exception as e:
  88. traceback.print_exc()
  89. return response_error(u'支付失败', request)
  90. @action(methods=['get'], detail=True)
  91. def confirm_pay(self, request, pk):
  92. pay_id = request.GET.get('pay_id')
  93. try:
  94. with transaction.atomic():
  95. payment = Pay.objects.filter(id=int(pay_id)).first()
  96. if not payment:
  97. raise CustomError(u'无法找到付款单')
  98. if payment.status == Pay.WAIT:
  99. raise CustomError(u'暂无付款信息,请付款')
  100. if payment.status == Pay.CONFIRM:
  101. raise CustomError(u'已确认付款')
  102. payment.payConfirm(payment.pay_no)
  103. except CustomError as e:
  104. return response_error(str(e))
  105. except Exception as e:
  106. traceback.print_exc()
  107. return response_error(u'验证失败', request)
  108. return response_ok()