Эх сурвалжийг харах

vue-新增 设备管理、版本管理

chenshibin 3 жил өмнө
parent
commit
93f246590c

+ 126 - 0
AdminController/DeviceManagementController.py

@@ -0,0 +1,126 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+from Object.ResponseObject import ResponseObject
+from Object.TokenObject import TokenObject
+from django.views.generic.base import View
+from Service.ModelService import ModelService
+from Service.CommonService import CommonService
+from Model.models import Device_Info
+import datetime
+from django.utils import timezone
+
+class DeviceManagement(View):
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.GET, request, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.POST, request, operation)
+
+    def validation(self, request_dict, request, operation):
+        language = request_dict.get('language', 'en')
+        response = ResponseObject(language, 'pc')
+        tko = TokenObject(
+            request.META.get('HTTP_AUTHORIZATION'),
+            returntpye='pc')
+        if tko.code != 0:
+            return response.json(tko.code)
+        response.lang = tko.lang
+        userID = tko.userID
+        if userID is not None:
+            if operation == 'query':
+                return self.query(request_dict, userID, response)
+            elif operation == 'findByUser':
+                return self.findByUser(request_dict, userID, response)
+            elif operation == 'delete':
+                return self.delete(request_dict, userID, response)
+        return response.json(444, 'operation')
+
+
+    def query(self, request_dict, userID, response):
+        own_perm = ModelService.check_perm(userID=userID, permID=30)
+        if not own_perm :
+            return response.json(404)
+
+        pageNo = request_dict.get('pageNo', None)
+        pageSize = request_dict.get('pageSize', None)
+        if not all([pageNo, pageSize]):
+            return response.json(444)
+
+        page = int(pageNo)
+        line = int(pageSize)
+
+        queryset = Device_Info.objects.all()
+        if queryset.exists():
+            count = queryset.count()
+            res = queryset[(page - 1) * line:page * line]
+            send_dict = CommonService.qs_to_dict(res)
+            for k, v in enumerate(send_dict["datas"]):
+                for val in res:
+                    if v['pk'] == val.id:
+                        if send_dict["datas"][k]['fields']['Online'] is True:
+                            dl_time = val.update_time+datetime.timedelta(minutes=60)
+                            now_time = timezone.localtime(timezone.now())
+                            if now_time > dl_time:
+                                pass
+                                # send_dict["datas"][k]['fields']['Online'] = False
+                        username= ModelService.get_user_name(send_dict["datas"][k]['fields']['userID'])
+                        send_dict["datas"][k]['fields']['username']=username
+                        primary= ModelService.get_user_name(send_dict["datas"][k]['fields']['primaryUserID'])
+                        send_dict["datas"][k]['fields']['primaryusername']=primary
+            return response.json(
+                0, {'list': send_dict, 'total': count})
+        return response.json(0,{'count':0})
+
+
+
+    def delete(self, request_dict, userID, response):
+        own_perm = ModelService.check_perm(userID=userID, permID=10)
+        # redisObj = RedisObject(db=8)
+        # redisObj.del_data(key='uid_qs_' + userID)
+        if own_perm is True:
+            id = request_dict.get('id', None)
+            if id:
+                Device_Info.objects.filter(id=id).delete()
+                return response.json(0)
+            else:
+                return response.json(444,'id must list')
+        else:
+            return response.json(404)
+
+    def findByUser(self, request_dict, userID, response):
+        own_perm = ModelService.check_perm(userID=userID, permID=30)
+        if own_perm is True:
+            page = int(request_dict.get('page', None))
+            line = int(request_dict.get('line', None))
+            username = request_dict.get('username', None)
+            param_flag = CommonService.get_param_flag(data=[page, line, username])
+            if param_flag is True:
+                userID_id= ModelService.get_userID_byname(username=username)
+                print(userID_id)
+                queryset = Device_Info.objects.filter(userID_id=userID_id)
+                if queryset.exists():
+                    count = queryset.count()
+                    res = queryset[(page - 1) * line:page * line]
+                    send_dict = CommonService.qs_to_dict(res)
+                    for k, v in enumerate(send_dict["datas"]):
+                        for val in res:
+                            if v['pk'] == val.id:
+                                if send_dict["datas"][k]['fields']['Online'] is True:
+                                    dl_time = val.update_time + datetime.timedelta(minutes=1)
+                                    now_time = timezone.localtime(timezone.now())
+                                    if now_time > dl_time:
+                                        send_dict["datas"][k]['fields']['Online'] = False
+                                send_dict["datas"][k]['fields']['username']=username
+                                primary= ModelService.get_user_name(send_dict["datas"][k]['fields']['primaryUserID'])
+                                send_dict["datas"][k]['fields']['primaryusername']=primary
+                    send_dict['count'] = count
+                    return response.json(0, send_dict)
+                return response.json(0,{'count':0})
+            else:
+                return response.json(444)
+        else:
+            return response.json(404)

