瀏覽代碼

Merge branch 'dev'

lang 3 年之前
父節點
當前提交
0f470318d3

+ 90 - 48
AdminController/DeviceManagementController.py

@@ -1,11 +1,16 @@
 #!/usr/bin/env python3
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
+import json
+import time
+
+from django.db import transaction
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 from django.views.generic.base import View
 from django.views.generic.base import View
 from Service.ModelService import ModelService
 from Service.ModelService import ModelService
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
-from Model.models import Device_Info
+from Model.models import Device_Info, UidSetModel, LogModel, UID_Bucket, Unused_Uid_Meal, Order_Model, StsCrdModel, \
+    VodHlsModel, ExperienceContextModel
 import datetime
 import datetime
 from django.utils import timezone
 from django.utils import timezone
 
 
@@ -37,6 +42,12 @@ class DeviceManagement(View):
                 return self.findByUser(request_dict, userID, response)
                 return self.findByUser(request_dict, userID, response)
             elif operation == 'delete':
             elif operation == 'delete':
                 return self.delete(request_dict, userID, response)
                 return self.delete(request_dict, userID, response)
+            elif operation == 'uidSetQuery':
+                return self.uidSetQuery(request_dict, userID, response)
+            elif operation == 'vod_reset':
+                return self.vod_reset(request, request_dict, response)
+            elif operation == 'primary_user_reset':
+                return self.primary_user_reset(request, request_dict, response)
         return response.json(444, 'operation')
         return response.json(444, 'operation')
 
 
 
 
@@ -56,7 +67,7 @@ class DeviceManagement(View):
 
 
         queryset = Device_Info.objects.all()
         queryset = Device_Info.objects.all()
         if UID:
         if UID:
-            queryset = queryset.filter(UID=UID)
+            queryset = queryset.filter(UID__contains=UID)
         if queryset.exists():
         if queryset.exists():
             count = queryset.count()
             count = queryset.count()
             res = queryset[(page - 1) * line:page * line]
             res = queryset[(page - 1) * line:page * line]
@@ -76,54 +87,85 @@ class DeviceManagement(View):
                         send_dict["datas"][k]['fields']['primaryusername']=primary
                         send_dict["datas"][k]['fields']['primaryusername']=primary
             return response.json(
             return response.json(
                 0, {'list': send_dict, 'total': count})
                 0, {'list': send_dict, 'total': count})
-        return response.json(0,{'count':0})
+        return response.json(
+            0, {'list': {}, 'total': 0})
 
 
+    # 管理员查询接口
+    def uidSetQuery(self, request_dict, userID, response):
 
 
+        pageNo = request_dict.get('pageNo', None)
+        pageSize = request_dict.get('pageSize', None)
+        UID = request_dict.get('UID', None)
+        if not all([pageNo, pageSize]):
+            return response.json(444)
 
 
-    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)
+        page = int(pageNo)
+        line = int(pageSize)
 
 
-    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})
+        omqs = UidSetModel.objects.all().order_by('-id')
+        if UID:
+            omqs = omqs.filter(uid__contains=UID)
+        count = omqs.count()
+        order_ql = omqs[(page - 1) * line:page * line]
+        uidset_json = CommonService.qs_to_dict(order_ql)
+        uidset_json['count'] = count
+        return response.json(
+            0, {'list': uidset_json, 'total': count})
+
+    # 重置设备云存
+    def vod_reset(self, request, request_dict, response):
+        uid = request_dict.get('uid', None)
+        if uid:
+            try:
+                # 记录操作日志
+                ip = CommonService.get_ip_address(request)
+                content = json.loads(json.dumps(request_dict))
+                log = {
+                    'ip': ip,
+                    'user_id': 1,
+                    'status': 200,
+                    'time': int(datetime.time.time()),
+                    'url': 'uidset/vod_reset',
+                    'content': json.dumps(content),
+                    'operation': '{}重置设备云存'.format(uid),
+                }
+                with transaction.atomic():
+                    LogModel.objects.create(**log)
+                    # 删除和更新设备云存相关数据
+                    UID_Bucket.objects.filter(uid=uid).delete()
+                    Unused_Uid_Meal.objects.filter(uid=uid).delete()
+                    Order_Model.objects.filter(UID=uid).delete()
+                    StsCrdModel.objects.filter(uid=uid).delete()
+                    VodHlsModel.objects.filter(uid=uid).delete()
+                    ExperienceContextModel.objects.filter(uid=uid).delete()
+                    # UIDMainUser.objects.filter(UID=uid).delete()
+                    Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')
+            except Exception as e:
+                print(e)
+                return response.json(500, repr(e))
             else:
             else:
