瀏覽代碼

设备二维码

wushaodong 4 年之前
父節點
當前提交
085d52aee0
共有 4 個文件被更改,包括 59 次插入35 次删除
  1. 2 2
      apps/WechatApplet/models.py
  2. 1 1
      apps/tenant/device/serializers.py
  3. 54 30
      apps/wxapp/views.py
  4. 2 2
      utils/wx/wechat.py

+ 2 - 2
apps/WechatApplet/models.py

@@ -90,7 +90,7 @@ class WechatApplet(models.Model):
         filename = WeChat.getWXAppCode(self.getAccessToken(),page, company_no)
         filename = WeChat.getWXAppCode(self.getAccessToken(),page, company_no)
         return filename
         return filename
 
 
-    def getDeviceCode(self, device_id):
+    def getDeviceCode(self, device_id, company_no):
         page = 'pages/index/index'
         page = 'pages/index/index'
-        filename = WeChat.getDeviceCode(self.getAccessToken(),page, device_id)
+        filename = WeChat.getDeviceCode(self.getAccessToken(),page, device_id, company_no)
         return filename
         return filename

+ 1 - 1
apps/tenant/device/serializers.py

@@ -19,7 +19,7 @@ class DeviceSerializer(serializers.ModelSerializer):
 
 
         id = instance.id
         id = instance.id
         applet = WechatApplet.objects.filter(authorizer_appid=settings.WEAPP['appid']).first()
         applet = WechatApplet.objects.filter(authorizer_appid=settings.WEAPP['appid']).first()
-        filename = applet.getDeviceCode(id)
+        filename = applet.getDeviceCode(id, instance.tenant.company_no)
         instance.wxapp_img = "{0}{1}".format(settings.MEDIA_URL,filename)
         instance.wxapp_img = "{0}{1}".format(settings.MEDIA_URL,filename)
         instance.save()
         instance.save()
 
 

+ 54 - 30
apps/wxapp/views.py

@@ -6,11 +6,11 @@ from django.db import transaction
 from rest_framework.views import APIView
 from rest_framework.views import APIView
 from rest_framework import generics
 from rest_framework import generics
 import datetime
 import datetime
-from django.db.models import Sum,Count
-from rest_framework_jwt.views import ObtainJSONWebToken,VerifyJSONWebToken,RefreshJSONWebToken
+from django.db.models import Sum, Count
+from rest_framework_jwt.views import ObtainJSONWebToken, VerifyJSONWebToken, RefreshJSONWebToken
 from rest_framework.serializers import ValidationError
 from rest_framework.serializers import ValidationError
 from utils import response_ok, response_error
 from utils import response_ok, response_error
-from apps.tenant.option.serializers import OptionSerializer,Option
+from apps.tenant.option.serializers import OptionSerializer, Option
 from django.utils import timezone
 from django.utils import timezone
 from apps.tenant.notices.models import Notices
 from apps.tenant.notices.models import Notices
 from apps.tenant.notices.serializers import NoticesWXSerializer
 from apps.tenant.notices.serializers import NoticesWXSerializer
@@ -19,7 +19,7 @@ from utils.permission import isLogin, IsTenantUser
 from utils.wx.WXBizDataCrypt import WXBizDataCrypt
 from utils.wx.WXBizDataCrypt import WXBizDataCrypt
 from apps.tenant.poster.serializer import PosterSerializer, Poster
 from apps.tenant.poster.serializer import PosterSerializer, Poster
 from apps.tenant.device.models import DeviceModel
 from apps.tenant.device.models import DeviceModel
-from apps.tenant.repair_order.models import RepairOrder,RepairOrderComment
+from apps.tenant.repair_order.models import RepairOrder, RepairOrderComment
 from .serializers import *
 from .serializers import *
 
 
 class CustomerRefreshTokenView(RefreshJSONWebToken):
 class CustomerRefreshTokenView(RefreshJSONWebToken):
@@ -99,10 +99,10 @@ class HomeStatisticsView(APIView):
 
 
     def get(self, request):
     def get(self, request):
         statistics = {
         statistics = {
-            'total':0, #总报修
-            'wait':0, #待维修
-            'working':0, #维修中
-            'complete':0, #已完工
+            'total': 0,  # 总报修
+            'wait': 0,  # 待维修
+            'working': 0,  # 维修中
+            'complete': 0,  # 已完工
         }
         }
         if request.user and request.user.is_authenticated:
         if request.user and request.user.is_authenticated:
             tenant = request.user.employee.tenant
             tenant = request.user.employee.tenant
@@ -110,26 +110,28 @@ class HomeStatisticsView(APIView):
             statistics['total'] = rows.filter(status__gte=RepairOrder.CHECKED).count()
             statistics['total'] = rows.filter(status__gte=RepairOrder.CHECKED).count()
             statistics['wait'] = rows.filter(status=RepairOrder.CHECKED).count()
             statistics['wait'] = rows.filter(status=RepairOrder.CHECKED).count()
             statistics['working'] = rows.filter(status=RepairOrder.DISPATCH).count()
             statistics['working'] = rows.filter(status=RepairOrder.DISPATCH).count()