+ 274 - 0
AdminController/NewVersionController.py

@@ -0,0 +1,274 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+import hashlib
+import json
+import os
+import time
+import urllib
+import uuid
+import boto3
+import threading
+import logging
+
+import xlwt
+from boto3.session import Session
+from django.http import JsonResponse, HttpResponseRedirect, HttpResponse, StreamingHttpResponse
+from django.views.generic.base import View
+
+from Ansjer.config import BASE_DIR, SERVER_DOMAIN
+from Model.models import Device_Info, Role, MenuModel, VodBucketModel, CDKcontextModel, Store_Meal, Order_Model, \
+    UID_Bucket, ExperienceContextModel, Lang, Device_User, CloudLogModel, UidSetModel, Equipment_Version, \
+    EquipmentVersionLimitModel
+from Object.RedisObject import RedisObject
+from Object.ResponseObject import ResponseObject
+from Object.TokenObject import TokenObject
+from Object.UidTokenObject import UidTokenObject
+from Object.UrlTokenObject import UrlTokenObject
+from Service.CommonService import CommonService
+from django.db.models import Q, F
+from time import strftime
+
+
+class NewVersionManagement(View):
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.GET, request, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.POST, request, operation)
+
+    def validation(self, request_dict, request, operation):
+        language = request_dict.get('language', 'en')
+        response = ResponseObject(language, 'pc')
+        tko = TokenObject(
+            request.META.get('HTTP_AUTHORIZATION'),
+            returntpye='pc')
+        if tko.code != 0:
+            return response.json(tko.code)
+        response.lang = tko.lang
+        userID = tko.userID
+        if operation == 'query':
+            return self.do_query(request_dict, response)
+        if operation == 'update':
+            return self.do_update(request_dict, response, request)
+        if operation == 'filter':
+            return self.do_filter(request_dict, response)
+        else:
+            return response.json(404)
+
+
+    def do_update(self, request_dict, response, request):
+        code = request_dict.get('code', None)
+        status = request_dict.get('status', None)
+        lang = request_dict.get('lang', None)
+        max_ver = request_dict.get('max_ver', None)
+        file_s = request.FILES.get('file', None)
+        paths = 'static/versions/image'
+        if not os.path.exists(paths):
+            os.makedirs(paths)  # makedirs 创建文件时如果路径不存在会创建这个路径
+            # print ('该文件不存在')
+        else:
+            print('该文件存在')
+        ev = Equipment_Version.objects.filter(code=code, lang=lang)
+        if file_s is None:
+            rv_path = 'static/versions/image/' + code + '.png'
+            img = SERVER_DOMAIN + 'sysfile/' + rv_path
+        else:
+            rv_path = 'static/versions/image/' + code + '.png'
+            try:
+                as_path = os.path.join(BASE_DIR, rv_path)
+                if os.path.exists(as_path):
+                    os.remove(as_path)
+                with open(as_path, 'wb+') as destination:
+                    for chunk in file_s.chunks():
+                        destination.write(chunk)
+            except Exception as e:
+                pass
+            else:
+                img = SERVER_DOMAIN + 'sysfile/' + rv_path
+        if code is not None:
+
+            if ev.exists():
+                try:
+                    update_time = time.timezone.localtime(time.timezone.now())
+                    update_dict = {
+                        'status': status,
+                        'img': img,
+                        'update_time': update_time
+                    }
+                    if max_ver:
+                        update_dict['max_ver'] = max_ver
+                    ev.update(**update_dict)
+                except Exception as e:
+                    return response.json(404, repr(e))
+                else:
+                    return response.json(0, {'update_time': str(update_time), 'img': img})
+            else:
+                return response.json(173)
+        else:
+            return response.json(444, 'code')
+
+    def do_check_ver(self, request_dict, response):
+        code = request_dict.get('code', None)
+        ov = request_dict.get('ov', None)
+        uid = request_dict.get('uid', '')
+        if not code:
+            return response.json(444, 'code')
+        eqs = Equipment_Version.objects.filter(code=uid, status=1, lang='en').order_by('-data_joined')
+        if not eqs.exclude():
+            eqs = Equipment_Version.objects.filter(code=code, status=1, lang='en').order_by('-data_joined')
+        if not eqs.exists():
+            return response.json(900)
+        if ov is not None:
+            # 判断大小
+            if ov > eqs[0].softwareVersion:
+                return response.json(0, {'softwareVersion': ov})
+        file_path = eqs[0].filePath
+        if file_path.find('static/Upgrade/') != -1:
+            path = file_path.replace('static/Upgrade/', '').replace('\\', '/')
+            url = SERVER_DOMAIN + 'OTA/downloads/' + path + '?time=' + str(time.time())
+        elif file_path.find('static/otapack') != -1:
+            url = SERVER_DOMAIN + 'OTA/downloadsPack/' + file_path + '?time=' + str(time.time())
+            # url = SERVER_DOMAIN + 'dl/otaPack/' + file_path + '?time=' + str(time.time())
+        else:
+            return response.json(900, '2')
+        res = {
+            "url": url,
+            "fileSize": eqs[0].fileSize,
+            "Description": eqs[0].Description,
+            "softwareVersion": eqs[0].softwareVersion
+        }
+        return response.json(0, res)
+
+    # 修改加密的路径
+    def do_check_value(self, request_dict, response):
+        code = request_dict.get('code', None)
+        ov = request_dict.get('ov', None)
+        uid = request_dict.get('uid', '')
+        if not code:
+            return response.json(444, 'code')
+        eqs = Equipment_Version.objects.filter(code=uid, status=1, lang='en').order_by('-data_joined')
+
+        if not eqs.exclude():
+            eqs = Equipment_Version.objects.filter(code=code, status=1, lang='en').order_by('-data_joined')
+        if not eqs.exists():
+            return response.json(900)
+        if ov is not None:
+            # 判断大小
+            if ov > eqs[0].softwareVersion:
+                return response.json(0, {'softwareVersion': ov})
+        equipment = eqs[0]
+        redisObject = RedisObject()
+        key = 'limit_{eid}'.format(eid=equipment.eid)
+
+        evl_qs = redisObject.get_data(key=key)
+        if evl_qs:
+            evl_qs = json.loads(evl_qs)
+        else:
+            evl_qs = EquipmentVersionLimitModel.objects.filter(equipment_version_id=equipment.eid,
+                                                               status=1).values()
+            if evl_qs.exists():
+                redisObject.set_data(key=key, val=json.dumps(list(evl_qs.values())), expire=600)
+        if evl_qs and len(evl_qs) > 0:
+            evl = evl_qs[0]
+            if evl['type'] == 1:  # uid限制
+                uids = json.loads(evl['content'])
+                if not uids.__contains__(uid):
+                    return response.json(902)
+        file_path = eqs[0].filePath
+        if file_path.find('static/Upgrade/') != -1:
+            path = file_path.replace('static/Upgrade/', '').replace('\\', '/')
+            # 创建url的token
+            tko = UrlTokenObject()
+            path = tko.generate(data={'Url': "ansjer/" + CommonService.RandomStr(6) + "/" + file_path})
+
+            url = SERVER_DOMAIN + 'OTA/downloads/' + path
+        elif file_path.find('static/otapack') != -1:
+            file_path = file_path
+            # 创建url的token
+            tko = UrlTokenObject()
+            file_path = tko.generate(data={'Url': "ansjer/" + CommonService.RandomStr(6) + "/" + file_path})
+
+            url = SERVER_DOMAIN + 'dlotapack/' + file_path
+        else:
+            return response.json(900, '2')
+        # http: // 192.168.136.39:8000 / EquipmentVersion / checkVer?code = 20D20410010
+
+        res = {
+            "url": url,
+            "fileSize": eqs[0].fileSize,
+            "Description": eqs[0].Description,
+            "softwareVersion": eqs[0].softwareVersion
+        }
+        print(url)
+        return response.json(0, res)
+ 
+    def do_query(self, request_dict, response):
+        mci = request_dict.get('mci', None)
+        page = request_dict.get('page', None)
+        line = request_dict.get('line', None)
+        code = request_dict.get('code', None)
+        if not page or not line:
+            return response.json(444, 'page,line')
+        else:
+            page = int(page)
+            line = int(line)
+        cv_qs = Equipment_Version.objects
+        if mci is not None:
+            cv_qs = cv_qs.filter(mci=mci)
+        if code is not None:
+            cv_qs = cv_qs.filter(code__contains=code)
+        cv_qs = cv_qs.order_by('code').values_list('code', flat=True).distinct()
+        print(cv_qs)
+        count = cv_qs.count()
+        cv_qs = list(cv_qs[(page - 1) * line:page * line])
+        # return response.json(0, cv_qs)
+        ev_qs = Equipment_Version.objects.filter(code__in=list(cv_qs)).values()
+        ev_list = CommonService.qs_to_list(ev_qs)
+        datas = {}
+        # 组装数据
+        for ev in ev_list:
+            for code in cv_qs:
+                if code not in datas.keys():
+                    datas[code] = []
+                if code == ev['code']:
+                    datas[code].append(ev)
+        res = {
+            'datas': datas,
+            'count': count
+        }
+        return response.json(0, res)
+
+    def do_filter(self, request_dict, response):
+        mci = request_dict.get('mci', None)
+        page = request_dict.get('page', None)
+        line = request_dict.get('line', None)
+        code = request_dict.get('code', None)
+        lang = request_dict.get('lang', None)
+        if not page or not line:
+            return response.json(444, 'page,line')
+        else:
+            page = int(page)
+            line = int(line)
+        ev_qs = Equipment_Version.objects
+        if mci:
+            ev_qs = ev_qs.filter(mci=mci)
+        if code:
+            ev_qs = ev_qs.filter(code__contains=code)
+        if lang:
+            if lang == 'cn' or lang == 'zh-Hans':
+                ev_qs = ev_qs.filter(Q(lang='cn') | Q(lang='zh-Hans'))
+            else:
+                ev_qs = ev_qs.filter(lang=lang)
+
+        count = ev_qs.count()
+        ev_qs = ev_qs[(page - 1) * line:page * line].values()
+        ev_ls = CommonService.qs_to_list(ev_qs)
+        res = {
+            'datas': ev_ls,
+            'count': count
+        }
+        return response.json(0, res)

