lhq 4 лет назад
Родитель
Сommit
9f68ffe4e5
6 измененных файлов с 197 добавлено и 40 удалено
  1. 67 8
      Controller/Cloudsum.py
  2. 6 3
      Controller/EquipmentManager.py
  3. 15 18
      Model/models.py
  4. 92 0
      Service/OperatingLogs.py
  5. 15 11
      Service/TemplateService.py
  6. 2 0
      Service/middleware.py

+ 67 - 8
Controller/Cloudsum.py

@@ -5,13 +5,20 @@
 @File :Cloudsum.py
 @IDE :PyCharm
 """
-from Model.models import Order_Model, UID_Bucket, UserExModel
+import json
+
+from Ansjer.config import SERVER_TYPE
+from Model.models import Order_Model, UID_Bucket, UserExModel, EquipmentLogModel
+from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from django.views import View
-from Service.ModelService import Device_User,ModelService
+
+from Service.CommonService import CommonService
+from Service.ModelService import Device_User, ModelService
 from django.db.models import Count, Sum
 
+
 class Cloudsum(View):
     def dispatch(self, requset, *args, **kwargs):
         return super(Cloudsum, self).dispatch(requset, *args, **kwargs)
@@ -45,6 +52,8 @@ class Cloudsum(View):
             return self.usercount(userID, request_dict, response)
         if operation == 'usercloud':
             return self.usercloud(userID, response)
+        if operation == 'equipment_logs':
+            return self.equipment_logs(userID, request_dict, response)
 
     # 类型:用户手机
     # 统计用户手机型号  已有
@@ -59,10 +68,10 @@ class Cloudsum(View):
         if own_permission is not True:
             return response.json(404)
         res = UserExModel.objects.extra(tables=['app_info'],
-                                        select={'appname':'app_info.appName',
-                                                'appversion':'app_info.newAppversion'},
-                                        where=["user_ex.appBundleId=app_info.appBundleId"]).\
-            values('appBundleId','appname','appversion').annotate(dates=Count('appBundleId')).order_by()
+                                        select={'appname': 'app_info.appName',
+                                                'appversion': 'app_info.newAppversion'},
+                                        where=["user_ex.appBundleId=app_info.appBundleId"]). \
+            values('appBundleId', 'appname', 'appversion').annotate(dates=Count('appBundleId')).order_by()
         print(res.query)
         print(res)
         return response.json(0, list(res))
@@ -82,7 +91,7 @@ class Cloudsum(View):
         #                                   where=["data_joined between '%s-01-01' and '%s-01-01' "],
         #                                   params=[usercountyear, usercountyear+1]).values(
         #     'dates').annotate(用户合计=Count('data_joined')).order_by('dates')
-        count = Device_User.objects.extra(select={'dates': "DATE_FORMAT(data_joined,'%%Y-%%m')"},).values(
+        count = Device_User.objects.extra(select={'dates': "DATE_FORMAT(data_joined,'%%Y-%%m')"}, ).values(
             'dates').annotate(用户合计=Count('data_joined')).order_by('dates')
         print(count.query)
         return response.json(0, list(count))
@@ -118,4 +127,54 @@ class Cloudsum(View):
             return response.json(404)
         a = Order_Model.objects.extra(select={'dates': "FROM_UNIXTIME(addTime,'%%Y-%%m')"}).values(
             'dates').filter(status=1).annotate(开通云存合计=Count('addTime')).order_by('dates')
-        return response.json(0, list(a))
+        return response.json(0, list(a))
+
+    def equipment_logs(self, userID, request_dict, response):
+        page = int(request_dict.get('page', None))
+        line = int(request_dict.get('line', None))
+        # order = request_dict.get('order', '-id')
+        # if order == '':
+        #     order = '-id'
+        if not page or not line:
+            return response.json(444, 'page,line')
+
+        # own_perm = ModelService.check_perm(userID=userID, permID=30)
+        # if own_perm is not True:
+        #     return response.json(404)
+
+        if SERVER_TYPE == 'Ansjer.formal_settings':
+            logKey = 'logger'
+        else:
+            logKey = 'test_logger'
+        # 判断redis列表长度
+        redisObj = RedisObject()
+        data_list = redisObj.lrange(logKey, 0, -1)
+        redisObj.del_data(key=logKey)
+        add_batch_log(data_list)
+
+        qs = EquipmentLogModel.objects.all().order_by('id')
+        if qs.exists():
+            count = qs.count()
+            res = qs[(page - 1) * line:page * line]
+            send_json = CommonService.qs_to_dict(res)
+            send_json['count'] = count
+            return response.json(0, send_json)
+        return response.json(0, {'datas': [], 'count': 0})
+
+# 访问日志批量添加
+def add_batch_log(data_list):
+    try:
+        if data_list:
+            querysetlist = []
+            for i in data_list:
+                data = json.loads(i.decode('utf-8'))
+                querysetlist.append(EquipmentLogModel(**data))
+            EquipmentLogModel.objects.bulk_create(querysetlist)
+        else:
+            return
+    except Exception as e:
+        print('ggga')
+        print(repr(e))
+        return False
+    else:
+        return True

+ 6 - 3
Controller/EquipmentManager.py

@@ -363,6 +363,7 @@ def addInterface(request):
     View_Password = request_dict.get('View_Password', '')
     Type = request_dict.get('Type', None)
     ChannelIndex = request_dict.get('ChannelIndex', None)
+    version = request_dict.get('version', None)
     isCheckMainUser = request_dict.get('isCheckMainUser', None)
     isMainUserExists = False
     if all([UID, NickName, View_Account, Type, ChannelIndex]):
@@ -424,7 +425,7 @@ def addInterface(request):
                         'vodPrimaryUserID': vodPrimaryUserID,
                         'vodPrimaryMaster': vodPrimaryMaster,
                         'data_joined': '',
-                        'version': '',
+                        'version': version,
                         'isVod': 0,
                         'isExist': 1,
                         'userID__userEmail': ''
@@ -453,6 +454,7 @@ def addInterface(request):
                             'ip': CommonService.get_ip_address(request),
                             'channel': ChannelIndex,
                             'nickname': NickName,
+                            'version': version,
                         }
                         UidSetModel.objects.create(**uid_set_create_dict)
                     else:
@@ -460,7 +462,8 @@ def addInterface(request):
 
                     userDevice = Device_Info(id=pk, userID_id=userID, UID=UID,
                                              NickName=NickName, View_Account=View_Account,
-                                             View_Password=View_Password, Type=Type, ChannelIndex=ChannelIndex, vodPrimaryUserID=vodPrimaryUserID, vodPrimaryMaster=vodPrimaryMaster)
+                                             View_Password=View_Password, Type=Type, ChannelIndex=ChannelIndex,
+                                             version=version, vodPrimaryUserID=vodPrimaryUserID, vodPrimaryMaster=vodPrimaryMaster)
                     userDevice.save()
                     Device_Info.objects.filter(UID=UID).update(vodPrimaryUserID=vodPrimaryUserID,
                                                                vodPrimaryMaster=vodPrimaryMaster)
@@ -491,7 +494,7 @@ def addInterface(request):
         else:
             return response.json(tko.code)
     else:
-        return response.json(444, {'param': 'UID,NickName,View_Account,View_Password,Type,ChannelIndex'})
+        return response.json(444, {'param': 'UID,NickName,View_Account,View_Password,Type,ChannelIndex,version'})
 
 
 # 添加设备字段

+ 15 - 18
Model/models.py

@@ -119,21 +119,6 @@ class Role(models.Model):
             return permslist
 
 
-class RegionCountryModel(models.Model):
-    number = models.IntegerField(primary_key=True, verbose_name='唯一标识')
-    region_id = models.IntegerField(verbose_name='大洲编号')
-    name = models.CharField(max_length=50, verbose_name=u'名称')
-    cn = models.CharField(blank=True, max_length=64, verbose_name=u'中文名称')
-    en = models.CharField(blank=True, max_length=64, verbose_name=u'英文名称')
-    add_time = models.IntegerField(default=0, verbose_name='添加时间')
-    update_time = models.IntegerField(default=0, verbose_name='更新时间')
-
-    class Meta:
-        db_table = 'region_country'
-        verbose_name = '地区表'
-        verbose_name_plural = verbose_name
-
-
 class Device_User(AbstractBaseUser):
     userID = models.CharField(blank=True, max_length=32, primary_key=True,
                               verbose_name=u'用户ID', unique=True)
@@ -165,7 +150,6 @@ class Device_User(AbstractBaseUser):
     fingerprint_key = models.CharField(max_length=128, default='', verbose_name=u'客户端用于解码的密钥等信息')
     is_local = models.BooleanField(blank=True, default=False, verbose_name=u'是否是本地登录用户') # False:账号登录,1:本地登录
     subscribe_email = models.SmallIntegerField(default=0, verbose_name=u'是否订阅营销邮件') # 0:未订阅,1:订阅,2:不订阅
-    region_country = models.IntegerField(blank=True, default=0, verbose_name='地区表唯一标识')
     objects = UserManager()
 
     USERNAME_FIELD = 'userID'  # 必须有一个唯一标识
@@ -256,7 +240,6 @@ class Device_Info(models.Model):
     iSNotification = models.BooleanField(blank=True, verbose_name=u'报警通知 0:关闭,1:开启)', default=False)
     isVod = models.SmallIntegerField(blank=True, default=0, verbose_name='是否支持云存')  # 是否支持云存设备
     isExist = models.SmallIntegerField(blank=True, default=1, verbose_name='是否被删除')  # 是否被删除了(需主用户交互) 1存在,0不存在,2设备被重置
-    isCameraOpenCloud =  models.SmallIntegerField(blank=True, default=1, verbose_name='是否开启云存')  # 0:不开启  1:开启
     ###
     REQUIRED_FIELDS = []
 
@@ -421,7 +404,6 @@ class VodBucketModel(models.Model):
     updTime = models.IntegerField(verbose_name='更新时间', default=0)
 
     mold = models.SmallIntegerField(default=0, verbose_name='存储区域类型')  # 0:国内阿里 1:国外aws
-    region_id = models.IntegerField(default=1, verbose_name='大洲编号')
 
     def __str__(self):
         return self.id
@@ -1275,3 +1257,18 @@ class ProcessInfoLogsModel(models.Model):
         verbose_name = '过程信息表'
         verbose_name_plural = verbose_name
 
+
+class EquipmentLogModel(models.Model):
+    id = models.AutoField(primary_key=True)
+    user = models.CharField(blank=False, max_length=32, db_index=True, verbose_name=u'操作用户')
+    uid = models.CharField(default='', blank=True, max_length=32, verbose_name=u'设备uid')
+    equipmentid = models.CharField(blank=False, max_length=100, db_index=True, verbose_name=u'设备主键id')
+    NickName = models.CharField(blank=True, max_length=32, verbose_name=u'设备名称')
+    ip = models.CharField(max_length=100, default='', db_index=True, blank=True, verbose_name=u'访问ip地址')
+    time = models.DateTimeField(null=True, blank=True, db_index=True, verbose_name=u'访问时间')
+    operatingcontent = models.TextField(blank=True, default='', verbose_name=u'操作内容')
+    url = models.CharField(max_length=150, default='', blank=True, verbose_name=u'访问路径')
+    class Meta:
+        db_table = 'equipment_log'
+        verbose_name = '设备日志表'
+        verbose_name_plural = verbose_name

+ 92 - 0
Service/OperatingLogs.py

@@ -0,0 +1,92 @@
+import json
+import threading
+import datetime
+import time
+
+from bson import utc
+
+from Model.models import EquipmentLogModel
+from Service.CommonService import CommonService
+from Service.MiscellService import MiscellService
+from Service.TemplateService import TemplateService
+
+
+def add_access_log(request, status_code):
+    # 增加多进程 异步
+    asy = threading.Thread(target=addLog, args=(request, status_code))
+    asy.start()
+
+
+def addLog(request, status_code):
+    request_path = request.path.strip().strip('/')
+    if 'equipment' in request.path:
+        global request_dict
+        try:
+            if request.method == 'GET':
+                request_dict = request.GET
+            elif request.method == 'POST':
+                request_dict = request.POST
+            # api_list = TemplateService.log_api()
+            print('status_code:', status_code)
+            api_list = [
+                'equipment/add',
+                'equipment/delete',
+                'equipment/flowUpdate',
+                'v3/equipment/add',
+                'v3/equipment/modify',
+            ]
+            # 接口中文化
+            jiekou = {
+                'equipment/add': 'v1添加设备',
+                'equipment/delete': 'v1删除设备',
+                'equipment/flowUpdate': '更新设备的版本信息',
+                'v3/equipment/add': 'v3添加设备信息',
+                'v3/equipment/modify': 'v3编辑设备信息'
+            }
+            if request_path in api_list:
+                user = MiscellService.get_access_name(request_dict=request_dict)
+                clientIP = CommonService.get_ip_address(request)
+                now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
+                nowtime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
+                # content:从前端获取到的参数数据,对获取到的数据进行处理
+                content = json.dumps(request_dict)
+                d = eval(content)
+                if 'uid' not in d:
+                    d['uid'] = ''
+                if 'NickName' not in d:
+                    d['NickName'] = ''
+                if 'equipmentid' not in d:
+                    d['equipmentid'] = ''
+                if 'UID' in d:
+                    d['uid'] = d['UID']
+                if 'id' in d:
+                    d['equipmentid'] = d['id']
+                password = request_dict.get('userPwd', None)
+                if password is not None:
+                    request_dict = dict(request_dict)
+                    request_dict.pop('userPwd')
+                if user != '':
+                    user = user
+                else:
+                    print('空')
+                    user = '空'
+                # 数据拼接
+                caozuo = user + '在' + str(nowtime) + '进行' + str(jiekou[request_path])
+                # + ',' + '设备uid或主键id为:' + str(d['uid']) + str(d['equipmentid'])
+                print('request_dict:', d)
+                add_data = {
+                    'user': user,
+                    'uid': d['uid'],
+                    'equipmentid': d['equipmentid'],
+                    'NickName': d['NickName'],
+                    'ip': clientIP,
+                    'time': now_time,
+                    'url': request.path,
+                    'operatingcontent': caozuo,
+                }
+                print('操作数据:', add_data)
+                # 设备日志添加
+                EquipmentLogModel.objects.create(**add_data)
+        except Exception as e:
+            print(repr(e))
+            pass

+ 15 - 11
Service/TemplateService.py

@@ -28,9 +28,6 @@ class TemplateService:
             'account/delUser',
             'account/setUserValid',
             'account/unsharedUserEquipment',
-            'equipment/addNewUserEquipment',
-            'equipment/delUserEquipment',
-            'equipment/modifyUserEquipment',
             'roles/addNewRole',
             'roles/delRole',
             'roles/modifyRole',
@@ -38,7 +35,6 @@ class TemplateService:
             'perms/delPerms',
             'perms/modifyPerms',
             'uploads/upgrade',
-            'equipment/OTA',
             # 'appInfo',
             'OTA/getNewVer',
             'v2/account/authcode',
@@ -53,24 +49,17 @@ class TemplateService:
             'cloudVod/findVod',
             'cloudVod/aliPayCreateOrder',
             'cloudVod/aliPayCallback',
-            'equipment/add',
             'deviceShare/queryUser',
             'deviceShare/showShareInfo',
             'deviceShare/confirm',
             'deviceShare/deleteUser',
-            'equipment/delete',
-            'equipment/query',
             'order/querylist',
             'detect/changeStatus',
             # 'notify/push',
-            'equipment/flowUpdate',
             'wechat/authsign',
             'login/oauth/authorize',
             'login/oauth/access_token',
             'login/oauth/user',
-            'v3/equipment/query',
-            'v3/equipment/add',
-            'v3/equipment/modify',
             'v2/account/login',
             'v3/account/login',
             'detect/queryInfo',
@@ -79,6 +68,21 @@ class TemplateService:
             'v3/account/changePwd',
             'v3/account/resetPwdByCode',
             'account/appFrequency',
+            'equipment/OTA',
+            'equipment/addNewUserEquipment',
+            'equipment/delUserEquipment',
+            'equipment/modifyUserEquipment',
+            'equipment/add',
+            'equipment/delete',
+            'equipment/query',
+            'equipment/flowUpdate',
+            'v3/equipment/query',
+            'v3/equipment/add',
+            'v3/equipment/modify',
+            'Cloudsum/cloudservicesum',
+            'Cloudsum/userappversion',
+            'Cloudsum/usercount',
+            'Cloudsum/usercloud',
         ]
         return apiList
 

+ 2 - 0
Service/middleware.py

@@ -7,6 +7,7 @@ from Ansjer.config import SERVER_TYPE
 
 from Object.ResponseObject import ResponseObject
 from Service.MiscellService import MiscellService
+from Service import OperatingLogs
 import django.db
 
 
@@ -87,6 +88,7 @@ class StatisticsUrlMiddleware(MiddlewareMixin):
                 # mysql
                 if SERVER_TYPE!="Ansjer.formal_settings":
                     # print('添加日志')
+                    OperatingLogs.add_access_log(request=request, status_code=response.status_code)
                     MiscellService.add_access_log(request=request, status_code=response.status_code)
                 # else:
                 #     print('不添加日志')