-            statistics['complete'] = rows.filter(status__in=[RepairOrder.FINISH,RepairOrder.APPRAISE,]).count()
+            statistics['complete'] = rows.filter(status__in=[RepairOrder.FINISH, RepairOrder.APPRAISE, ]).count()
             return response_ok(statistics)
             return response_ok(statistics)
         else:
         else:
             return response_ok(statistics)
             return response_ok(statistics)
 
 
+
 class StatisticsRepairView(APIView):
 class StatisticsRepairView(APIView):
     '''小程序统计数据'''
     '''小程序统计数据'''
     permission_classes = [IsTenantUser, ]
     permission_classes = [IsTenantUser, ]
+
     def get(self, request):
     def get(self, request):
-        days = int(request.GET.get('days')) # 7 30 365
-        data = []# 报修数据
+        days = int(request.GET.get('days'))  # 7 30 365
+        data = []  # 报修数据
         tenant = request.user.employee.tenant
         tenant = request.user.employee.tenant
         now = timezone.now()
         now = timezone.now()
-        rows = RepairOrder.objects.filter(tenant=tenant,status__gte=RepairOrder.CHECKED)
+        rows = RepairOrder.objects.filter(tenant=tenant, status__gte=RepairOrder.CHECKED)
         if days < 31:
         if days < 31:
             for d in range(days):
             for d in range(days):
                 date = (now + datetime.timedelta(days=-d)).strftime('%Y-%m-%d')
                 date = (now + datetime.timedelta(days=-d)).strftime('%Y-%m-%d')
                 item = {
                 item = {
-                    'title':date[5:],
-                    'data':rows.filter(create_time__gte=date,create_time__lte=date+' 23:59:59').count(),
+                    'title': date[5:],
+                    'data': rows.filter(create_time__gte=date, create_time__lte=date + ' 23:59:59').count(),
                 }
                 }
                 data.append(item)
                 data.append(item)
             data = data[::-1]
             data = data[::-1]
@@ -168,7 +170,7 @@ class StatisticsRepairView(APIView):
                 month = int(year_month[1])
                 month = int(year_month[1])
                 item = {
                 item = {
                     'title': year_months,
                     'title': year_months,
-                    'data':rows.filter(create_time__year=year, create_time__month=month).count(),
+                    'data': rows.filter(create_time__year=year, create_time__month=month).count(),
                 }
                 }
                 data.append(item)
                 data.append(item)
         return response_ok(data)
         return response_ok(data)
@@ -176,21 +178,22 @@ class StatisticsRepairView(APIView):
 class StatisticsEvaluateView(APIView):
 class StatisticsEvaluateView(APIView):
     '''小程序评价统计数据'''
     '''小程序评价统计数据'''
     permission_classes = [IsTenantUser, ]
     permission_classes = [IsTenantUser, ]
+
     def get(self, request):
     def get(self, request):
-        days = int(request.GET.get('days')) # 7 30 365
-        data = []# 评价数据
+        days = int(request.GET.get('days'))  # 7 30 365
+        data = []  # 评价数据
         tenant = request.user.employee.tenant
         tenant = request.user.employee.tenant
         now = timezone.now()
         now = timezone.now()
         date = (now + datetime.timedelta(days=-days)).strftime('%Y-%m-%d')
         date = (now + datetime.timedelta(days=-days)).strftime('%Y-%m-%d')
         # 分组统计分析
         # 分组统计分析
-        rows = RepairOrderComment.objects.filter(repair_order__tenant=tenant,create_time__gte=date,) \
+        rows = RepairOrderComment.objects.filter(repair_order__tenant=tenant, create_time__gte=date, ) \
             .values('repair_user_id') \
             .values('repair_user_id') \
-            .annotate(starts=Sum('start'),count=Count('id')) \
+            .annotate(starts=Sum('start'), count=Count('id')) \
             .values('repair_user__employee__name', 'starts', 'count')
             .values('repair_user__employee__name', 'starts', 'count')
         for row in rows:
         for row in rows:
             item = {
             item = {
-                'title':row['repair_user__employee__name'],
-                'data':round(float(row['starts']) / float(row['count']),2),
+                'title': row['repair_user__employee__name'],
+                'data': round(float(row['starts']) / float(row['count']), 2),
             }
             }
             data.append(item)
             data.append(item)
         data.sort(key=lambda d: d['data'], reverse=True)
         data.sort(key=lambda d: d['data'], reverse=True)
@@ -222,17 +225,22 @@ class PosterView(generics.ListAPIView):
 
 
 class DictView(APIView):
 class DictView(APIView):
     permission_classes = [isLogin, ]
     permission_classes = [isLogin, ]
