views.py 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. # coding=utf-8
  2. import json
  3. from django.db.models import Sum, F
  4. from django.db import transaction
  5. from django.db.models import Q
  6. from rest_framework.views import APIView
  7. from rest_framework.generics import ListAPIView
  8. from utils.custom_modelviewset import CustomModelViewSet
  9. from .serializers import *
  10. from .filters import *
  11. from apps.log.models import BizLog
  12. from utils import response_ok, response_error
  13. from utils.permission import isLogin
  14. from apps.order.models import Order
  15. from rest_framework.decorators import action
  16. from django.contrib.auth import get_user_model
  17. User = get_user_model()
  18. class ProductView(APIView):
  19. def get(self, request):
  20. data = []
  21. queryset = Product.objects.filter(enable=True)
  22. for row in queryset:
  23. item = {
  24. 'id':row.id,
  25. 'name':row.name,
  26. 'month':row.month,
  27. }
  28. data.append(item)
  29. return response_ok(data)
  30. class DeleteProductImageView(APIView):
  31. permission_classes = [isLogin, ]
  32. def post(self, request, *args, **kwargs):
  33. # 商品图片 删除
  34. id = request.GET.get('id')
  35. try:
  36. instance = ProductImages.getById(id)
  37. image = Upload.objects.filter(id=instance.image_id).first()
  38. with transaction.atomic():
  39. instance.delete()
  40. image.del_images()
  41. except CustomError as e:
  42. return response_error(e.get_error_msg())
  43. except Exception as e:
  44. return response_error(str(e))
  45. return response_ok()
  46. class ProductViewSet(CustomModelViewSet):
  47. permission_classes = [isLogin, ]
  48. queryset = Product.objects.filter()
  49. serializer_class = ProductSerializer
  50. def filter_queryset(self, queryset):
  51. f = ProductFilter(self.request.GET, queryset=queryset)
  52. return f.qs
  53. @action(methods=['post'], detail=True)
  54. def upload_image(self, request, pk):
  55. banner_img = request.FILES.get('banner_img')
  56. try:
  57. with transaction.atomic():
  58. instance = self.get_object()
  59. upload = Upload.objects._addnew(banner_img, 'commodity_image')
  60. if upload:
  61. if instance.main_image_id:
  62. img = Upload.objects.filter(id=instance.main_image_id).first()
  63. img.del_images()
  64. instance.main_image_id = upload.id
  65. instance.save()
  66. return response_ok(upload.id)
  67. return response_error('上传失败,请重新上传!')
  68. except CustomError as e:
  69. return response_error(e.get_error_msg())
  70. except Exception as e:
  71. return response_error(str(e))
  72. @action(methods=['post'], detail=True)
  73. def upload_detail_img(self, request, pk):
  74. # 上传详情、参数图片
  75. try:
  76. with transaction.atomic():
  77. instance = self.get_object()
  78. for i in range(10):
  79. file = request.data.get('file{}'.format(i))
  80. if file:
  81. upload = Upload.objects._addnew(file, 'commodity_image')
  82. ProductImages.objects.create(product_id=instance.id,
  83. image_id=upload.id)
  84. if not upload:
  85. return response_error('上传失败,请重新上传!')
  86. except CustomError as e:
  87. return response_error(e.get_error_msg())
  88. except Exception as e:
  89. return response_error(str(e))
  90. return response_ok()
  91. @action(methods=['post'], detail=True)
  92. def query_detail_img(self, request, pk):
  93. # 查看 详情图片
  94. instance = self.get_object()
  95. data = []
  96. commodity_images = ProductImages.objects.filter(product_id=instance.id)
  97. for commodity_image in commodity_images:
  98. image = Upload.objects.filter(id=commodity_image.image_id).first()
  99. image_path = image.get_path()
  100. commodity_image_item = {
  101. 'id': commodity_image.id,
  102. 'name': commodity_image.name,
  103. 'src': image_path,
  104. }
  105. data.append(commodity_image_item)
  106. return response_ok(data)
  107. class ProductListViewSet(ListAPIView):
  108. queryset = Product.objects.filter()
  109. serializer_class = ProductListSerializer
  110. def filter_queryset(self, queryset,):
  111. f = ProductFilter(self.request.GET, queryset=queryset)
  112. return f.qs
  113. class OrderListViewSet(ListAPIView):
  114. permission_classes = [isLogin, ]
  115. queryset = Order.objects.filter()
  116. serializer_class = OrderListSerializer
  117. def filter_queryset(self, queryset,):
  118. queryset = queryset.filter(Q(create_user=self.request.user) | Q(seller=self.request.user))
  119. f = OrderFilter(self.request.GET, queryset=queryset)
  120. return f.qs
  121. class OrderViewSet(CustomModelViewSet):
  122. permission_classes = [isLogin, ]
  123. queryset = Order.objects.filter()
  124. serializer_class = OrderSerializer
  125. def filter_queryset(self, queryset):
  126. queryset = queryset.filter(Q(create_user=self.request.user) | Q(seller=self.request.user))
  127. f = OrderFilter(self.request.GET, queryset=queryset)
  128. return f.qs
  129. def create(self, request, *args, **kwargs):
  130. try:
  131. with transaction.atomic():
  132. serializer = self.get_serializer(data=request.data)
  133. if serializer.is_valid(raise_exception=True):
  134. instance = serializer.save()
  135. BizLog.objects.addnew(self.request.user, BizLog.INSERT,
  136. u'添加订单[%s],id=%d' % (instance.name, instance.id), request.data)
  137. return response_ok()
  138. except CustomError as e:
  139. return response_error(e.get_error_msg())
  140. except Exception as e:
  141. return response_error(str(e))
  142. def update(self, request, *args, **kwargs):
  143. data = request.POST
  144. try:
  145. instance = self.get_object()
  146. with transaction.atomic():
  147. serializer = self.get_serializer(instance,data=request.data)
  148. if serializer.is_valid(raise_exception=True):
  149. instance = serializer.save()
  150. for key in data:
  151. edit, create = OrderDetailEdit.objects.get_or_create(type=OrderDetailEdit.ZERO, order=instance, value=key)
  152. if not create:
  153. edit.edit_time = datetime.datetime.now()
  154. edit.save()
  155. BizLog.objects.addnew(self.request.user, BizLog.INSERT,
  156. u'修改订单[%s],id=%d' % (instance.name, instance.id), request.data)
  157. return response_ok()
  158. except CustomError as e:
  159. return response_error(e.get_error_msg())
  160. except Exception as e:
  161. return response_error(str(e))
  162. @action(methods=['post'], detail=False)
  163. def upload_image(self, request):
  164. file = self.request.FILES.get('file')
  165. type = self.request.FILES.get('type')
  166. order_id = self.request.FILES.get('order_id')
  167. upload = Upload.objects._addnew(file)
  168. if upload:
  169. OrderImages.objects.create(order_id=order_id, type=type, image=upload)
  170. return response_ok(upload.id)
  171. return response_error('上传失败,请重新上传!')
  172. @action(methods=['post'], detail=True)
  173. def update_image(self, request):
  174. file = self.request.FILES.get('file')
  175. upload_id = self.request.FILES.get('upload_id')
  176. upload = Upload.objects.filter(id=upload_id).first()
  177. if upload:
  178. upload.del_images()
  179. Upload.objects._update(file, 'user_image', upload)
  180. return response_ok(upload.id)
  181. return response_error('更新失败,请重新上传!')
  182. def destroy(self, request, *args, **kwargs):
  183. try:
  184. instance = self.get_object()
  185. if instance.category == order.ONE:
  186. raise CustomError('已上报信息,禁止删除!')
  187. with transaction.atomic():
  188. OrderDetailEdit.objects.filter(order=instance).delete()
  189. images = OrderImages.objects.filter(order=instance)
  190. for image in images:
  191. upload = Upload.objects.filter(id=image.image.id)
  192. upload.del_images()
  193. images.delete()
  194. super(OrderViewSet, self).destroy(request, *args, **kwargs)
  195. except CustomError as e:
  196. return response_error(e.get_error_msg())
  197. except Exception as e:
  198. return response_error(str(e))
  199. return response_ok()