Browse Source

Merge branch 'test' of 13.56.215.252:/web/rpo/AnsjerFormal into lang_test

lang 4 years ago
parent
commit
72fe95f566

+ 33 - 15
Ansjer/formal_settings.py

@@ -72,26 +72,44 @@ TEMPLATES = [
 WSGI_APPLICATION = 'Ansjer.formal_wsgi.application'
 WSGI_APPLICATION = 'Ansjer.formal_wsgi.application'
 
 
 # 服务器类型
 # 服务器类型
-# DATABASE_DATA = 'Ansjer81'
-# SERVER_HOST = 'localhost'
-# DATABASES_USER = 'ansjer'
-# DATABASES_PASS = '1234'
 DATABASE_DATA = 'Ansjer81'
 DATABASE_DATA = 'Ansjer81'
-# SERVER_HOST = 'azrdsinstance.clraczw4p0yj.us-west-1.rds.amazonaws.com'
 SERVER_HOST = 'database-2.clraczw4p0yj.us-west-1.rds.amazonaws.com'
 SERVER_HOST = 'database-2.clraczw4p0yj.us-west-1.rds.amazonaws.com'
 DATABASES_USER = 'azrds'
 DATABASES_USER = 'azrds'
 DATABASES_PASS = 'azrds.x.x'
 DATABASES_PASS = 'azrds.x.x'
 
 
-DATABASES = {'default': {
-    'ENGINE': 'django.db.backends.mysql',
-    'NAME': DATABASE_DATA,
-    'USER': DATABASES_USER,
-    'PASSWORD': DATABASES_PASS,
-    'HOST': SERVER_HOST,
-    'PORT': '3306',
-    'OPTIONS': {'charset': 'utf8mb4', 'use_unicode': True, 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
-    'AUTOCOMMIT': True
-}}
+DATABASE_DATA2 = 'Ansjer81'
+SERVER_HOST2 = 'ansjerpush.clraczw4p0yj.us-west-1.rds.amazonaws.com'
+DATABASES_USER2 = 'azrds'
+DATABASES_PASS2 = 'azrds.x.x'
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.mysql',
+        'NAME': DATABASE_DATA,
+        'USER': DATABASES_USER,
+        'PASSWORD': DATABASES_PASS,
+        'HOST': SERVER_HOST,
+        'PORT': '3306',
+        'OPTIONS': {'charset': 'utf8mb4', 'use_unicode': True, 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
+        'AUTOCOMMIT': True
+    },
+    'mysql02': {
+        'ENGINE': 'django.db.backends.mysql',
+        'NAME': DATABASE_DATA2,
+        'USER': DATABASES_USER2,
+        'PASSWORD': DATABASES_PASS2,
+        'HOST': SERVER_HOST2,
+        'PORT': '3306',
+        'OPTIONS': {'charset': 'utf8mb4', 'use_unicode': True, 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
+        'AUTOCOMMIT': True
+    }
+}
+DATABASE_ROUTERS = ['Ansjer.database_router.DatabaseAppsRouter']
+DATABASE_APPS_MAPPING = {
+    'db1': 'default',
+    'db2': 'mysql02',
+}
+
 
 
 AUTH_PASSWORD_VALIDATORS = [
 AUTH_PASSWORD_VALIDATORS = [
     {
     {

+ 2 - 2
Ansjer/test_settings.py

@@ -78,8 +78,8 @@ SERVER_HOST = 'database-2.clraczw4p0yj.us-west-1.rds.amazonaws.com'
 DATABASES_USER = 'azrds'
 DATABASES_USER = 'azrds'
 DATABASES_PASS = 'azrds.x.x'
 DATABASES_PASS = 'azrds.x.x'
 
 
-DATABASE_DATA2 = 'AnsjerPush'
-SERVER_HOST2 = 'azrdsinstance.clraczw4p0yj.us-west-1.rds.amazonaws.com'
+DATABASE_DATA2 = 'AnsjerTest'
+SERVER_HOST2 = 'ansjerpush.clraczw4p0yj.us-west-1.rds.amazonaws.com'
 DATABASES_USER2 = 'azrds'
 DATABASES_USER2 = 'azrds'
 DATABASES_PASS2 = 'azrds.x.x'
 DATABASES_PASS2 = 'azrds.x.x'
 
 

+ 2 - 0
Ansjer/urls.py

@@ -233,6 +233,8 @@ urlpatterns = [
     url(r'^ios/authsign', UserController.AppleAuthLogin.as_view()),
     url(r'^ios/authsign', UserController.AppleAuthLogin.as_view()),
     url(r'^appLog/(?P<operation>.*)$', AppLogController.AppLogView.as_view()),
     url(r'^appLog/(?P<operation>.*)$', AppLogController.AppLogView.as_view()),
 
 
+    # 本地登录接口
+    url(r'^local/(?P<operation>.*)$', UserController.LocalUserView.as_view()),
 
 
     # app 设备消息模板
     # app 设备消息模板
     # 路由加参数参考
     # 路由加参数参考

+ 1 - 1
Controller/AppLogController.py

@@ -105,7 +105,7 @@ class AppLogView(View):
                 if al_qs.exists():
                 if al_qs.exists():
                     count = al_qs.count()
                     count = al_qs.count()
                     start = (page - 1) * line
                     start = (page - 1) * line
-                    al_qs = al_qs[start: (start + line)].values()
+                    al_qs = al_qs[start: (start + line)].values('id', 'user__username', 'user_id', 'uid', 'average_delay', 'status', 'filename', 'add_time')
 
 
                     res = []
                     res = []
                     auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
                     auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)

+ 2 - 1
Controller/EquipmentInfo.py

@@ -84,9 +84,10 @@ class EquipmentInfo(View):
         if not device_info.exists():
         if not device_info.exists():
             return response.json(14)
             return response.json(14)
         try:
         try:
+
             nowTime = int(time.time())
             nowTime = int(time.time())
             equipment_info = Equipment_Info(
             equipment_info = Equipment_Info(
-                userID=Device_User.objects.get(userID=userID),
+                userID_id=userID,
                 devUid=devUid,
                 devUid=devUid,
                 Channel=Channel,
                 Channel=Channel,
                 eventType=eventType,
                 eventType=eventType,

+ 4 - 0
Controller/EquipmentManager.py

@@ -694,6 +694,10 @@ def deleteInterface(request):
                 up_qs = UidPushModel.objects.filter(uid_set__uid=uid)
                 up_qs = UidPushModel.objects.filter(uid_set__uid=uid)
                 if up_qs.count() > 1:
                 if up_qs.count() > 1:
                     UidPushModel.objects.filter(uid_set__uid=uid, userID_id=userID).delete()
                     UidPushModel.objects.filter(uid_set__uid=uid, userID_id=userID).delete()
+                    redisObj = RedisObject(db=6, SERVER_HOST='push.dvema.com')
+                    ykey = '{uid}_redis_qs'.format(uid=uid)
+                    if ykey:
+                        redisObj.del_data(key=ykey)
                 else:
                 else:
                     up_qs.delete()
                     up_qs.delete()
                 # b.分享获得用户假删除
                 # b.分享获得用户假删除

+ 12 - 1
Controller/EquipmentStatus.py

@@ -12,6 +12,8 @@
 @Contact: chanjunkai@163.com
 @Contact: chanjunkai@163.com
 """
 """
 import base64
 import base64
+import json
+import threading
 import urllib.parse
 import urllib.parse
 import time
 import time
 import oss2
 import oss2
@@ -21,7 +23,9 @@ from django.views.decorators.csrf import csrf_exempt
 from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET
 from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET
 from Model.models import Device_Info
 from Model.models import Device_Info
 from Object.ETkObject import ETkObject
 from Object.ETkObject import ETkObject
+from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
+from Service.ModelService import ModelService
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
 
 
 '''
 '''
@@ -109,7 +113,13 @@ def getTZ(request):
         uid = c.decode('utf-8')
         uid = c.decode('utf-8')
         if len(uid) == 20:
         if len(uid) == 20:
             print(uid)
             print(uid)
-            if update:
+            redisObject = RedisObject(db=7)
+            data = redisObject.get_data(key=ip)
+
+            if data:
+                info = json.loads(data)
+                return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': info})
+            elif update:
                 info = CommonService.getIpIpInfo(ip=ip, lang=lang,update=True)
                 info = CommonService.getIpIpInfo(ip=ip, lang=lang,update=True)
             else:
             else:
                 info = CommonService.getIpIpInfo(ip=ip, lang=lang,update=False)
                 info = CommonService.getIpIpInfo(ip=ip, lang=lang,update=False)
@@ -124,6 +134,7 @@ def getTZ(request):
                 elif len(tz) == 8:
                 elif len(tz) == 8:
                     gmtz = tz.replace('UTC-', 'GMT-0').replace('UTC+', 'GMT+0')
                     gmtz = tz.replace('UTC-', 'GMT-0').replace('UTC+', 'GMT+0')
                     info['gmt_offset'] = gmtz
                     info['gmt_offset'] = gmtz
+                redisObject.set_data(key=ip, val=json.dumps(info), expire=3600)
             except Exception as e:
             except Exception as e:
                 pass
                 pass
             return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': info})
             return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': info})

+ 180 - 8
Controller/UserController.py

@@ -32,7 +32,7 @@ from ratelimit.decorators import ratelimit
 from Ansjer.config import AuthCode_Expire, SERVER_DOMAIN, APNS_CONFIG, JPUSH_CONFIG, FCM_CONFIG, TUTK_PUSH_DOMAIN
 from Ansjer.config import AuthCode_Expire, SERVER_DOMAIN, APNS_CONFIG, JPUSH_CONFIG, FCM_CONFIG, TUTK_PUSH_DOMAIN
 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
+    UserAppFrequencyModel, CountryIPModel
 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
@@ -173,6 +173,9 @@ class registerView(TemplateView):
         password = request_dict.get('userPwd', None)
         password = request_dict.get('userPwd', None)
         authCode = request_dict.get('identifyingCode', None)
         authCode = request_dict.get('identifyingCode', None)
         language = request_dict.get('language', None)
         language = request_dict.get('language', None)
+        unique = request_dict.get('unique', None)
+        if unique:
+            delete_local_account(unique)
         response = ResponseObject(language)
         response = ResponseObject(language)
         if username and password and authCode:
         if username and password and authCode:
             # 过滤空格
             # 过滤空格
@@ -286,7 +289,6 @@ class registerView(TemplateView):
         else:
         else:
             return response.json(109)
             return response.json(109)
 
 
-
 # 登出
 # 登出
 class LogoutView(TemplateView):
 class LogoutView(TemplateView):
     @method_decorator(csrf_exempt)
     @method_decorator(csrf_exempt)
@@ -858,6 +860,9 @@ class v2registerView(TemplateView):
         password = request_dict.get('password', None)
         password = request_dict.get('password', None)
         authcode = request_dict.get('authcode', None)
         authcode = request_dict.get('authcode', None)
         lang = request_dict.get('lang', None)
         lang = request_dict.get('lang', None)
+        unique = request_dict.get('unique', None)
+        if unique:
+            delete_local_account(unique)
         response = ResponseObject(lang)
         response = ResponseObject(lang)
         if not lang:
         if not lang:
             lang = request_dict.get('language', None)
             lang = request_dict.get('language', None)
@@ -998,6 +1003,9 @@ class v3registerView(TemplateView):
         password = request_dict.get('password', None)
         password = request_dict.get('password', None)
         authcode = request_dict.get('authcode', None)
         authcode = request_dict.get('authcode', None)
         lang = request_dict.get('lang', None)
         lang = request_dict.get('lang', None)
+        unique = request_dict.get('unique', None)
+        if unique:
+            delete_local_account(unique)
         response = ResponseObject(lang)
         response = ResponseObject(lang)
         # 解密
         # 解密
         try:
         try:
@@ -1801,24 +1809,27 @@ class InitInfoView(View):
 
 
     def get(self, request, *args, **kwargs):
     def get(self, request, *args, **kwargs):
         request.encoding = 'utf-8'
         request.encoding = 'utf-8'
-        return self.validation(request.GET)
+        return self.validation(request.GET, request)
 
 
     def post(self, request, *args, **kwargs):
     def post(self, request, *args, **kwargs):
         request.encoding = 'utf-8'
         request.encoding = 'utf-8'
-        return self.validation(request.POST)
+        return self.validation(request.POST, request)
 
 
-    def validation(self, request_dict):
+    def validation(self, request_dict, request):
         response = ResponseObject()
         response = ResponseObject()
         token = request_dict.get('token', None)
         token = request_dict.get('token', None)
+        unique = request_dict.get('unique', None)
         tko = TokenObject(token)
         tko = TokenObject(token)
         if tko.code == 0:
         if tko.code == 0:
             userID = tko.userID
             userID = tko.userID
-            return self.init_info(request_dict, userID, response)
+            return self.init_info(request_dict, userID, response, request)
+        elif unique:
+            return self.update_country(request_dict, response, request)
         else:
         else:
             return response.json(tko.code)
             return response.json(tko.code)
 
 
     # 初始化设备token
     # 初始化设备token
-    def init_info(self, request_dict, userID, response):
+    def init_info(self, request_dict, userID, response, request):
         # 未读的系统消息
         # 未读的系统消息
         token_val = request_dict.get('token_val', None)
         token_val = request_dict.get('token_val', None)
         m_code = request_dict.get('m_code', None)
         m_code = request_dict.get('m_code', None)
@@ -1867,11 +1878,56 @@ class InitInfoView(View):
                         'userID_id': userID,
                         'userID_id': userID,
                         'region': lang
                         'region': lang
                     }
                     }
-                    UserExModel.objects.create(**create_dict)
+                    user_ex_qs = UserExModel.objects.create(**create_dict)
+
+                country_ip_qs = CountryIPModel.objects.filter(user_ex_id=user_ex_qs[0].id)
+                if not country_ip_qs.exists():
+                    countryIp = CountryIPModel(
+                        ip=CommonService.get_ip_address(request),
+                        add_time=now_time,
+                        user_ex_id=user_ex_qs[0].id
+                    )
+                    countryIp.save()
+
         # 获取设备是否存在有已被删除
         # 获取设备是否存在有已被删除
         res = {'usmsg': 0}  # 预留字段, 有版本app该字段去掉会报错
         res = {'usmsg': 0}  # 预留字段, 有版本app该字段去掉会报错
         return response.json(0, res)
         return response.json(0, res)
 
 
+    def update_country(self, request_dict, response, request):
+        username = request_dict.get('unique', None)
+        appBundleId = request_dict.get('appBundleId', None)
+        lang = request_dict.get('lang', '')  # 语言区域
+        if username and appBundleId:
+            country = CommonService.getAddr(CommonService.get_ip_address(request))
+            user_qs = Device_User.objects.filter(username=username)
+            if user_qs.exists():
+                user = user_qs[0]
+                user_ex_qs = UserExModel.objects.filter(userID_id=user.userID)
+                now_time = int(time.time())
+                if user_ex_qs.exists():
+                    update_dict = {
+                        'updTime': now_time,
+                        'appBundleId': appBundleId,
+                        'region': lang,
+                        'country': country
+                    }
+                    user_ex_qs.update(**update_dict)
+                else:
+                    create_dict = {
+                        'addTime': now_time,
+                        'updTime': now_time,
+                        'appBundleId': appBundleId,
+                        'userID_id': user.userID,
+                        'region': lang,
+                        'country': country
+                    }
+                    UserExModel.objects.create(**create_dict)
+                return response.json(0)
+            else:
+                return response.json(104)
+        else:
+            return response.json(444)
+
 
 
 # 获取验证码
 # 获取验证码
 class verifyAuthcode(TemplateView):
 class verifyAuthcode(TemplateView):
@@ -2847,6 +2903,9 @@ class Image_Code_RegisterView(TemplateView):
         # 页面输入的验证码
         # 页面输入的验证码
         response = ResponseObject(lang)
         response = ResponseObject(lang)
         valid_code = request_dict.get('id_v_code', None)
         valid_code = request_dict.get('id_v_code', None)
+        unique = request_dict.get('unique', None)
+        if unique:
+            delete_local_account(unique)
 
 
         if not all([userEmail, password, lang, imageCodeId, valid_code]):
         if not all([userEmail, password, lang, imageCodeId, valid_code]):
             return response.json(444)
             return response.json(444)
@@ -3455,3 +3514,116 @@ class AppleAuthLogin(View):
             print('---')
             print('---')
             print(user_qs)
             print(user_qs)
             return self.do_login(user_qs, response)
             return self.do_login(user_qs, response)
+
+
+class LocalUserView(View):
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = request.GET
+        operation = kwargs.get('operation', None)
+        return self.validate(request_dict, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = request.POST
+        operation = kwargs.get('operation', None)
+        print('start_time='+ str((time.time())))
+        ip=CommonService.get_ip_address(request)
+        print('end_time=' + str((time.time())))
+        return self.validate(request_dict, operation)
+
+    def validate(self, request_dict, operation):
+        language = request_dict.get('language', None)
+        response = ResponseObject(lang=language)
+        if operation == 'login':
+            return self.do_local_login(request_dict, response)
+        else:
+            return response.json(404)
+
+    def do_local_login(self, request_dict, response):
+        username = request_dict.get('username', None)
+        app_bundle_id = request_dict.get('app_bundle_id', None)
+
+        if username is None:
+            return response.json(444)
+
+        user_qs = Device_User.objects.filter(username=username)
+        if user_qs.exists():
+            return self.do_login(user_qs, response)
+        else:
+            # 如果用户为绑定过则创建用户并进行登录返回token
+            userID = CommonService.getUserID(μs=False, setOTAID=True)
+            nickname = 'local_{num}'.format(num=CommonService.RandomStr(6, False))
+            return self.do_register(userID, username, nickname, response, app_bundle_id)
+
+    # 登录
+    def do_login(self, user_qs, response):
+        now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
+        userID = user_qs[0].userID
+        print('userID' + userID)
+        tko = TokenObject()
+        user_list = user_qs.values("NickName", "userIconUrl", "userIconPath", "username", "userEmail", "phone")
+        res = tko.generate(data={'userID': userID, 'lang': response.lang, 'user': user_list[0]["username"]})
+        # 增加角色
+        user_qs[0].role.add(Role.objects.get(rid=1))
+        role_dict = ModelService.own_role(userID=userID)
+        res['rid'] = role_dict['rid']
+        res['roleName'] = role_dict['roleName']
+        res['permList'] = ModelService.own_permission(userID)
+        res['userID'] = userID
+        # 昵称,邮箱,电话,刷新,头像
+        userIconPath = str(user_list[0]["userIconPath"])
+        if userIconPath and userIconPath.find('static/') != -1:
+            userIconPath = userIconPath.replace('static/', '').replace('\\', '/')
+            res['userIconUrl'] = SERVER_DOMAIN + 'account/getAvatar/' + userIconPath
+        else:
+            res['userIconUrl'] = ''
+        res['NickName'] = user_list[0]["NickName"] if user_list[0]["NickName"] is not None else ''
+        res['username'] = user_list[0]["username"] if user_list[0]["username"] is not None else ''
+        res['userEmail'] = user_list[0]["userEmail"] if user_list[0]["userEmail"] is not None else ''
+        res['phone'] = user_list[0]["phone"] if user_list[0]["phone"] is not None else ''
+        print(res)
+        # 添加用户登录类型
+        oauth_qs = UserOauth2Model.objects.filter(userID__userID=userID)
+        auth_type = 0
+        if oauth_qs.exists():
+            auth_type = oauth_qs[0].authType
+        res['authType'] = auth_type
+        user_qs.update(last_login=now_time, online=True)
+        return response.json(0, res)
+
+    def do_register(self, userID, username, nickname, response, appBundleId):
+        data_valid = DataValid()
+        if data_valid.name_validate(userID) is not True:
+            return response.json(105)
+        try:
+            Device_User.objects.create(
+                username=username,
+                NickName=nickname,
+                password=make_password('123456'),
+                userID=userID,
+                is_active=True,
+                user_isValid=True,
+                is_local=True
+            )
+
+        except Exception as e:
+            errorInfo = traceback.format_exc()
+            print(errorInfo)
+            return response.json(424, repr(e))
+        else:
+            user_qs = Device_User.objects.filter(Q(userID=userID))
+            print('---')
+            print(user_qs)
+            return self.do_login(user_qs, response)
+
+
+def delete_local_account(username):
+    user_qs = Device_User.objects.filter(username=username)
+    print(user_qs)
+    if user_qs.exists():
+        user = user_qs[0]
+        if user.is_local:
+            user.delete()
+            Device_Info.objects.filter(userID__userID=user.userID).delete()

+ 13 - 2
Model/models.py

@@ -1,5 +1,4 @@
 from itertools import chain
 from itertools import chain
-from Service.CommonService import CommonService
 from django.contrib.auth.models import BaseUserManager, AbstractBaseUser
 from django.contrib.auth.models import BaseUserManager, AbstractBaseUser
 from django.db import models
 from django.db import models
 from django.utils import six, timezone
 from django.utils import six, timezone
@@ -149,6 +148,7 @@ class Device_User(AbstractBaseUser):
     phone = models.CharField(max_length=16, verbose_name=u'手机号', default='', blank=True)
     phone = models.CharField(max_length=16, verbose_name=u'手机号', default='', blank=True)
     fingerprint_enable = models.SmallIntegerField(default=0, verbose_name=u'是否开启了指纹登录') # 0:未开启,1:已开启
     fingerprint_enable = models.SmallIntegerField(default=0, verbose_name=u'是否开启了指纹登录') # 0:未开启,1:已开启
     fingerprint_key = models.CharField(max_length=128, default='', verbose_name=u'客户端用于解码的密钥等信息')
     fingerprint_key = models.CharField(max_length=128, default='', verbose_name=u'客户端用于解码的密钥等信息')
+    is_local = models.BooleanField(blank=True, default=False, verbose_name=u'是否是本地登录用户')
     objects = UserManager()
     objects = UserManager()
 
 
     USERNAME_FIELD = 'userID'  # 必须有一个唯一标识
     USERNAME_FIELD = 'userID'  # 必须有一个唯一标识
@@ -288,7 +288,7 @@ class Equipment_Info(models.Model):
     alarm = models.CharField(blank=True, max_length=256, verbose_name=u'报警信息')
     alarm = models.CharField(blank=True, max_length=256, verbose_name=u'报警信息')
     eventTime = models.CharField(blank=True, default='', max_length=16, verbose_name=u'设备报警时间')
     eventTime = models.CharField(blank=True, default='', max_length=16, verbose_name=u'设备报警时间')
     receiveTime = models.CharField(blank=True, default='', max_length=16, verbose_name=u'接收到报警时间')
     receiveTime = models.CharField(blank=True, default='', max_length=16, verbose_name=u'接收到报警时间')
-    userID_id = models.CharField(default='',  db_index=True,blank=True, max_length=32, verbose_name=u'用户ID')
+    userID_id = models.CharField(default='',  db_index=True, blank=True, max_length=32, verbose_name=u'用户ID')
     is_st = models.SmallIntegerField(default=0, verbose_name='是否截图')  # 0 否,1 是图,2,视频
     is_st = models.SmallIntegerField(default=0, verbose_name='是否截图')  # 0 否,1 是图,2,视频
     message_id = models.CharField(max_length=32, default='', verbose_name='第三方推送服务器返回的id')
     message_id = models.CharField(max_length=32, default='', verbose_name='第三方推送服务器返回的id')
     push_type = models.SmallIntegerField(default=0, verbose_name='第三方推送服务器标志。0:APNS推送,1:谷歌推送,2:极光推送')
     push_type = models.SmallIntegerField(default=0, verbose_name='第三方推送服务器标志。0:APNS推送,1:谷歌推送,2:极光推送')
@@ -751,6 +751,7 @@ class UserExModel(models.Model):
     userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)
     userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)
     appBundleId = models.CharField(default='', max_length=32, verbose_name=u'appID')
     appBundleId = models.CharField(default='', max_length=32, verbose_name=u'appID')
     region = models.CharField(default='', max_length=16, verbose_name='区域语言')
     region = models.CharField(default='', max_length=16, verbose_name='区域语言')
+    country = models.CharField(default='', max_length=100, verbose_name='国家名称')
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
     updTime = models.IntegerField(verbose_name='更新时间', default=0)
     updTime = models.IntegerField(verbose_name='更新时间', default=0)
 
 
@@ -1012,6 +1013,16 @@ class EquipmentInfoExStatisticsModel(models.Model):
         verbose_name_plural = verbose_name
         verbose_name_plural = verbose_name
 
 
 
 
+class CountryIPModel(models.Model):
+    id = models.AutoField(primary_key=True)
+    ip = models.CharField(default='', max_length=32, verbose_name='ip')
+    user_ex = models.ForeignKey(UserExModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联用户扩展信息表id')
+    add_time = models.IntegerField(default=0, verbose_name='添加时间')
+
+    class Meta:
+        db_table = 'country_ip'
+        verbose_name = 'ip-国家统计表'
+        verbose_name_plural = verbose_name
 
 
 
 
 
 

+ 4 - 0
Service/CommonService.py

@@ -14,6 +14,7 @@ from Ansjer.config import BASE_DIR, UNICODE_ASCII_CHARACTER_SET
 
 
 # 复用性且公用较高封装代码在这
 # 复用性且公用较高封装代码在这
 from Controller.CheckUserData import RandomStr
 from Controller.CheckUserData import RandomStr
+from Service.ModelService import ModelService
 
 
 
 
 class CommonService:
 class CommonService:
@@ -95,11 +96,14 @@ class CommonService:
     # 根据ip获取地址
     # 根据ip获取地址
     @staticmethod
     @staticmethod
     def getAddr(ip):
     def getAddr(ip):
+        print('start_time=' + str(time.time()))
         base_dir = BASE_DIR
         base_dir = BASE_DIR
         # ip数据库
         # ip数据库
         db = IPIPDatabase(base_dir + '/DB/17monipdb.dat')
         db = IPIPDatabase(base_dir + '/DB/17monipdb.dat')
         addr = db.lookup(ip)
         addr = db.lookup(ip)
+        # ModelService.add_tmp_log(addr)
         ts = addr.split('\t')[0]
         ts = addr.split('\t')[0]
+        print('end_time=' + str(time.time()))
         return ts
         return ts
 
 
     # 通过ip检索ipip指定信息 lang为CN或EN
     # 通过ip检索ipip指定信息 lang为CN或EN

+ 18 - 1
Service/ModelService.py

@@ -5,7 +5,6 @@ import requests
 
 
 from Ansjer.config import BASE_DIR
 from Ansjer.config import BASE_DIR
 from Model.models import *
 from Model.models import *
-from Service.CommonService import CommonService
 import json
 import json
 from django.db.models import Q
 from django.db.models import Q
 
 
@@ -204,6 +203,24 @@ class ModelService:
         file.flush()
         file.flush()
         file.close()
         file.close()
 
 
+    @staticmethod
+    def add_ip_log(ip, info):
+        file_path = '/'.join((BASE_DIR, 'static/get_timezone.log'))
+        file = open(file_path, 'a+')
+        file.write(ip + "; info:" + str(info) + "; time:" + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
+        file.write('\n')
+        file.flush()
+        file.close()
+
+    @staticmethod
+    def add_tmp_log(info):
+        file_path = '/'.join((BASE_DIR, 'static/tmp_test.log'))
+        file = open(file_path, 'a+')
+        file.write("info:" + str(info))
+        file.write('\n')
+        file.flush()
+        file.close()
+
 
 
 def notify_alexa_delete(userID, UID):
 def notify_alexa_delete(userID, UID):
     url = 'https://www.zositech.xyz/deviceStatus/delete'
     url = 'https://www.zositech.xyz/deviceStatus/delete'