+
     def get(self, request):
     def get(self, request):
         tenant = request.user.employee.tenant
         tenant = request.user.employee.tenant
         ret = {
         ret = {
-            'repair_type': OptionSerializer(Option.objects.filter(delete=False,type=Option.REPAIRS_TYPE, enable=True, tenant=tenant), many=True).data,
-            'fault_cause': OptionSerializer(Option.objects.filter(delete=False,type=Option.FAULT_CAUSE, enable=True, tenant=tenant), many=True).data,
+            'repair_type': OptionSerializer(
+                Option.objects.filter(delete=False, type=Option.REPAIRS_TYPE, enable=True, tenant=tenant),
+                many=True).data,
+            'fault_cause': OptionSerializer(
+                Option.objects.filter(delete=False, type=Option.FAULT_CAUSE, enable=True, tenant=tenant),
+                many=True).data,
         }
         }
         return response_ok(ret)
         return response_ok(ret)
 
 
 
 
 class NoticesView(generics.ListAPIView):
 class NoticesView(generics.ListAPIView):
-    queryset = Notices.objects.filter(type=Notices.NOTICE,end_time__gte=timezone.now().date())
+    queryset = Notices.objects.filter(type=Notices.NOTICE, end_time__gte=timezone.now().date())
     serializer_class = NoticesWXSerializer
     serializer_class = NoticesWXSerializer
 
 
     def filter_queryset(self, queryset):
     def filter_queryset(self, queryset):
@@ -258,7 +266,7 @@ class NoticesDetailView(generics.RetrieveAPIView):
         return response_ok(NoticesWXSerializer(self.get_object()).data)
         return response_ok(NoticesWXSerializer(self.get_object()).data)
 
 
 class MessageView(generics.ListAPIView):
 class MessageView(generics.ListAPIView):
-    queryset = Notices.objects.filter(type=Notices.MESSAGE,end_time__gte=timezone.now().date())
+    queryset = Notices.objects.filter(type=Notices.MESSAGE, end_time__gte=timezone.now().date())
     serializer_class = NoticesWXSerializer
     serializer_class = NoticesWXSerializer
 
 
     def filter_queryset(self, queryset):
     def filter_queryset(self, queryset):
@@ -271,6 +279,7 @@ class MessageView(generics.ListAPIView):
         f = NoticesFilter(self.request.GET, queryset=queryset)
         f = NoticesFilter(self.request.GET, queryset=queryset)
         return f.qs
         return f.qs
 
 
+
 class MessageListView(generics.ListAPIView):
 class MessageListView(generics.ListAPIView):
     permission_classes = [IsTenantUser, ]
     permission_classes = [IsTenantUser, ]
     queryset = Notices.objects.filter(type=Notices.MESSAGE)
     queryset = Notices.objects.filter(type=Notices.MESSAGE)
@@ -281,12 +290,27 @@ class MessageListView(generics.ListAPIView):
         f = NoticesFilter(self.request.GET, queryset=queryset)
         f = NoticesFilter(self.request.GET, queryset=queryset)
         return f.qs
         return f.qs
 
 
+
 class DeviceView(APIView):
 class DeviceView(APIView):
     permission_classes = [isLogin, ]
     permission_classes = [isLogin, ]
+
     def get(self, request):
     def get(self, request):
         param = request.GET.get('param')
         param = request.GET.get('param')
+        device_id = request.GET.get('device_id')
         data = []
         data = []
         rows = DeviceModel.objects.filter(tenant=request.user.employee.tenant)
         rows = DeviceModel.objects.filter(tenant=request.user.employee.tenant)
+        if device_id:
+            item = rows.filter(id=device_id).first()
+            if item:
+                data = {
+                    'id': item.id,
+                    'name': item.name,
+                    'address': '{}{}'.format(item.branch, item.address),
+                }
+                return response_ok(data)
+            else:
+                return response_error('设备信息错误,请重新查询!')
+
         if param:
         if param:
             rows = rows.filter(Q(name=param) | Q(device_no=param) | Q(device_model=param))
             rows = rows.filter(Q(name=param) | Q(device_no=param) | Q(device_model=param))
         else:
         else:
@@ -294,11 +318,11 @@ class DeviceView(APIView):
         for item in rows:
         for item in rows:
             build_dict = {
             build_dict = {
                 'id': item.id,
                 'id': item.id,
-                'name':item.name,
-                'device_no':item.device_no,
-                'device_model':item.device_model,
-                'branch':item.branch,
-                'address':item.address,
+                'name': item.name,
+                'device_no': item.device_no,
+                'device_model': item.device_model,
+                'branch': item.branch,
+                'address': item.address,
             }
             }
             data.append(build_dict)
             data.append(build_dict)
 
 

+ 2 - 2
utils/wx/wechat.py

@@ -247,10 +247,10 @@ class WeChat(object):
         return filename
         return filename
 
 
     @staticmethod
     @staticmethod
-    def getDeviceCode(access_token, page, device_id):
+    def getDeviceCode(access_token, page, device_id, company_no):
         '''获取设备二维码'''
         '''获取设备二维码'''
         url = 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={}'.format(access_token)
         url = 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={}'.format(access_token)
-        data = {"scene": "device_id={}".format(device_id),
+        data = {"scene": "company_no={}&device_id={}".format(company_no, device_id),
                 "width": 1280,
                 "width": 1280,
                 "line_color": {"r": 43, "g": 162, "b": 69},  # 自定义颜色
                 "line_color": {"r": 43, "g": 162, "b": 69},  # 自定义颜色
                 "is_hyaline": True}
                 "is_hyaline": True}