فهرست منبع

设备二维码

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)
         return filename
 
-    def getDeviceCode(self, device_id):
+    def getDeviceCode(self, device_id, company_no):
         page = 'pages/index/index'
-        filename = WeChat.getDeviceCode(self.getAccessToken(),page, device_id)
+        filename = WeChat.getDeviceCode(self.getAccessToken(),page, device_id, company_no)
         return filename

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

@@ -19,7 +19,7 @@ class DeviceSerializer(serializers.ModelSerializer):
 
         id = instance.id
         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.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 import generics
 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 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 apps.tenant.notices.models import Notices
 from apps.tenant.notices.serializers import NoticesWXSerializer
@@ -19,7 +19,7 @@ from utils.permission import isLogin, IsTenantUser
 from utils.wx.WXBizDataCrypt import WXBizDataCrypt
 from apps.tenant.poster.serializer import PosterSerializer, Poster
 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 *
 
 class CustomerRefreshTokenView(RefreshJSONWebToken):
@@ -99,10 +99,10 @@ class HomeStatisticsView(APIView):
 
     def get(self, request):
         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:
             tenant = request.user.employee.tenant
@@ -110,26 +110,28 @@ class HomeStatisticsView(APIView):
             statistics['total'] = rows.filter(status__gte=RepairOrder.CHECKED).count()
             statistics['wait'] = rows.filter(status=RepairOrder.CHECKED).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)
         else:
             return response_ok(statistics)
 
+
 class StatisticsRepairView(APIView):
     '''小程序统计数据'''
     permission_classes = [IsTenantUser, ]
+
     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
         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:
             for d in range(days):
                 date = (now + datetime.timedelta(days=-d)).strftime('%Y-%m-%d')
                 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 = data[::-1]
@@ -168,7 +170,7 @@ class StatisticsRepairView(APIView):
                 month = int(year_month[1])
                 item = {
                     '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)
         return response_ok(data)
@@ -176,21 +178,22 @@ class StatisticsRepairView(APIView):
 class StatisticsEvaluateView(APIView):
     '''小程序评价统计数据'''
     permission_classes = [IsTenantUser, ]
+
     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
         now = timezone.now()
         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') \
-            .annotate(starts=Sum('start'),count=Count('id')) \
+            .annotate(starts=Sum('start'), count=Count('id')) \
             .values('repair_user__employee__name', 'starts', 'count')
         for row in rows:
             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.sort(key=lambda d: d['data'], reverse=True)
@@ -222,17 +225,22 @@ class PosterView(generics.ListAPIView):
 
 class DictView(APIView):
     permission_classes = [isLogin, ]
+
     def get(self, request):
         tenant = request.user.employee.tenant
         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)
 
 
 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
 
     def filter_queryset(self, queryset):
@@ -258,7 +266,7 @@ class NoticesDetailView(generics.RetrieveAPIView):
         return response_ok(NoticesWXSerializer(self.get_object()).data)
 
 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
 
     def filter_queryset(self, queryset):
@@ -271,6 +279,7 @@ class MessageView(generics.ListAPIView):
         f = NoticesFilter(self.request.GET, queryset=queryset)
         return f.qs
 
+
 class MessageListView(generics.ListAPIView):
     permission_classes = [IsTenantUser, ]
     queryset = Notices.objects.filter(type=Notices.MESSAGE)
@@ -281,12 +290,27 @@ class MessageListView(generics.ListAPIView):
         f = NoticesFilter(self.request.GET, queryset=queryset)
         return f.qs
 
+
 class DeviceView(APIView):
     permission_classes = [isLogin, ]
+
     def get(self, request):
         param = request.GET.get('param')
+        device_id = request.GET.get('device_id')
         data = []
         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:
             rows = rows.filter(Q(name=param) | Q(device_no=param) | Q(device_model=param))
         else:
@@ -294,11 +318,11 @@ class DeviceView(APIView):
         for item in rows:
             build_dict = {
                 '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)
 

+ 2 - 2
utils/wx/wechat.py

@@ -247,10 +247,10 @@ class WeChat(object):
         return filename
 
     @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)
-        data = {"scene": "device_id={}".format(device_id),
+        data = {"scene": "company_no={}&device_id={}".format(company_no, device_id),
                 "width": 1280,
                 "line_color": {"r": 43, "g": 162, "b": 69},  # 自定义颜色
                 "is_hyaline": True}