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

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

pengzhibo168 пре 5 година
родитељ
комит
a37fbdd7da

+ 2 - 1
Ansjer/config.py

@@ -123,5 +123,6 @@ FCM_CONFIG = {
     'com.ansjer.customizeda_a': 'AAAAb9YP3rk:APA91bF0HzizVWDc6dKzobY9fsaKDK4veqkOZehDXshVXs8pEEvNWjR_YWbhP60wsRYCHCal8fWN5cECVOWNMMzDsfU88Ty2AUl8S5FtZsmeDTkoGntQOswBr8Ln7Fm_LAp1VqTf9CpM',
     'com.ansjer.customizedd_a': 'AAAAb9YP3rk:APA91bHkxOozJWBrlv3eNT0PgwosYENI9aM4Zuzd418cX-iKkpa1zFNC5MkNDKApx1KH4fhmAfaJ6IMRZ0nj5GIxCpstDYCaZWwgC7-etqfSxG5JAq8LOwJx0o_1tUZqwjIic8ztsg0o',
     'com.ansjer.adcloud_a': 'AAAAb9YP3rk:APA91bFm06w8b9OKQ0gz0iaWFuRqRIkvgAz6z7Gp3dBU_X-LNGJQd1hc1QR2W7QzBglF8SHtERA45a2lbdLRa5qv7hxfd6W_sJLBK7dA8jklsOQBvy505oUzTwMKWy4TwH-exps9KrhO',
-    'com.ansjer.accloud_a': 'AAAAb9YP3rk:APA91bFm06w8b9OKQ0gz0iaWFuRqRIkvgAz6z7Gp3dBU_X-LNGJQd1hc1QR2W7QzBglF8SHtERA45a2lbdLRa5qv7hxfd6W_sJLBK7dA8jklsOQBvy505oUzTwMKWy4TwH-exps9KrhO'
+    'com.ansjer.accloud_a': 'AAAAb9YP3rk:APA91bFm06w8b9OKQ0gz0iaWFuRqRIkvgAz6z7Gp3dBU_X-LNGJQd1hc1QR2W7QzBglF8SHtERA45a2lbdLRa5qv7hxfd6W_sJLBK7dA8jklsOQBvy505oUzTwMKWy4TwH-exps9KrhO',
+    'com.ansjer.zccloud_ab': 'AAAAb9YP3rk:APA91bHu8u-CTpcd0g6lKPo0WNVqCi8jZub1cPPbSAY9AucT1HxlF65ZDUko9iG8q2ch17bwu9YWHpK1xI1gHSRXCslLvZlXEmHZC0AG3JKg15XuUvlFKACIajUFV-pOeGRT8tM6-31I',
 }

+ 0 - 1
Ansjer/config_formal.py

