Explorar o código

Merge branch 'dev' of http://192.168.136.99:3000/SERVER/AnsjerServer into dev

# Conflicts:
#	Controller/IotCoreController.py
tanghongbin %!s(int64=4) %!d(string=hai) anos
pai
achega
4879e82acc

+ 2 - 2
Ansjer/urls.py

@@ -12,7 +12,7 @@ from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppIn
     ApplicationController, UserExController, CloudStorage, TestApi, UserBrandControllerV2, \
     StatisticsController, Alexa, FAQController, AppLogController, EquipmentVersionLimit, VoicePromptController, \
     CDKController, \
-    DeviceTypeController, CloudTest, Cloudsum, IotCoreController, OperatingLogs, ProcessInfo, UserRegionController, \
+    DeviceTypeController, CloudTest, Cloudsum, IotCoreController, OperatingLogs, ProcessInfo, RegionCountryController, \
     VerifyCodeController
 
 urlpatterns = [
@@ -279,7 +279,7 @@ urlpatterns = [
     url(r'^ProcessInfo/(?P<operation>.*)$', ProcessInfo.ProcessInfoView.as_view()),
     url(r'^Cloudsum/(?P<operation>.*)$', Cloudsum.Cloudsum.as_view()),
 
-    url(r'userRegion/(?P<operation>.*$)', UserRegionController.UserRegionView.as_view()),
+    url(r'regionCountry/(?P<operation>.*$)', RegionCountryController.RegionCountryView.as_view()),
 
     # 验证验证码
     url(r'verifyCode/(?P<operation>.*$)', VerifyCodeController.VerifyCodeView.as_view()),

+ 8 - 4
Controller/IotCoreController.py

@@ -5,7 +5,7 @@ import time
 import boto3
 from django.views import View
 
-from Model.models import Device_User, UserRegionModel
+from Model.models import Device_User, Device_Info, RegionCountryModel
 from Object.IOTCore.IotObject import ChinaIOTClient, AsiaIOTClient, EuropeIOTClient, AmericaIOTClient
 from Object.ResponseObject import ResponseObject
 from Service.CommonService import CommonService
@@ -49,9 +49,13 @@ class IotCoreView(View):
             if token != time_stamp and distance > 600:
                 return response.json(404)
 
-            user_region_qs = UserRegionModel.objects.filter(user__device_info__UID=uid)
-            if user_region_qs.exists():
-                user_region = user_region_qs[0]
+            region_country_qs = Device_Info.objects.filter(UID=uid).values('userID__region_country')
+            if not region_country_qs.exists():
+                return response.json(173)
+
+            region_country_qs = RegionCountryModel.objects.filter(number=region_country_qs[0]['userID__region_country'])
+            if region_country_qs.exists():
+                user_region = region_country_qs[0]
 
                 if user_region.region_id == 1:
                     iotClient = ChinaIOTClient()

+ 65 - 0
Controller/RegionCountryController.py

@@ -0,0 +1,65 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+import time
+
+from django.views import View
+
+from Model.models import Device_User, RegionCountryModel
+from Object.ResponseObject import ResponseObject
+from Object.TokenObject import TokenObject
+import  json
+
+class RegionCountryView(View):
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation', None)
+        request_dict = request.GET
+        return self.validate(request_dict, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation', None)
+        request_dict = request.POST
+        return self.validate(request_dict, operation)
+
+    def validate(self, request_dict, operation):
+        token = TokenObject(request_dict.get('token', None))
+
+        response = ResponseObject()
+
+        if token.code != 0:
+            return response.json(token.code)
+
+        if operation == 'initUserRegion':
+            return self.do_initUserRegion(token.userID, request_dict, response)
+        elif operation == 'initRegionDate':
+            return self.do_initRegionDate(token.userID, request_dict, response)
+        else:
+            return response.json(404)
+
+    def do_initUserRegion(self, userID, request_dict, response):
+        user_qs = Device_User.objects.filter(userID=userID)
+        number = request_dict.get('number', None)
+        if not user_qs.exists():
+            return response.json(309)
+        user_qs[0].update(regionCountry = number)
+
+    def do_initRegionDate(self, request_dict, response):
+        filepath = request_dict.get('filepath')
+        fobj = open(filepath)
+        region_list = json.loads(fobj)
+
+        now_time = int(time.time())
+
+        for region in region_list:
+            name = region['name']
+            region_id = region['region_id']
+
+            countries_list = region['countries']
+            for countries in countries_list:
+                cn = countries['cn']
+                en = countries['en']
+                number = countries['number']
+
+                RegionCountryModel.objects.create(number=number, region_id=region_id, name=name, cn=cn, en=en, add_time=now_time, update_time=now_time)

+ 28 - 10
Controller/TestApi.py

@@ -39,7 +39,7 @@ from django.contrib.auth.hashers import make_password, check_password  # 对密
 
 from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_ARN, SERVER_DOMAIN, PAYPAL_CRD, \
     SERVER_DOMAIN_SSL
-from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket
+from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket, StsCrdModel
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.UidTokenObject import UidTokenObject
@@ -99,9 +99,15 @@ class testView(View):
         elif operation == 'generateToken':
             userID = '158943604783713800138000'
             return self.generate_token(request_dict,userID)
+        elif operation == 'generateUidToken':
+            userID = '158943604783713800138000'
+            return self.generate_uid_token(request_dict,userID)
         elif operation == 'test_upload_s3':
             userID = '158943604783713800138000'
             return self.test_upload_s3(request_dict)
+        elif operation == 'test_upload_s3_amazon_comprehend':
+            userID = '158943604783713800138000'
+            return self.test_upload_s3_amazon_comprehend(request_dict)
         else:
             return 123
 
@@ -119,7 +125,7 @@ class testView(View):
         s3_client = session.client('s3')
 
         #上传
-        # s3_client.put_object(Bucket="azvod1", Key="file/rule.txt", Body=open(r"E:\download\Shadowsocks-4.1.10.0\user-rule.txt", 'rb').read())
+        s3_client.put_object(Bucket="azvod1", Key="file/rule.txt", Body=open(r"E:\download\Shadowsocks-4.1.10.0\user-rule.txt", 'rb').read())
 
         #下载
         resp = s3_client.get_object(Bucket="azvod1", Key="file/rule.txt")
@@ -293,10 +299,10 @@ class testView(View):
     def do_test_get_sign_sts(self, request_dict, ip, response):
         # uid = 'GZL2PEFJPLY7W6BG111A'
         # channel = 2
-        uid = 'VVDHCVBYDKFMJRWA111A'
+        uid = 'M1BYBPCHNS92PBLG111A'
         channel = 1
         now_time = int(time.time())
-        ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel, endTime__gte=now_time). \
+        ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel). \
             values("bucket__mold", "bucket__bucket", "bucket__endpoint", "bucket__region", "endTime")
         if ubqs.exists():
             if ubqs[0]["bucket__mold"] == 0:
@@ -404,7 +410,7 @@ class testView(View):
                     ]
                 }
                 response = boto3_sts.get_federation_token(
-                    Name='{role_name}'.format(role_name=uid + '_' + channel),
+                    Name='{role_name}'.format(role_name=uid + '_' + str(channel)),
                     Policy=json.dumps(Policy),
                     DurationSeconds=7200
                 )