-                return response.json(444)
-        else:
-            return response.json(404)
+                return response.json(0)
+
+    # 重置设备主用户
+    def primary_user_reset(self, request, request_dict, response):
+        uid = request_dict.get('uid', None)
+        if not uid:
+            return response.json(404)
+        try:
+            # 记录操作日志
+            ip = CommonService.get_ip_address(request)
+            content = json.loads(json.dumps(request_dict))
+            log = {
+                'ip': ip,
+                'user_id': 1,
+                'status': 200,
+                'time': int(time.time()),
+                'url': 'uidset/primary_user_reset',
+                'content': json.dumps(content),
+                'operation': '{}重置设备主用户'.format(uid),
+            }
+            LogModel.objects.create(**log)
+            Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')
+            return response.json(0)
+        except Exception as e:
+            return response.json(500, repr(e))

+ 133 - 3
AdminController/UserManageController.py

@@ -21,6 +21,7 @@ import simplejson
 import simplejson as json
 import simplejson as json
 import requests
 import requests
 from django.contrib.auth.hashers import make_password, check_password  # 对密码加密模块
 from django.contrib.auth.hashers import make_password, check_password  # 对密码加密模块
+from django.db import transaction
 from django.db.models import Q
 from django.db.models import Q
 from django.http import HttpResponseRedirect
 from django.http import HttpResponseRedirect
 from django.utils.decorators import method_decorator
 from django.utils.decorators import method_decorator
@@ -34,7 +35,8 @@ from Ansjer.config import AuthCode_Expire, SERVER_DOMAIN, APNS_CONFIG, JPUSH_CON
     OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET
     OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET
 from Controller.CheckUserData import DataValid, date_handler, RandomStr
 from Controller.CheckUserData import DataValid, date_handler, RandomStr
 from Model.models import Device_User, Role, UidPushModel, UserOauth2Model, UserExModel, Device_Info, UidSetModel, \
 from Model.models import Device_User, Role, UidPushModel, UserOauth2Model, UserExModel, Device_Info, UidSetModel, \
-    UserAppFrequencyModel, CountryIPModel, CountryModel, UidChannelSetModel, MenuModel, FeedBackModel, StatResModel
+    UserAppFrequencyModel, CountryIPModel, CountryModel, UidChannelSetModel, MenuModel, FeedBackModel, StatResModel, \
+    SysMassModel, App_Info, SysMsgModel
 from Object.AWS.SesClassObject import SesClassObject
 from Object.AWS.SesClassObject import SesClassObject
 from Object.AliSmsObject import AliSmsObject
 from Object.AliSmsObject import AliSmsObject
 from Object.RedisObject import RedisObject
 from Object.RedisObject import RedisObject
@@ -303,8 +305,12 @@ class UserManagement(View):
     def validation(self, request_dict, request, operation):
     def validation(self, request_dict, request, operation):
         language = request_dict.get('language', 'en')
         language = request_dict.get('language', 'en')
         response = ResponseObject(language, 'pc')
         response = ResponseObject(language, 'pc')
