views.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. # coding=utf-8
  2. from rest_framework.views import APIView
  3. from django.db import transaction
  4. import traceback
  5. from .serializers import DeviceSerializer
  6. from utils.exceptions import CustomError
  7. from utils.permission import IsAdministratorUser
  8. from .filters import DeviceFilter, DeviceModel
  9. from utils.custom_modelviewset import CustomModelViewSet
  10. from apps.log.models import BizLog
  11. from apps.tenant import tenant_log
  12. from utils import response_ok, response_error
  13. from .resources import DeviceImporter
  14. from django.conf import settings
  15. from apps.WechatApplet.models import WechatApplet
  16. # Create your views here.
  17. class DeviceViewSet(CustomModelViewSet):
  18. permission_classes = [IsAdministratorUser]
  19. queryset = DeviceModel.objects.all()
  20. serializer_class = DeviceSerializer
  21. def filter_queryset(self, queryset):
  22. queryset = queryset.filter(tenant=self.request.user.employee.tenant)
  23. f = DeviceFilter(self.request.GET, queryset=queryset)
  24. return f.qs
  25. def perfrom_create(self, serializer):
  26. super(DeviceViewSet, self).perform_create(serializer)
  27. instance = serializer.instance
  28. validated_data = serializer.validated_data
  29. tenant_log(self.request.user.employee, BizLog.INSERT, u'添加设备信息[%s],id=%d' % (instance.name, instance.id),
  30. validated_data)
  31. def perform_update(self, serializer):
  32. #更新
  33. super(DeviceViewSet, self).perform_update(serializer)
  34. instance = serializer.instance
  35. validated_data = serializer.validated_data
  36. tenant_log(self.request.user.employee, BizLog.INSERT, u'修改设备信息[%s],id=%d' % (instance.name, instance.id),
  37. validated_data)
  38. def perform_destroy(self, instance):
  39. #删除
  40. if instance.tenant != self.request.user.employee.tenant:
  41. raise CustomError(u'禁止跨企业操作!')
  42. tenant_log(self.request.user.employee, BizLog.DELETE, u'删除设备信息[%s],id=%d' % (instance.name, instance.id))
  43. super(DeviceViewSet, self).perform_destroy(instance)
  44. class DeviceImportView(APIView):
  45. permission_classes = [IsAdministratorUser, ]
  46. def post(self, request):
  47. file = request.FILES.get('excel_file')
  48. try:
  49. line = 2
  50. importer = DeviceImporter()
  51. excel_rows = importer.getExcelData(file)
  52. with transaction.atomic():
  53. for excel_row in excel_rows:
  54. try:
  55. row = importer.validRow(excel_row)
  56. data = {}
  57. data['name'] = row[u'名称']
  58. data['device_no'] = row[u'编号']
  59. data['device_model'] = row[u'型号']
  60. data['branch'] = row[u'小地点']
  61. data['address'] = row[u'大地点']
  62. data['create_user'] = request.user
  63. data['tenant'] = request.user.employee.tenant
  64. instance = DeviceModel.objects.create(**data)
  65. # applet = WechatApplet.objects.filter(authorizer_appid=settings.WEAPP['appid']).first()
  66. # filename = applet.getDeviceCode(instance.id, instance.tenant.company_no)
  67. # instance.wxapp_img = "{0}{1}".format(settings.MEDIA_URL, filename)
  68. # instance.save()
  69. except CustomError as e:
  70. raise CustomError(u'第%d行:%s' % (line, e.get_error_msg()))
  71. except Exception as e:
  72. raise CustomError(u'第%d行:%s' % (line, str(e)))
  73. line += 1
  74. tenant_log(self.request.user.employee, BizLog.IMPORT, u"导入设备信息[%s]条" % (line-2))
  75. except CustomError as e:
  76. return response_error(e.get_error_msg())
  77. except Exception as e:
  78. traceback.print_exc()
  79. return response_error(u'导入失败!')
  80. return response_ok()