views.py 4.9 KB

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