views.py 3.9 KB

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