فهرست منبع

Merge remote-tracking branch 'origin/master'

wushaodong 4 سال پیش
والد
کامیت
dc152a9117

+ 3 - 3
apps/tenant/operation_help/filters.py

@@ -1,11 +1,11 @@
 # coding=utf-8
 
 import django_filters
-from .models import Poster
+from .models import OperationHelp
 
-class PosterFilter(django_filters.FilterSet):
+class OperationHelpFilter(django_filters.FilterSet):
     title = django_filters.CharFilter(field_name='title', lookup_expr='icontains')
 
     class Meta:
-        model = Poster
+        model = OperationHelp
         fields = '__all__'

+ 35 - 0
apps/tenant/operation_help/models.py

@@ -1,6 +1,9 @@
 from django.db import models
 from django.conf import settings
+from PIL import Image
+
 from apps.tenant.models import Tenant
+from utils.file_operation import UploadFile, DeleteFile
 
 class OperationHelp(models.Model):
 
@@ -11,8 +14,40 @@ class OperationHelp(models.Model):
     create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
     enable = models.BooleanField(verbose_name=u"在用", default=True)
     tenant = models.ForeignKey(Tenant, verbose_name=u'企业', editable=False, on_delete=models.PROTECT, null=True)
+    image = models.CharField(verbose_name=u'图片路径', max_length=250,blank=True)
+    width = models.IntegerField(verbose_name=u"图片宽度",blank=True, default=0)
+    height = models.IntegerField(verbose_name=u"图片高度",blank=True, default=0)
 
     class Meta:
         db_table = 'operation_help'
         ordering = ['-id', 'tenant']
         verbose_name = u'运维帮助'
+
+    def _add_img(self, file, user_id):
+        width = None
+        height = None
+
+        path = "operation_help/"
+        filename = UploadFile(file, path, user_id)
+        fullname = "%s%s" % (settings.MEDIA_ROOT, filename)
+
+        try:
+            img = Image.open(fullname)
+            width, height = img.size
+            # 缩略图压缩宽或高最大200
+            if width > 1440:
+                img = img.resize((1440, int((height / width) * 1440)), Image.ANTIALIAS)
+                img.save(fullname)
+                width, height = img.size
+        except:
+            pass
+
+        self.image = "%s%s" % (settings.MEDIA_URL, filename)
+        self.width = width
+        self.height = height
+        self.save()
+
+    def del_images(self):
+        image = self.image
+        # self.delete()
+        DeleteFile(image)

+ 3 - 4
apps/tenant/operation_help/serializer.py

@@ -1,9 +1,8 @@
 from rest_framework import serializers
-from .models import Poster
+from .models import OperationHelp
 from django.conf import settings
 
-class PosterSerializer(serializers.ModelSerializer):
-    location_text = serializers.CharField(source='get_location_display', read_only=True)
+class OperationHelpSerializer(serializers.ModelSerializer):
     enable_text = serializers.SerializerMethodField()
     create_user_name = serializers.CharField(source='create_user.employee.name', read_only=True)
     tenant_name = serializers.CharField(source='tenant.company_name', read_only=True)
@@ -14,5 +13,5 @@ class PosterSerializer(serializers.ModelSerializer):
         return '否'
 
     class Meta:
-        model = Poster
+        model = OperationHelp
         fields = '__all__'

+ 2 - 2
apps/tenant/operation_help/urls.py

@@ -1,11 +1,11 @@
 from rest_framework.routers import SimpleRouter
 from django.conf.urls import url
-from .views import PosterViewSet
+from .views import OperationHelpViewSet
 
 urlpatterns = [
 
 ]
 
 router = SimpleRouter()
-router.register(r'', PosterViewSet)
+router.register(r'', OperationHelpViewSet)
 urlpatterns += router.urls

+ 16 - 26
apps/tenant/operation_help/views.py

@@ -3,41 +3,37 @@
 from utils.custom_modelviewset import CustomModelViewSet
 from rest_framework.decorators import action
 import json
-import traceback
-from .models import Poster
+
+from .models import OperationHelp
 from utils.permission import IsAdministratorUser
-from .serializer import PosterSerializer
+from .serializer import OperationHelpSerializer
 from apps.log.models import BizLog
-from .filters import PosterFilter
+from .filters import OperationHelpFilter
 from django.db import transaction
 from utils.exceptions import CustomError
 from utils import response_ok, response_error
 
 
-class PosterViewSet(CustomModelViewSet):
+class OperationHelpViewSet(CustomModelViewSet):
     permission_classes = [IsAdministratorUser, ]
-    queryset = Poster.objects.filter()
-    serializer_class = PosterSerializer
+    queryset = OperationHelp.objects.filter()
+    serializer_class = OperationHelpSerializer
 
     def filter_queryset(self, queryset):
         queryset = queryset.filter(tenant=self.request.user.employee.tenant)
-        f = PosterFilter(self.request.GET, queryset=queryset)
+        f = OperationHelpFilter(self.request.GET, queryset=queryset)
         return f.qs
 
     def create(self, request, *args, **kwargs):
         data = json.loads(request.POST.get('data'))
         banner_img = request.FILES.get('banner_img')
         try:
-            with transaction.atomic():
-                data['create_user'] = request.user
-                tenant = request.user.employee.tenant
-                posters = Poster.objects.filter(tenant=tenant, enable=True).count()
-                if posters >= 2:
-                    raise CustomError(u'只能添加2个在用的轮播!')
-                data['tenant'] = tenant
-                poster = Poster.objects.create(**data)
-                poster._add_img(banner_img,request.user)
-                BizLog.objects.addnew(tenant, request.user, BizLog.INSERT, u'添加轮播信息', data)
+            data['create_user'] = request.user
+            tenant = request.user.employee.tenant
+            data['tenant'] = tenant
+            operation = OperationHelp.objects.create(**data)
+            operation._add_img(banner_img, request.user)
+            BizLog.objects.addnew(tenant, request.user, BizLog.INSERT, u'添加运维帮助信息', data)
             return response_ok()
         except CustomError as e:
             return response_error(e.get_error_msg())
@@ -47,20 +43,14 @@ class PosterViewSet(CustomModelViewSet):
     @action(methods=['post'], detail=True)
     def update_poster(self, request, pk):
         data = json.loads(request.POST.get('data'))
-        # data = {'title': '644', 'content': '发斯蒂芬44', 'location': '1', 'enable': '1'}
         banner_img = request.FILES.get('banner_img')
         try:
             if data['enable']:
-                tenant = request.user.employee.tenant
-                posters = Poster.objects.filter(tenant=tenant, enable=True).exclude(id=pk).count()
-                if posters >= 2:
-                    raise CustomError(u'只能添加2个在用的轮播!')
-            with transaction.atomic():
-                Poster.objects.filter(id=pk).update(**data)
+                OperationHelp.objects.filter(id=pk).update(**data)
                 poster = self.get_object()
                 if banner_img:
                     poster.del_images()
-                    poster._add_img(banner_img,request.user)
+                    poster._add_img(banner_img, request.user)
         except CustomError as e:
             return response_error(e.get_error_msg())
         except Exception as e:

+ 1 - 0
apps/tenant/urls.py

@@ -20,6 +20,7 @@ urlpatterns = [
     url(r'^device/', include('apps.tenant.device.urls')),
     url(r'^notices/', include('apps.tenant.notices.urls')),
     url(r'^poster/', include('apps.tenant.poster.urls')),
+    url(r'^operation_help/', include('apps.tenant.operation_help.urls')),
 ]