-        if operation == '??':
-            return 0
+        if operation == 'sendSysMessage':
+            return self.sendSysMessage(request_dict, response)
+        elif operation == 'getAppDataList':
+            return self.getAppDataList(request_dict, response)
+        elif operation == 'replyFeedBack':
+            return self.replyFeedBack(request_dict, response)
         else:
         else:
             tko = TokenObject(request.META.get('HTTP_AUTHORIZATION'), returntpye='pc')
             tko = TokenObject(request.META.get('HTTP_AUTHORIZATION'), returntpye='pc')
             if tko.code != 0:
             if tko.code != 0:
@@ -321,6 +327,10 @@ class UserManagement(View):
                 return self.resetPassword(request_dict, response)
                 return self.resetPassword(request_dict, response)
             elif operation == 'getFeedbackList':
             elif operation == 'getFeedbackList':
                 return self.getFeedbackList(request_dict, response)
                 return self.getFeedbackList(request_dict, response)
+            elif operation == 'deleteFeedBack':
+                return self.deleteFeedBack(request_dict, response)
+            elif operation == 'getSysMessageList':
+                return self.getSysMessageList(request_dict, response)
             else:
             else:
                 return response.json(404)
                 return response.json(404)
 
 
@@ -520,3 +530,123 @@ class UserManagement(View):
             print(e)
             print(e)
             return response.json(500, repr(e))
             return response.json(500, repr(e))
 
 
+    def replyFeedBack(self, request_dict, response):
+        feedBackID = request_dict.get('feedBackID', None)
+        msg = request_dict.get('msg', None)
+        uid = request_dict.get('uid', None)
+
+        if not all([feedBackID, msg]):
+            return response.json(444)
+
+        try:
+            nowTime = int(time.time())
+            feed_back_qs = FeedBackModel.objects.filter(id=feedBackID)
+            if not feed_back_qs.exists():
+                return response.json(173)
+            with transaction.atomic():
+                SysMsgModel.objects.create(userID_id=feed_back_qs.first().userID_id, msg=msg, uid=uid,
+                                           addTime=nowTime, updTime=nowTime)   # 创建系统消息
+                feed_back_qs.update(status=1)   # 更新状态为已回复
+            return response.json(0)
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))
+
+    def deleteFeedBack(self, request_dict, response):
+        feedBackID = request_dict.get('feedBackID', None)
+        if not feedBackID:
+            return response.json(444)
+        try:
+            feed_back = FeedBackModel.objects.get(id=feedBackID)
+            sr_id_list = feed_back.FS.values_list('id', flat=True)
+            StatResModel.objects.filter(id__in=sr_id_list).delete()
+            feed_back.delete()
+            return response.json(0)
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))
+
+    def getSysMessageList(self, request_dict, response):
+        print('request_dict: ', request_dict)
+        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)
+
+        try:
+            sys_mass_qs = SysMassModel.objects.filter()
+            total = sys_mass_qs.count()
+            sys_mass_qs = sys_mass_qs.values('id', 'sender__username', 'addTime', 'updTime', 'lang', 'recever', 'msg',
+                                             'platform')
+            sys_mass_qs = sys_mass_qs[(page - 1) * line:page * line]
+            return response.json(0, {'list': list(sys_mass_qs), 'total': total})
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))
+
+    def getAppDataList(self, request_dict, response):
+        print('request_dict: ', request_dict)
+        platform = request_dict.get('platform', None)
+
+        if platform == 'android':
+            app_type = [1]
+        elif platform == 'ios':
+            app_type = [2]
+        else:
+            app_type = [1, 2]
+
+        try:
+            app_info_qs = App_Info.objects.filter(app_type__in=app_type).values('appBundleId', 'appName').distinct()
+            appBundleId_list = []
+            for app_info in app_info_qs:
+                appBundleId_list.append(app_info['appBundleId'])
+            return response.json(0, {'appBundleId_list': appBundleId_list})
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))
+
+    def sendSysMessage(self, request_dict, response):
+        print('request_dict: ', request_dict)
+        lang = request_dict.get('lang', None)
+        platform = request_dict.get('platform', None)
+        recever = request_dict.get('app_list', None)
+        msg = request_dict.get('msg', None)
+
+        if not all([lang, platform, recever, msg]):
+            return response.json(444)
+
+        try:
+            with transaction.atomic():
+                # SysMassModel表创建群发消息记录数据
+                nowTime = int(time.time())
+                sender_id = Device_User.objects.filter(username='13800138001').values('userID').first()['userID']
+                SysMassModel.objects.create(
+                    sender_id=sender_id,
+                    lang=lang,
+                    platform=platform,
+                    recever=recever,
+                    msg=msg,
+                    addTime=nowTime,
+                    updTime=nowTime,
+                )
+                # 根据UserExModel表的userID群发消息给用户
+                region_list = lang.split(',')
+                appBundleId_list = recever.split(',')
+                userID_list = UserExModel.objects.filter(appBundleId__in=appBundleId_list, region__in=region_list)\
+                    .values_list('userID_id', flat=True)
+                sys_msg_list = []
+                for userID in userID_list:
+                    sys_msg_list.append(SysMsgModel(userID_id=userID, msg=msg, addTime=nowTime, updTime=nowTime))
+                    if len(sys_msg_list) > 5000:
+                        SysMsgModel.objects.bulk_create(sys_msg_list)
+                        sys_msg_list = []
+                SysMsgModel.objects.bulk_create(sys_msg_list)
+            return response.json(0)
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))
+

