views.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. from utils.custom_modelviewset import CustomModelViewSet
  2. from django.db import transaction
  3. import json
  4. from django.db.models import Sum
  5. from rest_framework.decorators import action
  6. from .serializers import *
  7. from .filters import *
  8. from rest_framework.views import APIView
  9. from apps.log.models import BizLog
  10. from utils import response_ok, response_error
  11. from utils.exceptions import CustomError
  12. from utils.permission import isLogin
  13. from django.contrib.auth import get_user_model
  14. User = get_user_model()
  15. from utils.file_operation import attachment_save
  16. class ConfigViewSet(CustomModelViewSet):
  17. permission_classes = [isLogin, ]
  18. queryset = Config.objects.filter()
  19. serializer_class = ConfigSerializer
  20. def list(self, request, *args, **kwargs):
  21. queryset = self.filter_queryset(self.get_queryset())
  22. serializer = self.get_serializer(queryset, many=True)
  23. return response_ok(serializer.data)
  24. def create(self, request, *args, **kwargs):
  25. try:
  26. data = json.loads(request.POST.get('data'))
  27. pay_picture = request.FILES.get('pay_picture')
  28. keys = ['leave_lead_time', ]
  29. with transaction.atomic():
  30. for item in data:
  31. config = Config.objects.filter(property=item['key']).first()
  32. if item['value']:
  33. if item['key'] not in keys:
  34. raise CustomError(u'综合设置属性[%s]不存在' % item['key'])
  35. else:
  36. item['value'] = item['value'].strip()
  37. if config:
  38. config.value = item['value']
  39. config.save()
  40. else:
  41. Config.objects.create(property=item['key'], value=item['value'])
  42. BizLog.objects.addnew(self.request.user, BizLog.INSERT, u'修改系统配置', data)
  43. except CustomError as e:
  44. return response_error(e.get_error_msg())
  45. except Exception as e:
  46. return response_error(str(e))
  47. return response_ok()
  48. class BalanceViewSet(CustomModelViewSet):
  49. permission_classes = [isLogin, ]
  50. queryset = Balance.objects.filter()
  51. serializer_class = BalanceSerializer
  52. def filter_queryset(self, queryset):
  53. queryset = queryset.filter()
  54. if self.request.user.type == User.CUSTOMER:
  55. queryset = queryset.filter(create_user=self.request.user)
  56. return queryset
  57. @action(methods=['post'], detail=False)
  58. def clear_balance(self, request):
  59. create_user = request.GET.get('create_user')
  60. reason = request.POST.get('reason')
  61. instance = Balance.objects.filter(create_user_id=create_user).first()
  62. try:
  63. if not reason:
  64. raise CustomError('请填写清空原因!')
  65. if not instance:
  66. raise CustomError('学生信息错误,请刷新重试!')
  67. with transaction.atomic():
  68. if instance.balance <= 0:
  69. raise CustomError('余额为0,不能清空!')
  70. desc = '清空余额,原因:{}'.format(reason)
  71. Balance.update_balance(instance.create_user, -instance.balance, desc)
  72. instance.balance = 0
  73. instance.save()
  74. BizLog.objects.addnew(self.request.user, BizLog.INSERT, u'清空[{}]余额, id={}'.
  75. format(instance.create_user.username, instance.id), )
  76. except CustomError as e:
  77. return response_error(e.get_error_msg())
  78. except Exception as e:
  79. return response_error(str(e))
  80. return response_ok()
  81. class BalanceLogViewSet(CustomModelViewSet):
  82. permission_classes = [isLogin, ]
  83. queryset = BalanceLog.objects.filter()
  84. serializer_class = BalanceLogSerializer
  85. def filter_queryset(self, queryset):
  86. description = self.request.GET.get('description')
  87. queryset = queryset.filter()
  88. if self.request.user.type == User.CUSTOMER:
  89. queryset = queryset.filter(create_user=self.request.user)
  90. if description:
  91. queryset = queryset.filter(description__icontains=description)
  92. return queryset
  93. class PosterView(APIView):
  94. def get(self, request):
  95. data = []
  96. queryset = Poster.objects.filter()
  97. for row in queryset:
  98. data.append(settings.SERVER_DOMAIN + row.image)
  99. return response_ok(data)
  100. class PosterViewSet(CustomModelViewSet):
  101. permission_classes = [isLogin, ]
  102. queryset = Poster.objects.filter()
  103. serializer_class = PosterSerializer
  104. def create(self, request, *args, **kwargs):
  105. banner_img = request.FILES.get('banner_img')
  106. try:
  107. with transaction.atomic():
  108. poster = Poster.objects.create(create_user=request.user)
  109. poster._add_img(banner_img)
  110. BizLog.objects.addnew(self.request.user, BizLog.INSERT, u'添加轮播信息, id={}'.
  111. format(poster.id), )
  112. return response_ok()
  113. except CustomError as e:
  114. return response_error(e.get_error_msg())
  115. except Exception as e:
  116. return response_error(str(e))