@@ -684,17 +690,29 @@ class testView(View):
         #UserIdToken
         tko = TokenObject()
         res = tko.generate(
-            data={'userID': 158943594633713800138000, 'lang': 'cn', 'user': '597471180@qq.com', 'm_code': '123413243214'})
+            data={'userID': 160868920610913800138000, 'lang': 'cn', 'user': '13923452707', 'm_code': '123413243214'})
 
         #uidToken
         # utko = UidTokenObject()
         # res = utko.generate(data={'uid': 'H2CMKET2LDC3ZBL4111A','channel': 1})
         return JsonResponse(status=200, data=res,safe=False)
 
+    def generate_uid_token(self, request_dict, userID):
+        # UserIdToken
+        # tko = TokenObject()
+        # res = tko.generate(
+        #     data={'userID': 158943594633713800138000, 'lang': 'cn', 'user': '597471180@qq.com',
+        #           'm_code': '123413243214'})
+
+        utko = UidTokenObject()
+        rr = utko.generate(data={'uid':'M1BYBPCHNS92PBLG111A','channel':1})
+        return JsonResponse(status=200, data=rr, safe=False)
+
+
     def test_upload_s3(self,request_dict):
-        aws_key = "ASIA2E67UIMD454ZXCKZ" #【你的 aws_access_key】
-        aws_secret = "4zqyp4xEc7kf+RVPxHN4pw2G6o1zPEeZjCFvsQg5" # 【你的 aws_secret_key】
-        aws_session_token = "FwoGZXIvYXdzEHUaDNFT8HDNEJnDk7sHyiLoAd7WDsGQtulT19i8BDTPPdG3O3ALMiUs1d/Am5U9ooWo+TNVvkgdI7VN2gcIFP+Ib5QH4IA8ikpYDHC0bxckkZwrBp9EmrZpHgDPEl6tOdpkyVRmquf+a4BcC1794uhpXF40dm46B+FV1Rr61tG741JResI826CZ9oIKxhLcnkT6E0KFZ4WodaRzOswjZpUoYJf5Et+mGQdoOhKTdnwe/o3rbgZ7IcI0m3w6QrFL6M5gb1I8K0uzUwIKcxnvrjPLcQU6TwH002+J51GnygMs8rGGTxaKOuyVgovTx2YpLSj79itEnpQhM64ohvmE/QUyKdTiqfyqacYXV8WkoUEMnw+UkW8QeLFJqCwf77UhWN9zP+SBuC0hhW20"
+        aws_key = "ASIA2E67UIMDTJFRF7UE" #【你的 aws_access_key】
+        aws_secret = "5u6MDvm3Fabdbc6EG9+JPJE3x07peNkrvok76Dqq" # 【你的 aws_secret_key】
+        aws_session_token = "FwoGZXIvYXdzEHQaDKQchZxanXOpNJ2UriLoARUmKF/Uf6HZMhB4Bdo1Df4BlirgpqOyXmMULjx1yvqah1+BKIV2rzEoxxaVmvjcvLjHMQamPR7QzLZYP/WgJ6biPTnfqJWy5rCVpIZtD3D2nmGWAf5RSedADILJgBQmrXumFX2jrnm6THbqfdyfT2eitKt5ZD82zvLOaHMWu7mzomzmye8Eimt28Dhj6jsLeZPxOhhHBLUi+gddHAMCQq8HmGbnsXN5OrOBvqreRAxdR/u6vuQHbVpV3b8V5nkAtTVhOCaGRcPETARB8F/jFuFRhW9tAjPZisP/SEa8vUDR32FoMNQeda4o5+7l/gUyKYlem5bIB96gywY6s4C8c1PAa3l09+5tdGNp5laAJf7vMUzMJckR2EgF"
         session = Session(aws_access_key_id=aws_key,
                           aws_secret_access_key=aws_secret,
                           aws_session_token=aws_session_token,
@@ -707,4 +725,4 @@ class testView(View):
         file_obj = s3.Bucket(bucket).put_object(Key=upload_key, Body=upload_data)
         print('--------')
         print(file_obj)
-        return JsonResponse(status=200, data=file_obj,safe=False)
+        return JsonResponse(status=200, data=file_obj, safe=False)

+ 1 - 16
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 Controller.CheckUserData import DataValid, date_handler, RandomStr
 from Model.models import Device_User, Role, UidPushModel, UserOauth2Model, UserExModel, Device_Info, UidSetModel, \
-    UserAppFrequencyModel, CountryIPModel, UserRegionModel
+    UserAppFrequencyModel, CountryIPModel
 from Object.AWS.SesClassObject import SesClassObject
 from Object.AliSmsObject import AliSmsObject
 from Object.RedisObject import RedisObject
@@ -1782,10 +1782,6 @@ class v3LoginView(TemplateView):
         if oauth_qs.exists():
             auth_type = oauth_qs[0].authType
 
-        region_id = 0
-        user_region_qs = UserRegionModel.objects.filter(user_id=userID)
-        if user_region_qs.exists():
-            region_id = user_region_qs[0].region_id
 
         if tko.code == 0:
             now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
@@ -1809,7 +1805,6 @@ class v3LoginView(TemplateView):
             # res['fingerprint_key'] = CommonService.encode_data(content=users['fingerprint_key'], start=2)
             res['authType'] = auth_type
             res['subscribe_email'] = users['subscribe_email'] if users['subscribe_email'] is not None else ''
-            res['regionID'] = region_id
             return response.json(0, res)
         else:
             return response.json(tko.code)
@@ -3253,10 +3248,6 @@ class v3LoginByCodeView(View):
         if oauth_qs.exists():
             auth_type = oauth_qs[0].authType
 
-        region_id = 0
-        user_region_qs = UserRegionModel.objects.filter(user_id=userID)
-        if user_region_qs.exists():
-            region_id = user_region_qs[0].region_id
 
         if tko.code == 0:
             now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
@@ -3277,7 +3268,6 @@ class v3LoginByCodeView(View):
             res['userEmail'] = users['userEmail'] if users['userEmail'] is not None else ''
             res['phone'] = users['phone'] if users['phone'] is not None else ''
             res['authType'] = auth_type
-            res['region_id'] = region_id
             return response.json(0, res)
         else:
             return response.json(tko.code)
@@ -3508,11 +3498,6 @@ class AppleAuthLogin(View):
             auth_type = oauth_qs[0].authType
         res['authType'] = auth_type
 
-        region_id = 0
-        user_region_qs = UserRegionModel.objects.filter(user_id=userID)
-        if user_region_qs.exists():
-            region_id = user_region_qs[0].region_id
-        res['region_id'] = region_id
         user_qs.update(last_login=now_time, online=True)
         return response.json(0, res)
 

+ 1 - 5
Controller/UserManger.py

@@ -12,7 +12,7 @@ from django.views.generic import TemplateView, View
 
 from Ansjer.config import BASE_DIR
 from Ansjer.config import SERVER_DOMAIN
-from Model.models import Role, Device_User, UserOauth2Model, UserExModel, UserRegionModel
+from Model.models import Role, Device_User, UserOauth2Model, UserExModel
 from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
@@ -66,10 +66,6 @@ class showUserMoreView(TemplateView):
                 roleName = ModelService.getRole(rid=v['fields']['role'][0])
                 sqlDict["datas"][k]['fields']['rolename'] = roleName
         # 增加oauth2关联数据
-        user_region_qs = UserRegionModel.objects.filter(user_id=userID)
-        if user_region_qs.exists():
-            region_id = user_region_qs[0].region_id
-            sqlDict['datas'][0]['region_id'] = region_id
         ua_qs = UserOauth2Model.objects.filter(userID_id=userID).values_list('authType',flat=True)
         sqlDict["oauth2"] = list(ua_qs)
         return response.json(0, sqlDict)

+ 0 - 61
Controller/UserRegionController.py

@@ -1,61 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-import time
-
-from django.views import View
-
-from Model.models import Device_User, UserRegionModel
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
-
-
-class UserRegionView(View):
-
-    def get(self, request, *args, **kwargs):
-        request.encoding = 'utf-8'
-        operation = kwargs.get('operation', None)
-        request_dict = request.GET
-        return self.validate(request_dict, operation)
-
-    def post(self, request, *args, **kwargs):
-        request.encoding = 'utf-8'
-        operation = kwargs.get('operation', None)
-        request_dict = request.POST
-        return self.validate(request_dict, operation)
-
-    def validate(self, request_dict, operation):
-        token = TokenObject(request_dict.get('token', None))
-
-        response = ResponseObject()
-
-        if token.code != 0:
-            return response.json(token.code)
-
-        if operation == 'init':
-            return self.do_init(token.userID, request_dict, response)
-        else:
-            return response.json(404)
-
-    def do_init(self, userID, request_dict, response):
-        user_qs = Device_User.objects.filter(userID=userID)
-        if not user_qs.exists():
-            return response.json(309)
-
-        region_id = request_dict.get('country_number', None)
-
-        if region_id:
-            user_region_qs = UserRegionModel.objects.filter(user__userID=userID)
-            now_time = int(time.time())
-            if not user_region_qs.exists():
-                user_region = UserRegionModel(user_id=userID, region_id=region_id, add_time=now_time, update_time=now_time)
-                user_region.save()
-            else:
-                update = {
-                    'region_id': region_id,
-                    'update_time': now_time
-                }
-
-                user_region_qs.update(**update)
-            return response.json(0)
-        else:
-            return response.json(444)

+ 1 - 1
Controller/VoicePromptController.py

@@ -110,7 +110,7 @@ class VoicePromptView(View):
             auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
             bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'ansjer-static-resources')
             filename = res['filename']