+ 35 - 4
AdminController/NewVersionController.py → AdminController/VersionManagementController.py

@@ -29,7 +29,7 @@ from django.db.models import Q, F
 from time import strftime
 from time import strftime
 
 
 
 
-class NewVersionManagement(View):
+class VersionManagement(View):
     def get(self, request, *args, **kwargs):
     def get(self, request, *args, **kwargs):
         request.encoding = 'utf-8'
         request.encoding = 'utf-8'
         operation = kwargs.get('operation')
         operation = kwargs.get('operation')
@@ -50,15 +50,46 @@ class NewVersionManagement(View):
             return response.json(tko.code)
             return response.json(tko.code)
         response.lang = tko.lang
         response.lang = tko.lang
         userID = tko.userID
         userID = tko.userID
-        if operation == 'query':
+        if operation == 'getEquipmentVersionList':
+            return self.getEquipmentVersionList(request_dict, response)
+        elif operation == 'query':
             return self.do_query(request_dict, response)
             return self.do_query(request_dict, response)
-        if operation == 'update':
+        elif operation == 'update':
             return self.do_update(request_dict, response, request)
             return self.do_update(request_dict, response, request)
-        if operation == 'filter':
+        elif operation == 'filter':
             return self.do_filter(request_dict, response)
             return self.do_filter(request_dict, response)
         else:
         else:
             return response.json(404)
             return response.json(404)
 
 
+    def getEquipmentVersionList(self, request_dict, response):
+        mci = request_dict.get('mci', None)
+        lang = request_dict.get('lang', None)
+        version = request_dict.get('version', None)
+        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)
+
+        try:
+            equipment_version_qs = Equipment_Version.objects.filter()
+            if mci:
+                equipment_version_qs = equipment_version_qs.filter(mci=mci)
+            if lang:
+                equipment_version_qs = equipment_version_qs.filter(lang=lang)
+            if version:
+                equipment_version_qs = equipment_version_qs.filter(version__contains=version)
+
+            total = equipment_version_qs.count()
+            equipment_version_qs = equipment_version_qs.values()[(page - 1) * line:page * line]
+            equipment_version_list = CommonService.qs_to_list(equipment_version_qs)
+            return response.json(0, {'list': equipment_version_list, 'total': total})
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))
 
 
     def do_update(self, request_dict, response, request):
     def do_update(self, request_dict, response, request):
         code = request_dict.get('code', None)
         code = request_dict.get('code', None)

