Преглед изворни кода

feature:
分区分流接口添加,region migrate by uidset

chenjunkai пре 6 година
родитељ
комит
ba01a7ec2f
4 измењених фајлова са 72 додато и 13 уклоњено
  1. 3 3
      Ansjer/urls.py
  2. 51 0
      Controller/EquipmentManager.py
  3. 2 1
      Model/models.py
  4. 16 9
      Object/ETkObject.py

+ 3 - 3
Ansjer/urls.py

@@ -3,7 +3,7 @@ from django.urls import path, re_path
 
 from Controller import FeedBack, EquipmentOTA, EquipmentInfo, EquipmentSensor, StreamMedia, AdminManage, AppInfo, \
     AccessLog, Test, MealManage, DeviceManage, EquipmentStatus, SysManage, DeviceLog, LogAccess, AppColophon, \
-    EquipmentManager, LogManager, PermissionManager, OTAEquipment, shareUserPermission, UidSetController,\
+    EquipmentManager, LogManager, PermissionManager, OTAEquipment, shareUserPermission, UidSetController, \
     UserManger, CheckUserData, \
     UserController, CloudVod, OrderContrller, VodBucket, DetectController, DeviceShare, UserBrandController, \
     StsOssController, UIDPreview, SysMsg
@@ -142,9 +142,9 @@ urlpatterns = [
 
     url(r'^equipment/flowUpdate', EquipmentManager.update_uid_set),
 
+    url(r'^deviceShadow/update', EquipmentManager.update_device_shadow),
+
     # 分区分流
-    # url(r'^getTZ$', EquipmentStatus.getTZ),
-    # 新的设备接口
     path('Test', Test.Test.as_view()),
     # 路由加参数参考
     # url(r'^(?P<path>.*)/(?P<UID>.*)/lls$', Test.Test.as_view(), name=u'gg'),

+ 51 - 0
Controller/EquipmentManager.py

@@ -11,7 +11,9 @@ from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
 from Service.ModelService import ModelService
 from Ansjer.config import OSS_STS_ACCESS_SECRET, OSS_STS_ACCESS_KEY
+from Object.ETkObject import ETkObject
 import oss2
+from django.http import JsonResponse
 
 
 #     查询用户设备
@@ -698,3 +700,52 @@ def update_uid_set(request):
             return response.json(14)
     else:
         return response.json(tko.code)
+
+
+# 设备影子更新
+def update_device_shadow(request):
+    request.encoding = 'utf-8'
+    response = ResponseObject()
+    if request.method == 'POST':
+        request_dict = request.POST
+    elif request.method == 'GET':
+        request_dict = request.GET
+    else:
+        return response.json(444)
+    etk = request_dict.get('etk', None)
+    eto = ETkObject(etk)
+    uid = eto.uid
+    if uid:
+        ucode = request_dict.get('ucode', None)
+        version = request_dict.get('version', None)
+        p2p_region = request_dict.get('p2p_region', None)
+        us_qs = UidSetModel.objects.filter(uid=uid)
+        # 更新
+        nowTime = int(time.time())
+        if us_qs.exists():
+            update_dict = {'updTime':nowTime}
+            if p2p_region:
+                update_dict['p2p_region'] = p2p_region
+            if ucode:
+                update_dict['ucode'] = ucode
+            if version:
+                update_dict['version'] = version
+            us_qs.update(**update_dict)
+            return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
+        # 新增
+        else:
+            create_dict = {
+                'uid': uid,
+                'addTime': nowTime,
+                'updTime': nowTime,
+            }
+            if p2p_region:
+                create_dict['p2p_region'] = p2p_region
+            if ucode:
+                create_dict['ucode'] = ucode
+            if version:
+                create_dict['version'] = version
+            UidSetModel.objects.create(**create_dict)
+            return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
+    else:
+        return JsonResponse(status=200, data={'code': 403, 'msg': 'error etk'})

+ 2 - 1
Model/models.py

@@ -364,7 +364,7 @@ class StatResModel(models.Model):
 class FeedBackModel(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
     userID = models.ForeignKey(Device_User, null=True, blank=True, to_field='userID', on_delete=models.CASCADE)
-    type = models.SmallIntegerField(default=0, verbose_name='反馈类型') #【0:产品建议,1:功能异常,2:安全问题】
+    type = models.SmallIntegerField(default=0, verbose_name='反馈类型')  # 【0:产品建议,1:功能异常,2:安全问题】
     status = models.SmallIntegerField(default=0, verbose_name='状态:0未解决/解决')
     content = models.TextField(blank=True, null=True, verbose_name=u'反馈描述')
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
@@ -656,6 +656,7 @@ class UidSetModel(models.Model):
     # addTime 2019年 05月 27日 星期一 16:52:55 CST
     ucode = models.CharField(max_length=32, verbose_name='设备产品码', default='')
     version = models.CharField(max_length=32, verbose_name='设备版本', default='')
+    p2p_region = models.CharField(max_length=16, verbose_name='设备区域', default='ALL')  # ALL CN EU US
 
     class Meta:
         db_table = 'uid_set'

+ 16 - 9
Service/ETkObject.py → Object/ETkObject.py

@@ -19,14 +19,21 @@ import urllib.parse
 class ETkObject(object):
     def __init__(self, etk):
         self.uid = ''
+        self.parseUid(etk)
 
     def parseUid(self, etk):
-        c = base64.b64decode(etk)
-        c = c[2:-2]
-        c = urllib.parse.unquote(c.decode('utf-8'))
-        c = base64.b64decode(c)
-        uid = c.decode('utf-8')
-        if len(uid):
-            return uid
-        else:
-            return False
+        try:
+            c = base64.b64decode(etk)
+            c = c[2:-2]
+            c = urllib.parse.unquote(c.decode('utf-8'))
+            c = base64.b64decode(c)
+            uid = c.decode('utf-8')
+            if len(uid) == 20:
+                self.uid = uid
+        except Exception as e:
+            print(repr(e))
+
+
+
+eto = ETkObject('R19XRFZZVGpZMU5VUkRXVE5NVUZsWE1qRXhNVUU9ViY=')
+print(eto.uid)