+ 5 - 1
Ansjer/urls.py

@@ -20,7 +20,7 @@ from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppIn
     RegionController, VPGController, LanguageController, TestController, DeviceConfirmRegion, S3GetStsController, \
     RegionController, VPGController, LanguageController, TestController, DeviceConfirmRegion, S3GetStsController, \
     DetectControllerV2, ShadowController, TestDetectController, PcInfo, PctestController, DeviceDebug
     DetectControllerV2, ShadowController, TestDetectController, PcInfo, PctestController, DeviceDebug
 from AdminController import UserManageController, RoleController, MenuController, TestServeController, \
 from AdminController import UserManageController, RoleController, MenuController, TestServeController, \
-    ServeManagementController, LogManagementController
+    ServeManagementController, LogManagementController, DeviceManagementController, NewVersionController
 
 
 urlpatterns = [
 urlpatterns = [
     url(r'^testApi/(?P<operation>.*)$', TestApi.testView.as_view()),
     url(r'^testApi/(?P<operation>.*)$', TestApi.testView.as_view()),
@@ -355,6 +355,10 @@ urlpatterns = [
 
 
     # 菜单管理
     # 菜单管理
     re_path('menuManagement/(?P<operation>.*)', MenuController.MenuView.as_view()),
     re_path('menuManagement/(?P<operation>.*)', MenuController.MenuView.as_view()),
+    # 设备管理
+    re_path('deviceManagement/(?P<operation>.*)', DeviceManagementController.DeviceManagement.as_view()),
+    # 版本管理
+    re_path('versionManagement/(?P<operation>.*)', NewVersionController.NewVersionManagement.as_view()),
     # 服务管理
     # 服务管理
     re_path('serveManagement/(?P<operation>.*)', ServeManagementController.serveManagement.as_view()),
     re_path('serveManagement/(?P<operation>.*)', ServeManagementController.serveManagement.as_view()),
     # 测试服务
     # 测试服务