views.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. # coding=utf-8
  2. import json
  3. import ast
  4. from django.db import transaction
  5. from rest_framework.decorators import action
  6. from rest_framework.views import APIView
  7. from django.db.models import Q
  8. from utils import response_ok
  9. from utils.permission import permission_required, isLogin
  10. from utils.custom_modelviewset import CustomModelViewSet
  11. from utils.exceptions import CustomError
  12. from apps.images.models import Images
  13. from apps.vehicle.models import Brand, Series, Model, VehicleModelImg, VehicleImg
  14. from apps.vehicle.filters import BrandFilter, SeriesFilter, ModelFilter, VehicleImgFilter, VehicleModelImgFilter
  15. from .serializers import BrandSerializer, SeriesSerializer, ModelSerializer, VehicleImgSerializer, VehicleModelImgSerializer
  16. from apps.account import tenant_log
  17. from apps.foundation.models import BizLog
  18. class DictView(APIView):
  19. permission_classes = [isLogin, ]
  20. def get(self, request):
  21. ret = {
  22. 'brand': BrandSerializer(Brand.objects.filter(delete=False, enabled=True, ), many=True).data,
  23. 'series': SeriesSerializer(Series.objects.filter(delete=False, enabled=True, ), many=True).data
  24. }
  25. return response_ok(ret)
  26. class VehicleBrandViewSet(CustomModelViewSet):
  27. permission_classes = [isLogin, ]
  28. queryset = Brand.objects.filter(delete=False)
  29. serializer_class = BrandSerializer
  30. def filter_queryset(self, queryset):
  31. # queryset = queryset.filter(tenant=self.request.user.employee.tenant)
  32. f = BrandFilter(self.request.GET, queryset=queryset)
  33. return f.qs
  34. def perform_create(self, serializer):
  35. super(VehicleBrandViewSet, self).perform_create(serializer)
  36. instance = serializer.instance
  37. validated_data = serializer.validated_data
  38. tenant_log(self.request.user, BizLog.INSERT, u'添加整车品牌[%s],id=%d' % (instance.name, instance.id),validated_data)
  39. def perform_update(self, serializer):
  40. super(VehicleBrandViewSet, self).perform_update(serializer)
  41. instance = serializer.instance
  42. validated_data = serializer.validated_data
  43. tenant_log(self.request.user, BizLog.UPDATE, u'修改整车品牌[%s],id=%d' % (instance.name, instance.id), validated_data)
  44. def destroy(self, request, *args, **kwargs):
  45. with transaction.atomic():
  46. instance = self.get_object()
  47. instance.delete = True
  48. instance.save()
  49. tenant_log(self.request.user, BizLog.DELETE, u'删除整车品牌[%s],id=%d' % (instance.name, instance.id))
  50. return response_ok()
  51. class VehicleSeriesViewSet(CustomModelViewSet):
  52. permission_classes = [isLogin, ]
  53. queryset = Series.objects.filter(delete=False, brand__delete=False)
  54. serializer_class = SeriesSerializer
  55. def filter_queryset(self, queryset):
  56. # queryset = queryset.filter(tenant=self.request.user.employee.tenant)
  57. f = SeriesFilter(self.request.GET, queryset=queryset)
  58. return f.qs
  59. def perform_create(self, serializer):
  60. super(VehicleSeriesViewSet, self).perform_create(serializer)
  61. instance = serializer.instance
  62. validated_data = serializer.validated_data
  63. tenant_log(self.request.user, BizLog.INSERT, u'添加整车车系[%s],id=%d' % (instance.name, instance.id),validated_data)
  64. def destroy(self, request, *args, **kwargs):
  65. with transaction.atomic():
  66. instance = self.get_object()
  67. instance.delete = True
  68. instance.save()
  69. tenant_log(self.request.user, BizLog.DELETE, u'删除整车车系[%s],id=%d' % (instance.name, instance.id))
  70. return response_ok()
  71. @action(methods=['post'], detail=True)
  72. def update_series(self, request, pk):
  73. file = request.FILES.get('image', None)
  74. user = request.user
  75. instance = self.get_object()
  76. if instance.delete:
  77. raise CustomError(u'该车系已删除,禁止操作!')
  78. with transaction.atomic():
  79. serializer = self.get_serializer(instance, data=request.data)
  80. serializer.is_valid(raise_exception=True)
  81. self.perform_update(serializer)
  82. tenant_log(user, BizLog.UPDATE, u'修改车系[%s], id=%d' % (instance.name, instance.id), request.data)
  83. if file:
  84. old_thumbnail = instance.thumbnail
  85. thumbnail = Images.objects.employee_addnew(user, Images.VEHICLE_SERIES_THUMBNAIL, file)
  86. instance.thumbnail = thumbnail
  87. instance.save()
  88. if old_thumbnail:
  89. old_thumbnail.del_images()
  90. return response_ok()
  91. class VehicleModelViewSet(CustomModelViewSet):
  92. permission_classes = [isLogin, ]
  93. queryset = Model.objects.filter(delete=False, series__delete=False, series__brand__delete=False)
  94. serializer_class = ModelSerializer
  95. def filter_queryset(self, queryset):
  96. # queryset = queryset.filter(tenant=self.request.user.employee.tenant)
  97. f = ModelFilter(self.request.GET, queryset=queryset)
  98. return f.qs
  99. def perform_create(self, serializer):
  100. super(VehicleModelViewSet, self).perform_create(serializer)
  101. instance = serializer.instance
  102. validated_data = serializer.validated_data
  103. tenant_log(self.request.user, BizLog.INSERT, u'添加整车型号[%s],id=%d' % (instance.name, instance.id),validated_data)
  104. def destroy(self, request, *args, **kwargs):
  105. with transaction.atomic():
  106. instance = self.get_object()
  107. instance.delete = True
  108. instance.save()
  109. tenant_log(self.request.user, BizLog.DELETE, u'删除整车型号[%s],id=%d' % (instance.name, instance.id))
  110. return response_ok()
  111. @action(methods=['post'], detail=True)
  112. def update_model(self, request, pk):
  113. if not self.request.user.has_perm('vehicle_model.edit_vehicle_model'):
  114. raise CustomError(u"您没有[车型管理-修改]权限,无法执行该操作,请联系管理员分配权限!")
  115. instance = self.get_object()
  116. user = request.user
  117. thumbnail = request.FILES.get('image', None)
  118. tags = request.POST.get('tags')
  119. if instance.delete:
  120. raise CustomError(u'该车型已被删除,禁止操作!')
  121. with transaction.atomic():
  122. serializer = self.get_serializer(instance, data=request.data)
  123. serializer.is_valid(raise_exception=True)
  124. self.perform_update(serializer)
  125. tenant_log(self.request.user, BizLog.UPDATE, u'修改整车型号[%s],id=%d' % (instance.name, instance.id), request.data)
  126. if thumbnail:
  127. old_thumbnail = instance.thumbnail
  128. thumbnail = Images.objects.employee_addnew(user, Images.VEHICLE_MODEL_THUMBNAIL, thumbnail)
  129. instance.thumbnail = thumbnail
  130. instance.save()
  131. if old_thumbnail:
  132. old_thumbnail.del_images()
  133. return response_ok()
  134. @action(methods=['post'], detail=True)
  135. def upload_playbill(self, request, pk):
  136. # 整车上传海报
  137. if not self.request.user.has_perm('vehicle_model.edit_vehicle_model'):
  138. raise CustomError(u"您没有[车型管理-修改]权限,无法执行该操作,请联系管理员分配权限!")
  139. playbill = request.FILES.get('image', None)
  140. user = request.user
  141. vehicle_model = self.get_object()
  142. if vehicle_model.delete:
  143. raise CustomError(u'该整车型号已删除,禁止操作!')
  144. if not playbill:
  145. raise CustomError(u'未找到上传文件!')
  146. with transaction.atomic():
  147. tenant_log(user, BizLog.UPDATE, u'车型[%s]上传海报, id=%d' % (vehicle_model.name, vehicle_model.id))
  148. old_playbill = vehicle_model.playbill
  149. playbill = Images.objects.employee_addnew(user, Images.VEHICLE_MODEL_PLAYBILL, playbill)
  150. vehicle_model.playbill = playbill
  151. vehicle_model.save()
  152. if old_playbill:
  153. old_playbill.del_images()
  154. return response_ok()
  155. @action(methods=['post'], detail=True)
  156. def set_vehicle_img(self, request, pk):
  157. # 设置整车图片
  158. if not self.request.user.has_perm('vehicle_model.edit_vehicle_model'):
  159. raise CustomError(u"您没有[车型管理-修改]权限,无法执行该操作,请联系管理员分配权限!")
  160. image = request.FILES.get('images', None)
  161. vehicle_model = self.get_object()
  162. if vehicle_model.delete:
  163. raise CustomError(u'该整车型号已删除,禁止操作!')
  164. if not image:
  165. raise CustomError(u'未找到上传文件!')
  166. with transaction.atomic():
  167. image = Images.objects.employee_addnew(request.user, Images.VEHICLE_IMAGES, image)
  168. VehicleImg.objects.create(vehicle_model=vehicle_model, img=image)
  169. tenant_log(request.user, BizLog.DELETE, u'车型[%s]上传整车图片儿,id=%d' % (vehicle_model.name, vehicle_model.id))
  170. return response_ok()
  171. @action(methods=['post'], detail=True)
  172. def set_model_img(self, request, pk):
  173. if not self.request.user.has_perm('vehicle_model.edit_vehicle_model'):
  174. raise CustomError(u"您没有[车型管理-修改]权限,无法执行该操作,请联系管理员分配权限!")
  175. image = request.FILES.get('images', None)
  176. type_id = request.POST.get('type')
  177. user = request.user
  178. vehicle_model = self.get_object()
  179. if vehicle_model.delete:
  180. raise CustomError(u'该整车型号已删除,禁止操作!')
  181. if not image:
  182. raise CustomError(u'未找到上传文件!')
  183. with transaction.atomic():
  184. img = Images.objects.employee_addnew(user, Images.VEHICLE_MODEL_IMAGES, image)
  185. VehicleModelImg.objects.create(vehicle_model=vehicle_model, img=img)
  186. tenant_log(request.user, BizLog.INSERT, u'车型[%s]上传车型分类图片儿,id=%d' % (vehicle_model.name, vehicle_model.id))
  187. return response_ok()
  188. class VehicleImageViewSet(CustomModelViewSet):
  189. permission_classes = [isLogin, ]
  190. queryset = VehicleImg.objects.filter()
  191. serializer_class = VehicleImgSerializer
  192. def filter_queryset(self, queryset):
  193. f = VehicleImgFilter(self.request.GET, queryset=queryset)
  194. return f.qs
  195. def list(self, request, *args, **kwargs):
  196. queryset = self.filter_queryset(self.get_queryset())
  197. serializer = self.get_serializer(queryset, many=True)
  198. return response_ok(serializer.data)
  199. def destroy(self, request, *args, **kwargs):
  200. with transaction.atomic():
  201. instance = self.get_object()
  202. tenant_log(self.request.user, BizLog.DELETE, u'删除车型[%s]整车图片,id=%d' % (instance.vehicle_model.name, instance.vehicle_model.id))
  203. img = instance.img
  204. instance.delete()
  205. img.del_images()
  206. return response_ok()
  207. class VehicleModelImageViewSet(CustomModelViewSet):
  208. permission_classes = [isLogin, ]
  209. queryset = VehicleModelImg.objects.filter()
  210. serializer_class = VehicleModelImgSerializer
  211. def filter_queryset(self, queryset):
  212. f = VehicleModelImgFilter(self.request.GET, queryset=queryset)
  213. return f.qs
  214. def list(self, request, *args, **kwargs):
  215. queryset = self.filter_queryset(self.get_queryset())
  216. serializer = self.get_serializer(queryset, many=True)
  217. return response_ok(serializer.data)
  218. def destroy(self, request, *args, **kwargs):
  219. with transaction.atomic():
  220. instance = self.get_object()
  221. tenant_log(self.request.user, BizLog.DELETE, u'删除车型[%s]车型图片,id=%d' % (instance.vehicle_model.name, instance.vehicle_model.id))
  222. img = instance.img
  223. instance.delete()
  224. img.del_images()
  225. return response_ok()
  226. class VehicleSeriesSearch(APIView):
  227. permission_classes = [isLogin, ]
  228. def get(self, request):
  229. keyword = request.GET.get('keywords')
  230. rows = Series.objects.filter(delete=False, enabled=True, brand__delete=False, brand__enabled=True)
  231. if keyword:
  232. rows = rows.filter(
  233. Q(name__icontains=keyword) |
  234. Q(brand__name__icontains=keyword)
  235. )
  236. serializer = SeriesSerializer(rows, many=True)
  237. return response_ok(serializer.data)
  238. class VehicleModelSearch(APIView):
  239. permission_classes = [isLogin, ]
  240. def get(self, request):
  241. keyword = request.GET.get('keyword')
  242. rows = Model.objects.filter(
  243. delete=False, enabled=True, series__delete=False, series__enabled=True, series__brand__delete=False,
  244. series__brand__enabled=True,
  245. )
  246. if keyword:
  247. rows = rows.filter(
  248. Q(name__icontains=keyword) |
  249. Q(series__brand__name__icontains=keyword)|
  250. Q(series__name__icontains=keyword)
  251. )
  252. serializer = ModelSerializer(rows, many=True)
  253. return response_ok(serializer.data)