views.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. # coding=utf-8
  2. import requests
  3. import json
  4. from django.db import transaction
  5. from rest_framework.decorators import action
  6. from django.utils import timezone
  7. from utils import response_ok
  8. from utils.permission import permission_required
  9. from utils.custom_modelviewset import CustomModelViewSet
  10. from utils.exceptions import CustomError
  11. from apps.foundation.models import BizLog, Config
  12. from apps.account import tenant_log
  13. from apps.images.models import Images
  14. from apps.store.models import Shop, StoreBrand
  15. from apps.vehicle.models import Brand
  16. from apps.store.filters import ShopFilter
  17. from .serializers import ShopSerializer
  18. from hashlib import md5
  19. from rest_framework.views import APIView
  20. class ShopViewSet(CustomModelViewSet):
  21. queryset = Shop.objects.filter(delete=False)
  22. serializer_class = ShopSerializer
  23. @permission_required('shop.browse_shop')
  24. def filter_queryset(self, queryset):
  25. queryset = queryset.filter()
  26. f = ShopFilter(self.request.GET, queryset=queryset)
  27. return f.qs
  28. def perform_create(self, serializer):
  29. super(ShopViewSet, self).perform_create(serializer)
  30. instance = serializer.instance
  31. validated_data = serializer.validated_data
  32. tenant_log(self.request.user, BizLog.INSERT, u'添加门店[%s],id=%d' % (instance.name, instance.id),validated_data)
  33. def destroy(self, request, *args, **kwargs):
  34. with transaction.atomic():
  35. instance = self.get_object()
  36. instance.delete = True
  37. instance.save()
  38. tenant_log(self.request.user, BizLog.DELETE, u'删除门店[%s],id=%d' % (instance.name, instance.id))
  39. return response_ok()
  40. @action(methods=['post'], detail=True)
  41. def update_shop(self, request, pk):
  42. file = request.FILES.get('image', None)
  43. brands = request.POST.get('brands')
  44. user = request.user
  45. instance = self.get_object()
  46. if instance.delete:
  47. raise CustomError(u'该门店已删除,禁止操作!')
  48. with transaction.atomic():
  49. serializer = self.get_serializer(instance, data=request.data)
  50. serializer.is_valid(raise_exception=True)
  51. self.perform_update(serializer)
  52. tenant_log(user, BizLog.UPDATE, u'修改门店[%s],id=%d' % (instance.name, instance.id), request.data)
  53. StoreBrand.objects.filter(store=instance).delete()
  54. if brands:
  55. brands = brands.split(',')
  56. for item in brands:
  57. brand = Brand.objects.filter(id=int(item), enabled=True, delete=False).first()
  58. if not brand:
  59. raise CustomError(u'所选择的品牌不存在或不可用或已被删除')
  60. StoreBrand.objects.create(store=instance, brand=brand)
  61. if file:
  62. old_img = instance.img
  63. img = Images.objects.employee_addnew(user, Images.SHOP_FILE, file)
  64. instance.img = img
  65. instance.save()
  66. if old_img:
  67. old_img.del_images()
  68. return response_ok()
  69. @action(methods=['get'], detail=False)
  70. def update_company(self, request):
  71. with transaction.atomic():
  72. xgj_ip = Config.getConfigValue(Config.KEY_XGJ_IP)
  73. xgj_session_key = Config.getConfigValue(Config.KEY_XGJ_SESSION_KEY)
  74. if not xgj_ip:
  75. raise CustomError(u'没有配置销管佳地址,请前往基础设置中配置!')
  76. if not xgj_session_key:
  77. raise CustomError(u'没有配置销管佳密钥,请前往基础设置中配置!')
  78. ts = timezone.now().strftime('%Y%m%d%H%M%S')
  79. token = xgj_session_key + ts
  80. m = md5()
  81. m.update(token.encode("utf8"))
  82. sign = m.hexdigest()
  83. url = xgj_ip + 'wechat/applet/member/company/?ts=' + ts + '&sign=' + sign
  84. param = {}
  85. result = requests.post(url=url, data=json.dumps(param))
  86. result = result.json()
  87. if result['success']:
  88. data = result['data']
  89. for item in data:
  90. store = Shop.objects.filter(xgj_id=item['id']).first()
  91. if store:
  92. store.delete = False
  93. store.save()
  94. else:
  95. Shop.objects.create(
  96. name=item['name'],
  97. addr=item['company_address'],
  98. tel=item['company_tel'],
  99. is_xgj=True,
  100. xgj_id=item['id'],
  101. )
  102. tenant_log(request.user, BizLog.UPDATE, u'更新销管佳门店')
  103. else:
  104. if 'errors' in result:
  105. raise CustomError(u'请求失败--' + str(result['errors']))
  106. else:
  107. raise CustomError(u'请求失败')
  108. return response_ok()
  109. class ShopSearchSearch(APIView):
  110. def get(self, request):
  111. keyword = request.GET.get('keyword')
  112. rows = Shop.objects.filter(delete=False, enabled=True)
  113. if keyword:
  114. rows = rows.filter(name__icontains=keyword)
  115. data = []
  116. for row in rows:
  117. item ={
  118. 'value': row.id,
  119. 'id': row.id,
  120. 'name': row.name
  121. }
  122. data.append(item)
  123. return response_ok(data)