-            obj = 'voice_prompt/uid/channel/'.format(uid=uid, channel=channel) + filename
+            obj = 'voice_prompt/{uid}/{channel}/'.format(uid=uid, channel=channel) + filename
             url = bucket.sign_url('GET', obj, 3600)
             res['url'] = url
             del res['filename']

+ 16 - 12
Model/models.py

@@ -119,6 +119,21 @@ class Role(models.Model):
             return permslist
 
 
+class RegionCountryModel(models.Model):
+    number = models.IntegerField(primary_key=True, verbose_name='唯一标识')
+    region_id = models.IntegerField(unique=True, verbose_name='大洲编号')
+    name = models.CharField(unique=True, 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)
@@ -150,6 +165,7 @@ 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'  # 必须有一个唯一标识
@@ -1258,15 +1274,3 @@ class ProcessInfoLogsModel(models.Model):
         verbose_name = '过程信息表'
         verbose_name_plural = verbose_name
 
-
-class UserRegionModel(models.Model):
-    id = models.AutoField(primary_key=True)
-    user = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE, verbose_name='关联用户表')
-    region_id = models.IntegerField(default=0, verbose_name='地区id')
-    add_time = models.IntegerField(default=0, verbose_name='添加时间')
-    update_time = models.IntegerField(default=0, verbose_name='更新时间')
-
-    class Meta:
-        db_table = 'user_region'
-        verbose_name = '用户地区表'
-        verbose_name_plural = verbose_name