+ 2 - 2
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, DeviceManagementController, NewVersionController
+    ServeManagementController, LogManagementController, DeviceManagementController, VersionManagementController
 
 
 urlpatterns = [
 urlpatterns = [
     url(r'^testApi/(?P<operation>.*)$', TestApi.testView.as_view()),
     url(r'^testApi/(?P<operation>.*)$', TestApi.testView.as_view()),
@@ -358,7 +358,7 @@ urlpatterns = [
     # 设备管理
     # 设备管理
     re_path('deviceManagement/(?P<operation>.*)', DeviceManagementController.DeviceManagement.as_view()),
     re_path('deviceManagement/(?P<operation>.*)', DeviceManagementController.DeviceManagement.as_view()),
     # 版本管理
     # 版本管理
-    re_path('versionManagement/(?P<operation>.*)', NewVersionController.NewVersionManagement.as_view()),
+    re_path('versionManagement/(?P<operation>.*)', VersionManagementController.VersionManagement.as_view()),
     # 服务管理
     # 服务管理
     re_path('serveManagement/(?P<operation>.*)', ServeManagementController.serveManagement.as_view()),
     re_path('serveManagement/(?P<operation>.*)', ServeManagementController.serveManagement.as_view()),
     # 测试服务
     # 测试服务

+ 2 - 2
Controller/AppLogController.py

@@ -83,8 +83,8 @@ class AppLogView(View):
         if uid is None or average_delay is None or status is None or filename is None:
         if uid is None or average_delay is None or status is None or filename is None:
             return response.json(444)
             return response.json(444)
         else:
         else:
-            if len(uid) < 20:
-                return response.json(444, 'uid')
+            # if len(uid) < 20:
+            #     return response.json(444, 'uid')
 
 
             # ModelService.app_log_log(userID, uid)
             # ModelService.app_log_log(userID, uid)
             now_time = int(time.time())
             now_time = int(time.time())

+ 4 - 0
Controller/DetectControllerV2.py

@@ -261,7 +261,11 @@ class DetectControllerViewV2(View):
         if not region:
         if not region:
             return response.json(444, 'region')
             return response.json(444, 'region')
         region = int(region)
         region = int(region)
+        now_time = int(time.time())
+
         qs = Equipment_Info.objects.filter(userID_id=userID).order_by('-eventTime')
         qs = Equipment_Info.objects.filter(userID_id=userID).order_by('-eventTime')
+        qs = qs.filter(eventTime__gt=now_time - 3600 * 168)
+
         if startTime and endTime:
         if startTime and endTime:
             qs = qs.filter(eventTime__range=(startTime, endTime))
             qs = qs.filter(eventTime__range=(startTime, endTime))
         if eventType:
         if eventType:

+ 2 - 1
Controller/UserManger.py

@@ -144,6 +144,7 @@ class perfectUserInfoView(TemplateView):
             return response.json(104)
             return response.json(104)
         userIconPath = kwargs.get('userIconPath', None)
         userIconPath = kwargs.get('userIconPath', None)
         userContent = kwargs.get('userContent', None)
         userContent = kwargs.get('userContent', None)
+        userIconUrl = ""
         if userIconPath:
         if userIconPath:
             userIconUrl = SERVER_DOMAIN + 'account/getAvatar/' + userIconPath
             userIconUrl = SERVER_DOMAIN + 'account/getAvatar/' + userIconPath
         if userContent:
         if userContent:
@@ -165,7 +166,7 @@ class perfectUserInfoView(TemplateView):
             for k, v in enumerate(res["datas"]):
             for k, v in enumerate(res["datas"]):
                 res['datas'][k]['fields'].pop('password')
                 res['datas'][k]['fields'].pop('password')
                 userIconPath = res['datas'][k]['fields']['userIconPath']
                 userIconPath = res['datas'][k]['fields']['userIconPath']
-                if userIconPath:
+                if userIconPath and userIconUrl != '':
                     res['datas'][k]['fields']['userIconUrl'] = userIconUrl
                     res['datas'][k]['fields']['userIconUrl'] = userIconUrl
             return response.json(0, res)
             return response.json(0, res)