@@ -12,7 +12,6 @@
 @Contact: chanjunkai@163.com
 """
 NGINX_RTMP_STAT = 'http://www.dvema.com/stat'
-SERVER_DOMAIN = 'http://www.dvema.com/'
 SERVER_DOMAIN_SSL = 'https://www.dvema.com/'
 DOMAIN_HOST = 'www.dvema.com'
 SERVER_HOST = 'localhost'

BIN
Ansjer/file/font/simhei.ttf


+ 5 - 11
Ansjer/test/kbt.py

@@ -1,11 +1,5 @@
-import requests
-
-data= {
-    'token':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtX2NvZGUiOiIxMjM0MTMyNDMyMTQiLCJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJleHAiOjE1ODE4MjA2MjcsInVzZXJJRCI6IjE1MTU2NDI2MjMzNzkzOTUxMzgwMDEzODAwMSIsImxhbmciOiJlbiJ9.SuDHinc0xJ5ETclE1SY-9lSEoebBTBje6OZ0r4Plqjw',
-    'm_code':"AN02000080B10000001cd3.zccloud_ab",
-    'os_type':'jiguang',
-    'appid':'com.ansjer.zccloud_ab',
-    'udid':"AN02000080b10000001cd3"
-}
-res = requests.post(url='http://test.dvema.com/v2/account/logout',data=data)
-print(res.text)
+trtrt = '0'
+if trtrt:
+    print(1)
+else:
+    print(2)

+ 2 - 0
Ansjer/urls.py

@@ -12,6 +12,8 @@ from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppIn
 
 urlpatterns = [
     url(r'^account/authcode$', UserController.authCodeView.as_view()),
+    url(r'^account/generatepictureCodeView/$', UserController.generatePictureCodeView.as_view()),
+    url(r'^account/imageCodeRegister/$', UserController.Image_Code_RegisterView.as_view()),
     url(r'^account/register$', UserController.registerView.as_view()),
     url(r'^account/login$', UserController.v2LoginView.as_view()),
     url(r'^account/logout$', UserController.LogoutView.as_view()),

+ 84 - 3
Controller/CloudStorage.py

@@ -36,6 +36,8 @@ from Service.CommonService import CommonService
 from Service.ModelService import ModelService
 from Object.ETkObject import ETkObject
 
+SERVER_DOMAIN = 'http://cloudstroage.dvema.com/'
+
 
 # 设备信息添加
 class CloudStorageView(View):
@@ -71,10 +73,12 @@ class CloudStorageView(View):
             if tko.code != 0:
                 return response.json(tko.code)
             userID = tko.userID
-            if operation == 'createPayOrder':
+            if operation == 'createpayorder':
                 return self.do_create_pay_order(request_dict, userID, response)
             elif operation == 'changevodstatus':
                 return self.do_change_vod_status(request_dict, userID, response)
+            elif operation == 'queryvodlist':
+                return self.do_query_vod_list(request_dict, userID, response)
             else:
                 return response.json(414)
 
@@ -218,15 +222,92 @@ class CloudStorageView(View):
                 if sts_qs.exists():
                     sts_qs.update(data=json.dumps(res), addTime=now_time)
                 else:
-                    StsCrdModel.objects.create(uid=uid, channel=channel, data=json.dumps(res), addTime=now_time)
+                    StsCrdModel.objects.create(uid=uid, channel=channel, data=json.dumps(res), addTime=now_time, type=1)
                 return JsonResponse(status=200, data=res)
             else:
                 res = {'code': 404, 'msg': 'data not exists!'}
                 return HttpResponse(json.dumps(res, ensure_ascii=False),
                                     content_type="application/json,charset=utf-8")
 
+    def do_query_vod_list(self, request_dict, userID, response):
+        startTime = int(request_dict.get('startTime',None))
+        endTime = int(request_dict.get('endTime',None))
+        uid =request_dict.get('uid',None)
+        channel = request_dict.get('channel',None)
+        dv_qs = Device_Info.objects.filter(UID=uid,userID_id=userID,isShare=False)
+        if not dv_qs.exists():
+            return response.json(12)
+        now_time = int(time.time())
+        vh_qs = VodHlsModel.objects.filter(uid=uid,channel=channel,time__range=(startTime,endTime))
+
     def do_store_playlist(self, request_dict, response):
-        return
+        uidToken = request_dict.get('uidToken', None)
+        storeTime = request_dict.get('time', None)
+        sec = request_dict.get('sec', None)
+        fg = request_dict.get('fg', None)
+        utko = UidTokenObject(uidToken)
+        if utko.flag is False:
+            return response.json(444, 'uidToken')
+        if not uidToken or not storeTime or not sec:
+            return response.json(0)
+        pass
+        UID = utko.UID
+        channel = utko.channel
+        print('UID:')
+        print(UID)
+        print('channel:')
+        print(channel)
+        now_time = int(time.time())
+        ubqs = UID_Bucket.objects.filter(uid=UID, channel=channel, endTime__gte=now_time). \
+            values("bucket__mold", "bucket__bucket", "bucket__endpoint", "bucket__region", "status", "bucket__storeDay")
+        if ubqs.exists():
+            ub_qs_data = ubqs[0]
+            store_day = ub_qs_data['bucket__storeDay']
+            bucket_id = ub_qs_data['bucket_id']
+            end_time = int(storeTime) + store_day * 86400
+            if ub_qs_data['status'] == 1:
+                if ub_qs_data["bucket__mold"] == 0:
+                    oss_crd_qs = OssCrdModel.objects.filter(uid=UID, channel=channel)
+                    if oss_crd_qs.exists():
+                        VodHlsModel.objects.create(
+                            uid=UID,
+                            channel=channel,
+                            time=storeTime,
+                            endTime=end_time,
+                            bucket_id=bucket_id
+                        )
+                        res = {'code': 0, 'msg': '存储成功'}
+                        return HttpResponse(json.dumps(res, ensure_ascii=False),
+                                            content_type="application/json,charset=utf-8")
+                    else:
+                        res = {'code': 404, 'msg': '设备未购买'}
+                        return HttpResponse(json.dumps(res, ensure_ascii=False),
+                                            content_type="application/json,charset=utf-8")
+                elif ub_qs_data['bucket__mold'] == 1:
+                    sts_qs = StsCrdModel.objects.filter(uid=UID, channel=channel, type=1). \
+                        values("addTime", "data")
+                    if sts_qs.exists():
+                        VodHlsModel.objects.create(
+                            uid=UID,
+                            channel=channel,
+                            time=storeTime,
+                            endTime=end_time,
+                            bucket_id=bucket_id,
+                            fg=fg,
+                        )
+                        res = {'code': 0, 'msg': '存储成功'}
+                        return HttpResponse(json.dumps(res, ensure_ascii=False),
+                                            content_type="application/json,charset=utf-8")
+                    else:
+                        res = {'code': 404, 'msg': '设备未购买'}
+                        return HttpResponse(json.dumps(res, ensure_ascii=False),
+                                            content_type="application/json,charset=utf-8")
+            else:
+                res = {'code': 404, 'msg': '设备未开启'}
+                return HttpResponse(json.dumps(res, ensure_ascii=False), content_type="application/json,charset=utf-8")
+        else:
+            res = {'code': 404, 'msg': '设备未购买'}
+            return HttpResponse(json.dumps(res, ensure_ascii=False), content_type="application/json,charset=utf-8")
 
     def do_change_vod_status(self, request_dict, userID, response):
         uid = request_dict.get('uid', None)

+ 3 - 237
Controller/DetectController.py

@@ -158,242 +158,6 @@ class DetectControllerView(View):
             res.append(p)
         return response.json(0, {'datas': res, 'count': count})
 
-    def do_change_status1(self, userID, request_dict, response):
-
-        uid = request_dict.get('uid', None)
-        token_val = request_dict.get('token_val', None)
-        appBundleId = request_dict.get('appBundleId', None)
-        app_type = request_dict.get('app_type', None)
-        push_type = request_dict.get('push_type', None)
-        status = request_dict.get('status', None)
-        m_code = request_dict.get('m_code', None)
-        # 设备语言
-        lang = request_dict.get('lang', 'en')
-        tz = request_dict.get('tz', '0')
-        # interval = request_dict.get('interval', None)
-        if not status:
-            return response.json(444, 'status')
-        # 关闭推送
-        if not all([appBundleId, app_type, token_val, uid, m_code]):
-            return response.json(444, 'appBundleId,app_type,token_val,uid,m_code')
-        # 判断推送类型对应key是否存在
-        if push_type == '0':
-            if appBundleId not in APNS_CONFIG.keys():
-                return response.json(904)
-        elif push_type == '1':
-            if appBundleId not in FCM_CONFIG.keys():
-                return response.json(904)
-        elif push_type == '2':
-            if appBundleId not in JPUSH_CONFIG.keys():
-                return response.json(904)
-        else:
-            return response.json(173)
-        dvqs = Device_Info.objects.filter(userID_id=userID, UID=uid)
-        status = int(status)
-        if dvqs.exists():
-            # 获取用户区域
-            # ip = self.ip
-            # ipInfo = CommonService.getIpIpInfo(ip=ip, lang='EN')
-            # area = ipInfo['country_name']
-            # if area == 'China':
-            #     DETECT_PUSH_DOMAIN = 'cn.push.dvema.com'
-            # else:
-            #     DETECT_PUSH_DOMAIN = 'en.push.dvema.com'
-            nowTime = int(time.time())
-            uid_set_qs = UidSetModel.objects. \
-                filter(uid=uid, uidpushmodel__userID_id=userID, uidpushmodel__m_code=m_code)
-            # 判断是否有曾经开启过
-            if uid_set_qs.exists():
-                uid_push_update_dict = {
-                    'appBundleId': appBundleId,
-                    'app_type': app_type,
-                    'push_type': push_type,
-                    'token_val': token_val,
-                    'updTime': nowTime,
-                    'lang': lang,
-                    'tz': tz
-                }
-                uid_set_qs.update(detect_status=status, updTime=nowTime)
-                UidPushModel.objects.filter(userID_id=userID, m_code=m_code, uid_set__uid=uid). \
-                    update(**uid_push_update_dict)
-                if status == 0:
-                    # 关闭成功
-                    return response.json(0)
-                utko = UidTokenObject()
-                # right
-                utko.generate(data={'uid': uid})
-                detectUrl = "{DETECT_PUSH_DOMAIN}notify/push?uidToken={uidToken}". \
-                    format(uidToken=utko.token, DETECT_PUSH_DOMAIN=DETECT_PUSH_DOMAIN)
-                return response.json(0, {'detectUrl': detectUrl})
-            else:
-                uid_set_qs = UidSetModel.objects.filter(uid=uid)
-                # 判断uid push是否绑定
-                if not uid_set_qs.exists():
-                    uid_set_create_dict = {
-                        'uid': uid,
-                        'addTime': nowTime,
-                        'updTime': nowTime,
-                        'detect_status': status,
-                    }
-                    # 添加设备配置
-                    uid_set_qs = UidSetModel.objects.create(**uid_set_create_dict)
-                    uid_set_id = uid_set_qs.id
-                else:
-                    update_dict = {
-                        'updTime': nowTime,
-                        'detect_status': status,
-                    }
-                    uid_set_qs.update(**update_dict)
-                    uid_set_id = uid_set_qs[0].id
-                uid_push_create_dict = {
-                    'uid_set_id': uid_set_id,
-                    'userID_id': userID,
-                    'appBundleId': appBundleId,
-                    'app_type': app_type,
-                    'push_type': push_type,
-                    'token_val': token_val,
-                    'm_code': m_code,
-                    'addTime': nowTime,
-                    'updTime': nowTime,
-                    'lang': lang,
-                    'tz': tz
-                }
-                # 绑定设备推送
-                UidPushModel.objects.create(**uid_push_create_dict)
-                if status == 0:
-                    return response.json(0)
-                utko = UidTokenObject()
-                utko.generate(data={'uid': uid})
-                detectUrl = "{DETECT_PUSH_DOMAIN}notify/push?uidToken={uidToken}". \
-                    format(uidToken=utko.token, DETECT_PUSH_DOMAIN=DETECT_PUSH_DOMAIN)
-                return response.json(0, {'detectUrl': detectUrl})
-        else:
-            return response.json(14)
-
-    def do_change_status11(self, userID, request_dict, response):
-        token_val = request_dict.get('token_val', None)
-        appBundleId = request_dict.get('appBundleId', None)
-        app_type = request_dict.get('app_type', None)
-        push_type = request_dict.get('push_type', None)
-        status = request_dict.get('status', None)
-        m_code = request_dict.get('m_code', None)
-        uid = request_dict.get('uid', None)
-        detect_group = request_dict.get('eventType', None)
-        # 设备语言
-        lang = request_dict.get('lang', 'en')
-        tz = request_dict.get('tz', '0')
-        start_status = request_dict.get('start_status', None)
-        # interval = request_dict.get('interval', None)
-        if not status:
-            return response.json(444, 'status')
-        print("111")
-        # 关闭推送
-        if not all([appBundleId, app_type, token_val, uid, m_code]):
-            return response.json(444, 'appBundleId,app_type,token_val,uid,m_code')
-        # 判断推送类型对应key是否存在
-        print('push_type:', push_type)
-        if push_type == '0':
-            if appBundleId not in APNS_CONFIG.keys():
-                return response.json(904)
-        elif push_type == '1':
-            if appBundleId not in FCM_CONFIG.keys():
-                return response.json(904)
-        elif push_type == '2':
-            if appBundleId not in JPUSH_CONFIG.keys():
-                return response.json(904)
-        else:
-            return response.json(173)
-
-        dvqs = Device_Info.objects.filter(userID_id=userID, UID=uid)
-        # 新增a
-        if start_status == "1":
-            interval = request_dict.get('interval', None)
-            # 设备表,用于判断这台设备是否存在
-            dvqs = Device_Info.objects.filter(userID_id=userID, UID=uid)
-            if dvqs.exists():
-                uid_set_qs = UidSetModel.objects. \
-                    filter(uid=uid, uidpushmodel__userID_id=userID)
-                if uid_set_qs.exists():
-                    uid_set_qs.update(detect_interval=int(interval))
-                else:
-                    return response.json(173)
-            # 移动侦测  evenType为字符串0,将detect_group设置进数据库
-            UidSetModel.objects.filter(uid=uid, uidpushmodel__userID_id=userID).update(detect_group=detect_group)
-            # /新增a
-        status = int(status)
-        # 获取用户区域
-        # ip = self.ip
-        # ipInfo = CommonService.getIpIpInfo(ip=ip, lang='EN')
-        # area = ipInfo['country_name']
-        # if area == 'China':
-        #     DETECT_PUSH_DOMAIN = 'cn.push.dvema.com'
-        # else:
-        #     DETECT_PUSH_DOMAIN = 'en.push.dvema.com'
-        nowTime = int(time.time())
-        if dvqs.exists():
-            uid_set_qs = UidSetModel.objects.filter(uid=uid)
-            # uid配置信息是否存在
-            if uid_set_qs.exists():
-                uid_set_id = uid_set_qs[0].id
-            else:
-                uid_set_create_dict = {
-                    'uid': uid,
-                    'addTime': nowTime,
-                    'updTime': nowTime,
-                    'detect_status': status,
-                }
-                # 添加设备配置
-                uid_set_qs = UidSetModel.objects.create(**uid_set_create_dict)
-                uid_set_id = uid_set_qs.id
-            uid_set_qs.update(detect_status=status, updTime=nowTime)
-            if status == 0:
-                UidPushModel.objects.filter(uid_set__uid=uid).delete()
-                # 状态为0的时候删除redis缓存数据
-                ykey = '{uid}_redis_qs'.format(uid=uid)
-                redisObj = RedisObject(db=6, SERVER_HOST='push.dvema.com')
-                redisObj.del_data(key=ykey)
-                return response.json(0)
-            elif status == 1:
-                uid_push_qs = UidPushModel.objects.filter(userID_id=userID, m_code=m_code, uid_set__uid=uid)
-                if uid_push_qs.exists():
-                    uid_push_update_dict = {
-                        'appBundleId': appBundleId,
-                        'app_type': app_type,
-                        'push_type': push_type,
-                        'token_val': token_val,
-                        'updTime': nowTime,
-                        'lang': lang,
-                        'tz': tz
-                    }
-                    uid_push_qs.update(**uid_push_update_dict)
-                else:
-                    # uid_set_id = uid_set_qs[0].id
-                    uid_push_create_dict = {
-                        'uid_set_id': uid_set_id,
-                        'userID_id': userID,
-                        'appBundleId': appBundleId,
-                        'app_type': app_type,
-                        'push_type': push_type,
-                        'token_val': token_val,
-                        'm_code': m_code,
-                        'addTime': nowTime,
-                        'updTime': nowTime,
-                        'lang': lang,
-                        'tz': tz
-                    }
-                    # 绑定设备推送
-                    UidPushModel.objects.create(**uid_push_create_dict)
-                # utko = UidTokenObject()
-                # # right
-                # utko.generate(data={'uid': uid})
-                etkObj = ETkObject(etk='')
-                etk = etkObj.encrypt(uid)
-                detectUrl = "{DETECT_PUSH_DOMAIN}notify/push?etk={etk}". \
-                    format(etk=etk, DETECT_PUSH_DOMAIN=DETECT_PUSH_DOMAIN)
-                return response.json(0, {'detectUrl': detectUrl})
-        else:
-            return response.json(14)
-
     def do_change_status(self, userID, request_dict, response):
         token_val = request_dict.get('token_val', None)
         appBundleId = request_dict.get('appBundleId', None)
@@ -410,7 +174,6 @@ class DetectControllerView(View):
         interval = request_dict.get('interval', None)
         if not status:
             return response.json(444, 'status')
-        print("111")
         # 关闭推送
         if not all([appBundleId, app_type, token_val, uid, m_code]):
             return response.json(444, 'appBundleId,app_type,token_val,uid,m_code')
@@ -483,6 +246,9 @@ class DetectControllerView(View):
                 return response.json(0)
             elif status == 1:
                 uid_push_qs = UidPushModel.objects.filter(userID_id=userID, m_code=m_code, uid_set__uid=uid)
+                ykey = '{uid}_redis_qs'.format(uid=uid)
+                redisObj = RedisObject(db=6, SERVER_HOST='push.dvema.com')
+                redisObj.del_data(key=ykey)
                 if uid_push_qs.exists():
                     uid_push_update_dict = {
                         'appBundleId': appBundleId,

+ 10 - 4
Controller/EquipmentManager.py

@@ -16,6 +16,7 @@ import oss2
 from django.http import JsonResponse
 from Object.RedisObject import RedisObject
 
+
 #     查询用户设备
 def queryUserEquipmentInterface(request):
     request.encoding = 'utf-8'
@@ -715,10 +716,13 @@ def queryInterface(request):
         nowTime = int(time.time())
         data = []
         # 设备拓展信息表
-        us_qs = UidSetModel.objects.filter(uid__in=uid_list).values('uid', 'version', 'nickname')
+        us_qs = UidSetModel.objects.filter(uid__in=uid_list).\
+            values('uid', 'version', 'nickname', 'detect_interval')
         uv_dict = {}
         for us in us_qs:
-            uv_dict[us['uid']] = {'version': us['version'], 'nickname': us['nickname']}
+            uv_dict[us['uid']] = {'version': us['version'],
+                                  'nickname': us['nickname'],
+                                  'detect_interval': us['detect_interval']}
         for p in dvls:
             p['vod'] = []
             for dm in ubqs:
@@ -728,13 +732,15 @@ def queryInterface(request):
             p['preview'] = []
             for up in upqs:
                 if p['UID'] == up['uid']:
-                    obj = 'uid_preview/{uid}/channel_{channel}.png'.format(uid=up['uid'], channel=up['channel'])
+                    obj = 'uid_preview/{uid}/channel_{channel}.png'.\
+                        format(uid=up['uid'], channel=up['channel'])
                     img_sign = bucket.sign_url('GET', obj, 300)
                     p['preview'].append(img_sign)
             p_uid = p['UID']
             if p_uid in uv_dict:
                 # 设备版本号
                 p['uid_version'] = uv_dict[p_uid]['version']
+                p['detect_interval'] = uv_dict[p_uid]['detect_interval']
                 # 设备昵称 调用影子信息昵称,先阶段不可
                 if uv_dict[p_uid]['nickname']:
                     p['NickName'] = uv_dict[p_uid]['nickname']
@@ -766,7 +772,7 @@ def uid_status(request):
     # 判断用户是否绑定设备
     qs = UidSetModel.objects.filter(uid=uid).values('uid', 'detect_status', 'detect_interval', 'version', 'ucode',
                                                     'p2p_region', 'tz', 'video_code', 'channel', 'cloud_vod', 'id',
-                                                    'detect_group','is_alexa','region_alexa')
+                                                    'detect_group', 'is_alexa', 'region_alexa')
     # 判断uid配置表信息是否存在
     if qs.exists():
         # 获取uid推送是否添加过

+ 5 - 3
Controller/EquipmentManagerV2.py

@@ -158,10 +158,10 @@ class EquipmentManagerV2(View):
             nowTime = int(time.time())
             data = []
             # 设备拓展信息表
-            us_qs = UidSetModel.objects.filter(uid__in=uid_list).values('uid', 'version', 'nickname','ucode')
+            us_qs = UidSetModel.objects.filter(uid__in=uid_list).values('uid', 'version', 'nickname', 'ucode','detect_interval')
             uv_dict = {}
             for us in us_qs:
-                uv_dict[us['uid']] = {'version': us['version'], 'nickname': us['nickname'],'ucode':us['ucode']}
+                uv_dict[us['uid']] = {'version': us['version'], 'nickname': us['nickname'], 'ucode': us['ucode'],'detect_interval':us['detect_interval']}
             for p in dvls:
                 p['vod'] = []
                 for dm in ubqs:
@@ -179,6 +179,7 @@ class EquipmentManagerV2(View):
                     # 设备版本号
                     p['uid_version'] = uv_dict[p_uid]['version']
                     p['ucode'] = uv_dict[p_uid]['ucode']
+                    p['detect_interval'] = uv_dict[p_uid]['detect_interval']
                     # 设备昵称 调用影子信息昵称,先阶段不可
                     if uv_dict[p_uid]['nickname']:
                         p['NickName'] = uv_dict[p_uid]['nickname']
@@ -186,6 +187,7 @@ class EquipmentManagerV2(View):
                     # 设备版本号
                     p['uid_version'] = ''
                     p['ucode'] = ''
+                    p['detect_interval'] = ''
                 data.append(p)
             return response.json(0, data)
         else:
@@ -195,7 +197,7 @@ class EquipmentManagerV2(View):
 
     def do_query_reset(self, userID, request_dict, response):
         dvqs = Device_Info.objects.filter(userID_id=userID, isExist=2)
-        dvql = dvqs.values\
+        dvql = dvqs.values \
             ('id', 'NickName', 'UID', 'ChannelIndex', 'Type', 'isShare')
         res = CommonService.qs_to_list(dvql)
         return response.json(0, res)

+ 3 - 2
Controller/UidUser.py

@@ -128,10 +128,11 @@ def queryInterface(request):
     response.lang = tko.lang
     if page <= 0:
         return response.json(0)
-    redisObj = RedisObject(db=8)
-    redisObj.del_data(key='uid_qs_' + userID)
+
     if tko.code == 0:
         userID = tko.userID
+        redisObj = RedisObject(db=8)
+        redisObj.del_data(key='uid_qs_' + userID)
         uid_user_qs = UidUserModel.objects.filter(userID_id=userID)
         if is_ap:
             is_ap = int(is_ap)

+ 211 - 27
Controller/UserController.py

@@ -38,6 +38,11 @@ from Service.ModelService import ModelService
 from Service.TemplateService import TemplateService
 from django.views.generic import View
 import base64
+import random
+from io import BytesIO
+from PIL import Image, ImageDraw, ImageFont
+from django.shortcuts import HttpResponse
+from Ansjer.config import BASE_DIR
 
 
 # 获取验证码
@@ -1287,34 +1292,38 @@ class v3LoginView(TemplateView):
         password = password.strip()
         print("准备解密")
         # 解密
-        for i in range(1, 4):
-            if i == 1:
-                # 第一次先解密
-                password = base64.b64decode(password)
-                password = password.decode('utf-8')
-                # 截去第一位,最后一位
-                password = password[1:-1]
-            if i==2:
-                # 第2次先解密
-                password = base64.b64decode(password)
-                password = password.decode('utf-8')
-                # 去前2位,后2位
-                password = password[2:-2]
-            if i==3:
-                # 第3次先解密
-                password = base64.b64decode(password)
-                password = password.decode('utf-8')
-                # 去前3位,后3位
-                password = password[3:-3]
-        data_valid = DataValid()
-        if data_valid.email_validate(username):
-            return self.do_email_login(username, password, response)
-        elif data_valid.mobile_validate(username):
-            return self.do_phone_login(username, password, response)
-        elif data_valid.name_validate(username):
-            return self.do_name_login(username, password, response)
+        try:
+            for i in range(1, 4):
+                if i == 1:
+                    # 第一次先解密
+                    password = base64.b64decode(password)
+                    password = password.decode('utf-8')
+                    # 截去第一位,最后一位
+                    password = password[1:-1]
+                if i==2:
+                    # 第2次先解密
+                    password = base64.b64decode(password)
+                    password = password.decode('utf-8')
+                    # 去前2位,后2位
+                    password = password[2:-2]
+                if i==3:
+                    # 第3次先解密
+                    password = base64.b64decode(password)
+                    password = password.decode('utf-8')
+                    # 去前3位,后3位
+                    password = password[3:-3]
+        except Exception as e:
+            return response.json(111)
         else:
-            return response.json(107)
+            data_valid = DataValid()
+            if data_valid.email_validate(username):
+                return self.do_email_login(username, password, response)
+            elif data_valid.mobile_validate(username):
+                return self.do_phone_login(username, password, response)
+            elif data_valid.name_validate(username):
+                return self.do_name_login(username, password, response)
+            else:
+                return response.json(107)
 
     def do_email_login(self, email, password, response):
         user_qs = Device_User.objects.filter(Q(username=email) | Q(userEmail=email))
@@ -2275,4 +2284,179 @@ class V2LogoutView(TemplateView):
             return response.json(tko.code)
 
 
+# 图片验证码生成
+class generatePictureCodeView(TemplateView):
+    @method_decorator(csrf_exempt)
+    def dispatch(self, *args, **kwargs):
+        return super(generatePictureCodeView, self).dispatch(*args, **kwargs)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = request.POST
+        return self.validates(request_dict)
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = request.GET
+        return self.validates(request_dict)
+
+    # 生成验证码和验证码图片
+    def get_valid_code_img(self, request_dict):
+        # ---------生成背景图片-----------
+        # img = Image.new('RGB', (260, 34), color=get_random_color())
+        img = Image.new('RGB', (260, 34),
+                        color=(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
+        # -------/生成背景图片-----------
+
+        # --------生成随机验证码,设置字体格式,大小等属性------------
+        draw = ImageDraw.Draw(img)
+        path = BASE_DIR + '/Ansjer/file/font/simhei.ttf'
+        kumo_font = ImageFont.truetype(path, 40, encoding="unic")  # 设置字体
+        print("字体可以")
+        valid_code_str = ''
+        for i in range(5):
+            random_num = str(random.randint(0, 9))
+            random_low_alpha = chr(random.randint(97, 122))
+            random_high_alpha = chr(random.randint(65, 90))
+            random_char = random.choice([random_num, random_low_alpha, random_high_alpha])
+            draw.text((i * 50 + 20, 5), random_char, 'white', kumo_font)
+
+            # 保存验证码字符串
+            valid_code_str += random_char
+        print(valid_code_str)
+        # --------/生成随机验证码,设置字体格式,大小等属性------------
+
+        # -------增加干扰线,点----------
+        # 噪点噪线
+        width = 260
+        height = 34
+        for i in range(5):
+            x1 = random.randint(0, width)
+            x2 = random.randint(0, width)
+            y1 = random.randint(0, height)
+            y2 = random.randint(0, height)
+            draw.line((x1, y1, x2, y2), fill=(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
+        for i in range(5):
+            draw.point([random.randint(0, width), random.randint(0, height)],
+                       fill=(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
+            x = random.randint(0, width)
+            y = random.randint(0, height)
+            draw.arc((x, y, x + 4, y + 4), 0, 90,
+                     fill=(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
+        # -------/增加干扰线,点-----------
+        # ------存入内存---------
+        f = BytesIO()  # 用完之后,BytesIO会自动清掉
+        img.save(f, 'png')
+        data = f.getvalue()
+        return data, valid_code_str
+
+    # 生成验证码方法
+    def validates(self, request_dict):
+        # 页面传过来的uuid
+        # id = request.GET.get('id','')
+        id = request_dict.get('id', '')
+        # 存入redis的key
+        image_code_id = "image_code_%s" % id
+        """
+        基于PIL模块动态生成响应状态码图片
+        :param request:
+        :return:
+        """
+        # 图片data,验证码
+        data, valid_code_str = self.get_valid_code_img(request_dict)
+        if id:
+            redisObj = RedisObject(db=6)
+            # 单条维护
+            redisObj.set_data(key=image_code_id, val=valid_code_str, expire=120)
+            image_code_val = redisObj.get_data(key=image_code_id)
+            print("________获取验证码的值" + image_code_val)
+            return HttpResponse(data)
+
+
+# 图片验证码校验注册
+class Image_Code_RegisterView(TemplateView):
+    @method_decorator(csrf_exempt)
+    def dispatch(self, *args, **kwargs):
+        return super(Image_Code_RegisterView, self).dispatch(*args, **kwargs)
+
+    def post(self, request, *args, **kwargs):
+        print("post进来了吗")
+        request.encoding = 'utf-8'
+        request_dict = request.POST
+        return self.validates(request_dict)
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = request.GET
+        return self.validates(request_dict)
+
+    #检测验证码,并注册
+    def validates(self,request_dict):
+        print("__________request_dict:%s" % request_dict)
+        phone = request_dict.get('phone',None)
+        username = request_dict.get('userName',None)
+        userEmail = request_dict.get('userEmail',None)
+        password = request_dict.get('userPwd',None)
+        language = request_dict.get('language',None)
+        #前端传进来的uuid
+        imageCodeId = request_dict.get('imageCodeId',None)
+        # 页面输入的验证码
+        valid_code = request_dict.get('id_v_code',None)
+        response = ResponseObject(language)
+        if not username:
+            return response.json(107)
+        if not userEmail:
+            return response.json(105)
+        if not password:
+            return response.json(109)
+        if not phone:
+            return response.json(100)
+        userEmail = userEmail.strip()
+        username = username.strip()
+        password = password.strip()
+        # 用户已存在
+        if username:
+            nameValid = Device_User.objects.filter(username=username)
+            if nameValid:
+                return response.json(179)
+        if userEmail:
+            emailValid = Device_User.objects.filter(userEmail=userEmail)
+            if emailValid:
+                return response.json(103)
+        if phone:
+            phoneValid = Device_User.objects.filter(phone=phone)
+            if phoneValid:
+                return response.json(101)
+        #根据uuid拼接的key
+        image_code_key = "image_code_%s" %imageCodeId
+        #判断验证码是否过期
+        if image_code_key is None:
+            return response.json(120)
+        redisObj = RedisObject(db=6)
+        #redis里面的验证码
+        redis_image_code = redisObj.get_data(key=image_code_key)
+        #验证用户输入的验证码和redis中的验证码
+        if valid_code.lower()!=redis_image_code.lower():
+            return response.json(121)
+        # 删除redis中的图片验证码,防止用户使用同一个图片验证码验证多次
+        redisObj.del_data(key=image_code_key)
+        # #存用户名和密码
+        create_data = {
+            "phone":phone,
+            "username": username,
+            "NickName": username,
+            "userEmail": userEmail,
+            "password": make_password(password),
+            "userID": CommonService.getUserID(μs=False, setOTAID=True),
+            "is_active": True,
+            "user_isValid": True,
+        }
+        users = Device_User.objects.create(**create_data)
+        return response.json(0)
+
+
+
+
+
+
 

+ 4 - 1
Model/models.py

@@ -426,7 +426,7 @@ class Store_Meal(models.Model):
     bucket = models.ForeignKey(VodBucketModel, blank=True, to_field='id', on_delete=models.CASCADE,
                                default=1, verbose_name='存储空间')
     commodity_type = models.SmallIntegerField(default=0, verbose_name='云存储套餐类型')  # 0:事件型 1:连续型
-    commodity_code = models.CharField(default='', max_length=16, verbose_name='套餐规格码', unique=True)
+    commodity_code = models.CharField(default='', max_length=16, verbose_name='套餐规格码')
 
     def __str__(self):
         return self.id
@@ -555,6 +555,8 @@ class VodHlsModel(models.Model):
     sec = models.IntegerField(verbose_name='秒数', default=0)
     bucket = models.ForeignKey(VodBucketModel, blank=True, to_field='id', on_delete=models.CASCADE, default=1,
                                verbose_name='存储空间')
+    fg = models.SmallIntegerField(default=0,verbose_name='时间片段数') # 0为阿里云存储方案 >0为亚马逊方案
+
 
     def __str__(self):
         return self.id
@@ -593,6 +595,7 @@ class StsCrdModel(models.Model):
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
     bucket = models.ForeignKey(VodBucketModel, blank=True, to_field='id', on_delete=models.CASCADE, default=1,
                                verbose_name='存储空间')
+    type = models.SmallIntegerField(default=0,verbose_name='sts类型') # 0:阿里云,1:s3
 
     def __str__(self):
         return self.id