lang 3 жил өмнө
parent
commit
0f470318d3

+ 90 - 48
AdminController/DeviceManagementController.py

@@ -1,11 +1,16 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
+import json
+import time
+
+from django.db import transaction
 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
+from Model.models import Device_Info, UidSetModel, LogModel, UID_Bucket, Unused_Uid_Meal, Order_Model, StsCrdModel, \
+    VodHlsModel, ExperienceContextModel
 import datetime
 from django.utils import timezone
 
@@ -37,6 +42,12 @@ class DeviceManagement(View):
                 return self.findByUser(request_dict, userID, response)
             elif operation == 'delete':
                 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')
 
 
@@ -56,7 +67,7 @@ class DeviceManagement(View):
 
         queryset = Device_Info.objects.all()
         if UID:
-            queryset = queryset.filter(UID=UID)
+            queryset = queryset.filter(UID__contains=UID)
         if queryset.exists():
             count = queryset.count()
             res = queryset[(page - 1) * line:page * line]
@@ -76,54 +87,85 @@ class DeviceManagement(View):
                         send_dict["datas"][k]['fields']['primaryusername']=primary
             return response.json(
                 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:
-                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 requests
 from django.contrib.auth.hashers import make_password, check_password  # 对密码加密模块
+from django.db import transaction
 from django.db.models import Q
 from django.http import HttpResponseRedirect
 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
 from Controller.CheckUserData import DataValid, date_handler, RandomStr
 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.AliSmsObject import AliSmsObject
 from Object.RedisObject import RedisObject
@@ -303,8 +305,12 @@ class UserManagement(View):
     def validation(self, request_dict, request, operation):
         language = request_dict.get('language', 'en')
         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:
             tko = TokenObject(request.META.get('HTTP_AUTHORIZATION'), returntpye='pc')
             if tko.code != 0:
@@ -321,6 +327,10 @@ class UserManagement(View):
                 return self.resetPassword(request_dict, response)
             elif operation == 'getFeedbackList':
                 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:
                 return response.json(404)
 
@@ -520,3 +530,123 @@ class UserManagement(View):
             print(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
 
 
-class NewVersionManagement(View):
+class VersionManagement(View):
     def get(self, request, *args, **kwargs):
         request.encoding = 'utf-8'
         operation = kwargs.get('operation')
@@ -50,15 +50,46 @@ class NewVersionManagement(View):
             return response.json(tko.code)
         response.lang = tko.lang
         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)
-        if operation == 'update':
+        elif operation == 'update':
             return self.do_update(request_dict, response, request)
-        if operation == 'filter':
+        elif operation == 'filter':
             return self.do_filter(request_dict, response)
         else:
             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):
         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, \
     DetectControllerV2, ShadowController, TestDetectController, PcInfo, PctestController, DeviceDebug
 from AdminController import UserManageController, RoleController, MenuController, TestServeController, \
-    ServeManagementController, LogManagementController, DeviceManagementController, NewVersionController
+    ServeManagementController, LogManagementController, DeviceManagementController, VersionManagementController
 
 urlpatterns = [
     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('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()),
     # 测试服务

+ 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:
             return response.json(444)
         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)
             now_time = int(time.time())

+ 4 - 0
Controller/DetectControllerV2.py

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

+ 2 - 1
Controller/UserManger.py

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