123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- # coding=utf-8
- import traceback
- import datetime
- import time
- from django.db import transaction
- from django.conf import settings
- from rest_framework.decorators import action
- from rest_framework_jwt.views import ObtainJSONWebToken,VerifyJSONWebToken,RefreshJSONWebToken
- from rest_framework.serializers import ValidationError
- from utils.custom_modelviewset import CustomModelViewSet
- from utils import response_error, response_ok
- from .serializers import TenantJWTSerializer
- from utils.permission import IsTenantUser, IsAdministratorUser
- from .models import Tenant, Pay
- from apps.admin.tenant.serializers import TenantSerializer
- from apps.admin.tenant.filters import TenantFilter
- from apps.log.models import BizLog
- from apps.tenant.config.models import Config
- from utils.exceptions import CustomError
- from apps.base import Formater
- from apps.WechatApplet.models import WechatApplet
- from apps.tenant.serializers import PaySerializer
- class TenantLoginView(ObtainJSONWebToken):
- serializer_class = TenantJWTSerializer
- def post(self, request, *args, **kwargs):
- try:
- ser = self.serializer_class(data=request.data)
- ser.request = request
- if ser.is_valid(raise_exception=True):
- return response_ok(ser.validated_data)
- except ValidationError as e:
- return response_error(e.detail['error'][0])
- class TenantVerifyTokenView(VerifyJSONWebToken):
- def post(self, request, *args, **kwargs):
- try:
- ser = self.serializer_class(data=request.data)
- if ser.is_valid(raise_exception=True):
- return response_ok({'token': ser.validated_data['token']})
- except ValidationError as e:
- return response_error(u'登录状态失效,请重新登录[' + e.detail['error'][0] + ']')
- class TenantRefreshTokenView(RefreshJSONWebToken):
- def post(self, request, *args, **kwargs):
- try:
- ser = self.serializer_class(data=request.data)
- if ser.is_valid(raise_exception=True):
- return response_ok({'token': ser.validated_data['token']})
- except ValidationError as e:
- return response_error(u'登录状态失效,请重新登录[' + e.detail['error'][0] + ']')
- class CompanyViewSet(CustomModelViewSet):
- permission_classes = [IsAdministratorUser,]
- queryset = Tenant.objects.filter(delete=False)
- serializer_class = TenantSerializer
- def filter_queryset(self, queryset):
- queryset = queryset.filter(id=self.request.user.employee.tenant.id)
- f = TenantFilter(self.request.GET, queryset=queryset)
- return f.qs
- @action(methods=['post'], detail=True)
- def update_company(self,request,pk):
- name = request.POST.get('name')
- tel = request.POST.get('tel')
- Tenant.objects.filter(id=pk).update(name=name,tel=tel)
- BizLog.objects.addnew(self.request.user.employee.tenant, self.request.user, BizLog.INSERT, u'修改企业联系人,id=%s' % pk, request.POST)
- return response_ok()
- @action(methods=['get'], detail=True)
- def get_code(self, request, pk):
- pay_channel = request.GET.get('pay_channel')
- pay_edition = request.GET.get('pay_edition') # edition_1_1_year
- amount = Config.getIntValue(pay_edition)
- if amount:
- amount = Formater.formatAmount(amount)
- editions = pay_edition.split('_')
- edition_year = '{},{}'.format(editions[1],editions[2],)
- else:
- raise CustomError('续费金额错误')
- try:
- with transaction.atomic():
- if int(pay_channel) == Pay.WECHAT:
- line_data = Pay.wechatPay(request.user, pk ,amount, edition_year)
- elif int(pay_channel) == Pay.ALIPAY:
- line_data = Pay.alipayPay(request.user, pk ,amount, edition_year)
- else:
- raise CustomError('请选择正确的支付方式!')
- data = {
- 'id': line_data.id,
- 'qrcode': line_data.qrcode
- }
- return response_ok(data)
- except CustomError as e:
- return response_error(str(e))
- except Exception as e:
- traceback.print_exc()
- return response_error(u'支付失败', request)
- @action(methods=['get'], detail=True)
- def get_wxapp_code(self, request, pk):
- try:
- tenant = Tenant.objects.filter(id=pk).first()
- if tenant:
- company_no = tenant.company_no
- else:
- raise CustomError('获取企业信息失败,请刷新重试!')
- if not tenant.wxapp_img:
- applet = WechatApplet.objects.filter(authorizer_appid=settings.WEAPP['appid']).first()
- filename = applet.getWXAppCode(company_no)
- tenant.wxapp_img = "{0}{1}".format(settings.MEDIA_URL,filename)
- tenant.save()
- return response_ok(tenant.wxapp_img)
- except CustomError as e:
- return response_error(str(e))
- except Exception as e:
- traceback.print_exc()
- return response_error(u'支付失败', request)
- @action(methods=['get'], detail=True)
- def confirm_pay(self, request, pk):
- pay_id = request.GET.get('pay_id')
- try:
- with transaction.atomic():
- payment = Pay.objects.filter(id=int(pay_id)).first()
- if not payment:
- raise CustomError(u'无法找到付款单')
- if payment.status == Pay.WAIT:
- raise CustomError(u'暂无付款信息,请付款')
- if payment.status == Pay.CONFIRM:
- raise CustomError(u'已确认付款')
- payment.payConfirm(payment.pay_no)
- except CustomError as e:
- return response_error(str(e))
- except Exception as e:
- traceback.print_exc()
- return response_error(u'验证失败', request)
- return response_ok()
- @action(methods=['get'], detail=True)
- def get_renew_record(self, request, pk):
- payment = Pay.objects.filter(tenant_id=pk)
- data = PaySerializer(payment, many=True).data
- return response_ok(data)
|