Forráskód Böngészése

Merge remote-tracking branch 'origin/dev' into dev

tanghongbin 4 éve
szülő
commit
0ddc15efe3

+ 1 - 0
.gitignore

@@ -11,6 +11,7 @@
 */__pycache__
 /Ansjer/test/__pycache__
 /Ansjer/test/__init__.py
+/static/log/error.log
 /sdk_install
 /DB/mydata4vipday2.ipdb
 /venv

+ 1 - 0
Ansjer/formal_settings.py

@@ -71,6 +71,7 @@ TEMPLATES = [
 
 WSGI_APPLICATION = 'Ansjer.formal_wsgi.application'
 
+
 # 服务器类型
 DATABASE_DATA = 'Ansjer81'
 SERVER_HOST = 'database-2.clraczw4p0yj.us-west-1.rds.amazonaws.com'

+ 46 - 0
Ansjer/formal_zositech_help_weekly_task.py

@@ -0,0 +1,46 @@
+import json
+
+import requests
+import time
+
+
+# url = 'http://test.dvema.com'
+# base_url = 'http://127.0.0.1:8000/'
+base_url = 'http://dvema.com/'
+username='13800138001'
+password='ansjer.x123789'
+login_url = base_url + 'account/login'
+
+data = {
+    'userName': username,
+    'userPwd': password
+}
+res = requests.post(url=login_url, data=data)
+res = res.json()
+
+if res['result_code'] == 0:
+    isbool = True
+    while isbool:
+        try:
+            statistics_url = base_url + 'faq/synZositechHelp'
+            zhcnDatares = requests.get(
+                url='https://mobileapphelp.zendesk.com/api/v2/help_center/articles/embeddable_search.json?locale=zh-cn&section=null&origin=web_widget', timeout=1).text
+
+            enusDatares = requests.get(
+                url='https://mobileapphelp.zendesk.com/api/v2/help_center/articles/embeddable_search.json?locale=en-us&section=null&origin=web_widget', timeout=1).text
+
+            data = {
+                'token': res['result']['access_token'],
+                'zhresults': zhcnDatares,
+                'enresults': enusDatares
+            }
+            isbool = False
+            res = requests.post(url=statistics_url, data=data)
+
+        except Exception as e:
+            isbool=True
+            time.sleep(3)
+
+
+
+

+ 1 - 0
Ansjer/test_settings.py

@@ -72,6 +72,7 @@ TEMPLATES = [
 
 WSGI_APPLICATION = 'Ansjer.test_wsgi.application'
 
+
 # 服务器类型
 DATABASE_DATA = 'AnsjerTest'
 SERVER_HOST = 'database-2.clraczw4p0yj.us-west-1.rds.amazonaws.com'

+ 2 - 2
Ansjer/test_zositech_help_weekly_task.py

@@ -5,8 +5,8 @@ import time
 
 
 # url = 'http://test.dvema.com'
-base_url = 'http://127.0.0.1:8000/'
-#base_url = 'http://test.dvema.com/'
+# base_url = 'http://127.0.0.1:8000/'
+base_url = 'http://test.dvema.com/'
 username='13800138001'
 password='ansjer999999'
 login_url = base_url + 'account/login'

+ 2 - 1
Controller/AppLogController.py

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

+ 68 - 96
Controller/CloudStorage.py

@@ -108,6 +108,8 @@ class CloudStorageView(View):
                 return self.do_query_order(request_dict, userID, response)
             elif operation == 'experienceorder':
                 return self.do_experience_order(request_dict, userID, response)
+            elif operation == 'experiencereset':
+                return self.do_experience_reset(request_dict, userID, response)
             else:
                 return response.json(414)
 
@@ -185,7 +187,9 @@ class CloudStorageView(View):
             qs = qs.all()
 
         if eq:
-            qs=qs.filter(~Q(id='12'))
+            qs=qs.filter(~Q(type='10'))
+        else:
+            qs = qs.filter(type='10')
 
         qs = qs.values("id", "title", "content", "price",
                        "day", "currency", "bucket__storeDay",
@@ -1030,8 +1034,7 @@ class CloudStorageView(View):
                                                   'error_code': 0})
             # 调起支付接口
 
-        # 生成体验订单
-
+    # 生成体验订单
     def do_experience_order(self, request_dict, userID, response):
         uid = request_dict.get('uid', None)
         channel = request_dict.get('channel', None)
@@ -1061,109 +1064,78 @@ class CloudStorageView(View):
         #     new_starTime = ubq['endTime'] + 1
         nowTime = int(time.time())
         orderID = CommonService.createOrderID()
-        if pay_type == 0:
-            Order_Model.objects.create(orderID=orderID, UID=uid, channel=channel, userID_id=userID,
-                                       desc=content, payType=pay_type, payTime=nowTime,
-                                       price=price, currency=currency, addTime=nowTime, updTime=nowTime,
-                                       endTime=(nowTime + int(day) * 3600 * 24), pay_url="体验版",
-                                       commodity_code=commodity_code, commodity_type=commodity_type,
-                                       rank_id=rank)
 
-            order_qs = Order_Model.objects.filter(orderID=orderID)
-            nowTime = int(time.time())
-            order_list = order_qs.values("UID", "channel", "commodity_code")
-            UID = order_list[0]['UID']
-            channel = order_list[0]['channel']
-            commodity_code = order_list[0]['commodity_code']
-            smqs = Store_Meal.objects.filter(commodity_code=commodity_code). \
-                values("day", "bucket_id", "bucket__storeDay")
-            bucketId = smqs[0]['bucket_id']
-            if not smqs.exists():
-                return response.json(0, '套餐已删除')
-            addTime = int(smqs[0]["day"]) * 24 * 3600
-            # ##
-            ubqs = UID_Bucket.objects.filter(uid=UID, channel=channel, endTime__gte=nowTime). \
-                values("bucket__storeDay", "bucket__region", "endTime")
-            if ubqs.exists():
-                ubqs_count = ubqs.count()
-                print(ubqs_count)
-                ubq = ubqs[ubqs_count - 1]
-                print(ubq)
-                new_starTime = ubq['endTime'] + 1
-                ub_cqs = UID_Bucket.objects.create \
-                    (uid=UID, channel=channel, bucket_id=bucketId,
-                     endTime=new_starTime + addTime)
-                uid_bucket_id = ub_cqs.id
-            else:
-                ub_cqs = UID_Bucket.objects.create \
-                    (uid=UID, channel=channel, bucket_id=bucketId, endTime=nowTime + addTime)
-                uid_bucket_id = ub_cqs.id
-            order_qs.update(status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id)
+        Order_Model.objects.create(orderID=orderID, UID=uid, channel=channel, userID_id=userID,
+                                   desc=content, payType=pay_type, payTime=nowTime,
+                                   price=price, currency=currency, addTime=nowTime, updTime=nowTime,
+                                   endTime=(nowTime + int(day) * 3600 * 24), pay_url="体验版",
+                                   commodity_code=commodity_code, commodity_type=commodity_type,
+                                   rank_id=rank)
+
+        order_qs = Order_Model.objects.filter(orderID=orderID)
+        nowTime = int(time.time())
+        order_list = order_qs.values("UID", "channel", "commodity_code")
+        UID = order_list[0]['UID']
+        channel = order_list[0]['channel']
+        commodity_code = order_list[0]['commodity_code']
+        smqs = Store_Meal.objects.filter(commodity_code=commodity_code). \
+            values("day", "bucket_id", "bucket__storeDay")
+        bucketId = smqs[0]['bucket_id']
+        if not smqs.exists():
+            return response.json(0, '套餐已删除')
+        addTime = int(smqs[0]["day"]) * 24 * 3600
+        # ##
+        ubqs = UID_Bucket.objects.filter(uid=UID, channel=channel, endTime__gte=nowTime). \
+            values("bucket__storeDay", "bucket__region", "endTime")
+        if ubqs.exists():
+            ubqs_count = ubqs.count()
+            print(ubqs_count)
+            ubq = ubqs[ubqs_count - 1]
+            print(ubq)
+            new_starTime = ubq['endTime'] + 1
+            ub_cqs = UID_Bucket.objects.create \
+                (uid=UID, channel=channel, bucket_id=bucketId,
+                 endTime=new_starTime + addTime)
+            uid_bucket_id = ub_cqs.id
+        else:
+            ub_cqs = UID_Bucket.objects.create \
+                (uid=UID, channel=channel, bucket_id=bucketId, endTime=nowTime + addTime)
+            uid_bucket_id = ub_cqs.id
+        order_qs.update(status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id)
 
-            # return response.json(0)
+        # return response.json(0)
 
-            ExperienceContextModel.objects.create(
-                experience_type = 0,
-                uid = uid,
-                do_time = nowTime
+        ExperienceContextModel.objects.create(
+            experience_type=0,
+            uid=uid,
+            do_time=nowTime
 
-            )
+        )
 
-            red_url = "{SERVER_DOMAIN}cloudstorage/payOK".format(SERVER_DOMAIN=SERVER_DOMAIN)
-            return HttpResponseRedirect(red_url)
-        else:
-            Order_Model.objects.create(orderID=orderID, UID=uid, channel=channel, userID_id=userID,
-                                       desc=content, payType=pay_type, payTime=nowTime,
-                                       price=price, currency=currency, addTime=nowTime, updTime=nowTime,
-                                       endTime=(nowTime + int(day) * 3600 * 24), pay_url="体验版",
-                                       commodity_code=commodity_code, commodity_type=commodity_type,
-                                       rank_id=rank)
-            order_qs = Order_Model.objects.filter(orderID=orderID, status=0)
+        result = "{SERVER_DOMAIN}cloudstorage/payOK".format(SERVER_DOMAIN=SERVER_DOMAIN)
+        return response.json(0, result)
+        # red_url =
+        # return JsonResponse(status=200, data={'red_url': red_url})
 
-            if not order_qs.exists():
-                return response.json(404)
+        # return HttpResponseRedirect(red_url)
 
-            nowTime = int(time.time())
-            order_list = order_qs.values("UID", "commodity_code", "channel")
-            UID = order_list[0]['UID']
-            channel = order_list[0]['channel']
-            commodity_code = order_list[0]['commodity_code']
-            order_qs.update(status=1, updTime=nowTime)
-            smqs = Store_Meal.objects.filter(commodity_code=commodity_code). \
-                values("day", "bucket_id", "bucket__storeDay")
-            bucketId = smqs[0]['bucket_id']
-            if not smqs.exists():
-                return response.json(0, '套餐已删除')
-            addTime = int(smqs[0]["day"]) * 24 * 3600
-            ubqs = UID_Bucket.objects.filter(uid=UID, channel=channel). \
-                values("bucket_id", "endTime", "bucket__storeDay")
-            nowTime = int(time.time())
-            if ubqs.exists():
-                ubqs_count = ubqs.count()
-                ubq = ubqs[ubqs_count - 1, ubqs_count]
-                new_starTime = ubq['endTime'] + 1
-                ub_cqs = UID_Bucket.objects.create(uid=UID, channel=channel, bucket_id=bucketId,
-                                                   endTime=new_starTime + addTime)
-                uid_bucket_id = ub_cqs.id
+    #重置设备云存体验
+    def do_experience_reset(self, request_dict, userID, response):
+        bid = request_dict.get("id",None)
+        ubq = UID_Bucket.objects.filter(id=bid)
+        if ubq:
+            eq =ExperienceContextModel.objects.filter(uid = ubq[0].uid)
+            if eq:
+                eq.delete()
+                Order_Model.objects.filter(uid_bucket_id = bid).delete()
+                ubq.delete()
             else:
-                ub_cqs = UID_Bucket.objects.create(uid=UID, channel=channel, bucket_id=bucketId,
-                                                   endTime=nowTime + addTime)
-                uid_bucket_id = ub_cqs.id
-            order_qs.update \
-                (payTime=nowTime, status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id)
-
-            ExperienceContextModel.objects.create(
-                experience_type=0,
-                uid=uid,
-                do_time=nowTime
+                return response.json(10007)
 
-            )
+        else:
+            return response.json(0, '重置云存体验失败')
 
-            red_url = "{SERVER_DOMAIN}cloudstorage/payOK".format(SERVER_DOMAIN=SERVER_DOMAIN)
-            return HttpResponseRedirect(red_url)
-            # return JsonResponse(status=200, data={'result_code': 0, 'reason': 'success',
-            #                                       'result': {"redirectUrl": "体验版", "orderID": orderID},
-            #                                       'error_code': 0})
+        return response.json(0,'重置云存体验成功')
 
 
 def deleteVodHls(request):

+ 3 - 0
Controller/FAQController.py

@@ -357,6 +357,9 @@ class FAQView(View):
 
         enresults = request_dict.get('enresults', None).replace("\'", "XX??????XX")
         enresults = json.loads(enresults)
+
+        ZositechHelpModel.objects.all().delete()
+
         for data in zhresults['results']:
             labname = ""
             if data['label_names']:

+ 5 - 5
Controller/TestApi.py

@@ -682,13 +682,13 @@ class testView(View):
 
     def generate_token(self,request_dict,userID):
         #UserIdToken
-        # tko = TokenObject()
-        # res = tko.generate(
-        #     data={'userID': 158943594633713800138000, 'lang': 'cn', 'user': '597471180@qq.com', 'm_code': '123413243214'})
+        tko = TokenObject()
+        res = tko.generate(
+            data={'userID': 158943594633713800138000, 'lang': 'cn', 'user': '597471180@qq.com', 'm_code': '123413243214'})
 
         #uidToken
-        utko = UidTokenObject()
-        res = utko.generate(data={'uid': 'H2CMKET2LDC3ZBL4111A','channel': 1})
+        # utko = UidTokenObject()
+        # res = utko.generate(data={'uid': 'H2CMKET2LDC3ZBL4111A','channel': 1})
         return JsonResponse(status=200, data=res,safe=False)
 
     def test_upload_s3(self,request_dict):

+ 31 - 18
Controller/UserController.py

@@ -1868,6 +1868,7 @@ class InitInfoView(View):
                     update(**update_dict)
             if appBundleId:
                 user_ex_qs = UserExModel.objects.filter(userID_id=userID)
+                user_ex = None
                 if user_ex_qs.exists():
                     update_dict = {
                         'updTime': now_time,
@@ -1875,6 +1876,7 @@ class InitInfoView(View):
                         'region': lang
                     }
                     user_ex_qs.update(**update_dict)
+                    user_ex = user_ex_qs[0]
                 else:
                     create_dict = {
                         'addTime': now_time,
@@ -1883,9 +1885,9 @@ class InitInfoView(View):
                         'userID_id': userID,
                         'region': lang
                     }
-                    user_ex_qs = UserExModel.objects.create(**create_dict)
+                    user_ex = UserExModel.objects.create(**create_dict)
 
-                country_ip_qs = CountryIPModel.objects.filter(user_ex_id=user_ex_qs[0].id)
+                country_ip_qs = CountryIPModel.objects.filter(user_ex_id=user_ex.id)
                 if not country_ip_qs.exists():
                     countryIp = CountryIPModel(
                         ip=CommonService.get_ip_address(request),
@@ -1893,7 +1895,6 @@ class InitInfoView(View):
                         user_ex_id=user_ex_qs[0].id
                     )
                     countryIp.save()
-
         # 获取设备是否存在有已被删除
         res = {'usmsg': 0}  # 预留字段, 有版本app该字段去掉会报错
         return response.json(0, res)
@@ -1903,7 +1904,6 @@ class InitInfoView(View):
         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]
@@ -1913,20 +1913,27 @@ class InitInfoView(View):
                     update_dict = {
                         'updTime': now_time,
                         'appBundleId': appBundleId,
-                        'region': lang,
-                        'country': country
+                        'region': lang
                     }
                     user_ex_qs.update(**update_dict)
+                    user_ex = user_ex_qs[0]
                 else:
                     create_dict = {
                         'addTime': now_time,
                         'updTime': now_time,
                         'appBundleId': appBundleId,
                         'userID_id': user.userID,
-                        'region': lang,
-                        'country': country
+                        'region': lang
                     }
-                    UserExModel.objects.create(**create_dict)
+                    user_ex = UserExModel.objects.create(**create_dict)
+                country_ip_qs = CountryIPModel.objects.filter(user_ex_id=user_ex.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()
                 return response.json(0)
             else:
                 return response.json(104)
@@ -2176,7 +2183,8 @@ class wxPerfectView(TemplateView):
                     'com.ansjer.loocamccloud': {'appid': 'wx9f6d6ce63f85b367',
                                                 'secret': 'fe495884cd24637f1ae516c7f53d1b97', },
                     'com.ansjer.zccloud': {'appid': 'wx2a9f5ef9baf2760f', 'secret': '5d38c7079676463149ffea593c58f2ed'},
-                    'com.ansjer.customizede': {'appid':'wx2a9f5ef9baf2760f', 'secret': '5d38c7079676463149ffea593c58f2ed'},
+                    'com.ansjer.customizede': {'appid': 'wx2a9f5ef9baf2760f',
+                                               'secret': '5d38c7079676463149ffea593c58f2ed'},
                     # android
                     'com.ansjer.zccloud_ab': {'appid': 'wx2a9f5ef9baf2760f',
                                               'secret': '5d38c7079676463149ffea593c58f2ed'},
@@ -2911,7 +2919,6 @@ class Image_Code_RegisterView(TemplateView):
         unique = request_dict.get('unique', None)
         if unique:
             delete_local_account(unique)
-
         if not all([userEmail, password, lang, imageCodeId, valid_code]):
             return response.json(444)
         try:
@@ -3307,7 +3314,8 @@ class v3LoginByFingerprintView(View):
                     return response.json(104)
                 else:
                     users = user_qs.values('role__rid', 'role__roleName', 'userID', 'NickName', 'username', 'userEmail',
-                               'phone', 'password', 'userIconPath', 'fingerprint_enable', 'fingerprint_key')[0]
+                                           'phone', 'password', 'userIconPath', 'fingerprint_enable',
+                                           'fingerprint_key')[0]
                     if users['fingerprint_enable'] == 0:
                         return response.json(112)
                     else:
@@ -3335,7 +3343,8 @@ class v3LoginByFingerprintView(View):
                             res['userEmail'] = users['userEmail'] if users['userEmail'] is not None else ''
                             res['phone'] = users['phone'] if users['phone'] is not None else ''
                             res['fingerprint_enable'] = users['fingerprint_enable']
-                            res['fingerprint_key'] = CommonService.encode_data(content=users['fingerprint_key'], start=2)
+                            res['fingerprint_key'] = CommonService.encode_data(content=users['fingerprint_key'],
+                                                                               start=2)
                             return response.json(0, res)
                         else:
                             return response.json(tko.code)
@@ -3425,7 +3434,8 @@ class AppleAuthLogin(View):
 
             if key_object:
                 try:
-                    claims = jwt.decode(identity_token, key=key_object, verify=True, algorithms=[alg], audience=app_bundle_id)
+                    claims = jwt.decode(identity_token, key=key_object, verify=True, algorithms=[alg],
+                                        audience=app_bundle_id)
                     unionID = claims['sub']
                     print(claims)
                     user_extend_qs = UserOauth2Model.objects.filter(unionID=unionID, authType=2)
@@ -3533,8 +3543,8 @@ class LocalUserView(View):
         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('start_time=' + str((time.time())))
+        ip = CommonService.get_ip_address(request)
         print('end_time=' + str((time.time())))
         return self.validate(request_dict, operation)
 
@@ -3679,10 +3689,13 @@ def updateUserCountry(request):
             if data:
                 country = data
             else:
-                country = CommonService.getAddr(country_ip['ip'])
+                country = CommonService.getIpIpInfo(country_ip['ip'], lang='CN')
+                country = country['country_name']
                 redisObject.set_data(key=key, val=country, expire=3600)
 
             country_ip['country'] = country
             CountryIPModel.objects.filter(id=country_ip['id']).update(country=country, status=1)
+            # ids.append(country_ip['id'])
+        # CountryIPModel.objects.filter(id__in=tuple(ids)).update(status=1)
     response = ResponseObject()
-    return response.json(0)
+    return response.json(0)

+ 8 - 8
Model/models.py

@@ -124,7 +124,7 @@ class Device_User(AbstractBaseUser):
                               verbose_name=u'用户ID', unique=True)
     role = models.ManyToManyField(to='Role', blank=True, verbose_name=u'用户角色', db_table='user_role')
 
-    username = models.CharField(max_length=64, verbose_name=u'用户名', default='', blank=True)
+    username = models.CharField(max_length=64, db_index=True, verbose_name=u'用户名', default='', blank=True)
     password = models.CharField(max_length=128, verbose_name=u'密码')
     userEmail = models.EmailField(max_length=64, verbose_name=u'邮箱', default='', blank=True)
     # 实际的路径就是 MEDIA_ROOT/Image/filename,所以可用upload_to来指定文件存放的前缀路径
@@ -148,8 +148,8 @@ class Device_User(AbstractBaseUser):
     phone = models.CharField(max_length=16, verbose_name=u'手机号', default='', blank=True)
     fingerprint_enable = models.SmallIntegerField(default=0, verbose_name=u'是否开启了指纹登录') # 0:未开启,1:已开启
     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:不订阅
+    is_local = models.BooleanField(blank=True, default=False, verbose_name=u'是否是本地登录用户')
+    subscribe_email = models.SmallIntegerField(default=0, verbose_name=u'是否订阅营销邮件')  # 0:未订阅,1:订阅,2:不订阅
     objects = UserManager()
 
     USERNAME_FIELD = 'userID'  # 必须有一个唯一标识
@@ -291,10 +291,10 @@ class Equipment_Info(models.Model):
     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')
     is_st = models.SmallIntegerField(default=0, verbose_name='是否截图')  # 0 否,1 是图,2,视频
-    message_id = models.CharField(max_length=32, default='', verbose_name='第三方推送服务器返回的id')
-    push_type = models.SmallIntegerField(default=0, verbose_name='第三方推送服务器标志。0:APNS推送,1:谷歌推送,2:极光推送')
-    push_server_status = models.IntegerField(default=200, verbose_name='是否成功推送到第三方服务器。200:成功,other:失败')
-    push_device_status = models.SmallIntegerField(default=-1, verbose_name='是否成功推送到目标设备。0:失败,1:成功')
+    # message_id = models.CharField(blank=True, max_length=32, default='', verbose_name='第三方推送服务器返回的id')
+    # push_type = models.SmallIntegerField(blank=True, default=0, verbose_name='第三方推送服务器标志。0:APNS推送,1:谷歌推送,2:极光推送')
+    # push_server_status = models.IntegerField(blank=True, default=200, verbose_name='是否成功推送到第三方服务器。200:成功,other:失败')
+    # push_device_status = models.SmallIntegerField(blank=True, default=-1, verbose_name='是否成功推送到目标设备。0:失败,1:成功')
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
 
     def __str__(self):
@@ -640,7 +640,7 @@ class UID_Preview(models.Model):
 # 系统发送信息新到用户
 class SysMsgModel(models.Model):
     id = models.AutoField(primary_key=True, verbose_name='自增id')
-    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')
     msg = models.TextField(blank=True, default='', verbose_name=u'发送内容')
     status = models.SmallIntegerField(verbose_name='是否已读', default=0)  # 0:否,1:是
     addTime = models.IntegerField(verbose_name='添加时间', default=0)

+ 1 - 0
Object/ResponseObject.py

@@ -140,6 +140,7 @@ class ResponseObject(object):
             10004: '请求方法不正确。请联系开发者',
             10005: '配置错误,客户编号这个值是错误的',
             10006: '配置错误,路径这个值是错误的',
+            10007: '此设备不是体验套餐,无法重置'
         }
         if self.lang == 'cn':
             msg = data_cn

+ 4 - 3
Object/WechatPayObject.py

@@ -96,7 +96,7 @@ class WechatPayObject:
             if xmlresp['xml']['result_code'] == 'SUCCESS':
                 prepay_id = xmlresp['xml']['prepay_id']
                 self.params['prepay_id'] = prepay_id
-                self.params['package'] = "Sign=WXPay"
+                self.params['packageId'] = "Sign=WXPay"
                 self.params['timestamp'] = str(int(time.time()))
                 return self.params
             else:
@@ -105,7 +105,7 @@ class WechatPayObject:
             return 'failure'
 
     def re_finall(self):
-        """得到prepay_id后再次签名,返回给终端参数
+        """得到prepay_id后再次签名,返回给终端参数.
         """
         self.get_prepay_id()
         if self.error:
@@ -113,13 +113,14 @@ class WechatPayObject:
         sign_again_params = {
             'appid': self.params['appid'],
             'noncestr': self.params['nonce_str'],
-            'package': self.params['package'],
+            'package': self.params['packageId'],
             'partnerid': self.params['mch_id'],
             'timestamp': self.params['timestamp'],
             'prepayid': self.params['prepay_id']
         }
         self.get_sign(sign_again_params)
         sign_again_params['sign'] = sign_again_params['sign']
+        sign_again_params['packageId'] = sign_again_params['package']
         return sign_again_params  # 返回给app
 
     def get_notifypay(self, data):

+ 10 - 0
Service/ModelService.py

@@ -221,6 +221,16 @@ class ModelService:
         file.flush()
         file.close()
 
+    @staticmethod
+    def app_log_log(userID, UID):
+        file_path = '/'.join((BASE_DIR, 'static/app_log.log'))
+        file = open(file_path, 'a+')
+        file.write("username:" + userID + "; time:" + time.strftime(
+            "%Y-%m-%d %H:%M:%S", time.localtime()) + "; " + "; uid:" + UID)
+        file.write('\n')
+        file.flush()
+        file.close()
+
 
 def notify_alexa_delete(userID, UID):
     url = 'https://www.zositech.xyz/deviceStatus/delete'

+ 269 - 36
requirements.txt

@@ -1,36 +1,269 @@
-Django==2
-
-django-cors-headers
-django-imagekit
-django-guardian
-django-rest-framework
-simplejson
-djangorestframework-jwt
-South
-qcloudsms_py
-itsdangerous
-openpyxl
-xlrd
-mysqlclient
-boto3
-requests_aws4auth
-ffmpy
-xmltodict
-var_dump
-django-middleware-global-request
-jpush
-pyipip
-boto
-django-ratelimit
-paypalrestsdk
-pymongo
-image
-pyfcm
-pillow
-oss2
-redis
-ipip-ipdb
-alipay-sdk-python
-https://www.cnblogs.com/victorwu/p/8505336.html
-apns2
-aliyun-python-sdk-sts
+alabaster==0.7.12
+aliyun-python-sdk-core==2.13.15
+aliyun-python-sdk-core-v3==2.13.11
+aliyun-python-sdk-dysmsapi==1.0.0
+aliyun-python-sdk-kms==2.10.1
+aliyun-python-sdk-sts==3.0.1
+anaconda-client==1.7.2
+anaconda-navigator==1.9.7
+anaconda-project==0.8.3
+apns2==0.7.1
+asn1crypto==1.0.1
+astroid==2.3.1
+astropy==3.2.1
+atomicwrites==1.3.0
+attrs==19.2.0
+Babel==2.7.0
+backcall==0.1.0
+backports.functools-lru-cache==1.5
+backports.os==0.1.1
+backports.shutil-get-terminal-size==1.0.0
+backports.tempfile==1.0
+backports.weakref==1.0.post1
+beautifulsoup4==4.8.0
+bitarray==1.0.1
+bkcharts==0.2
+bleach==3.1.0
+bokeh==1.3.4
+boto==2.49.0
+boto3==1.12.13
+botocore==1.15.13
+Bottleneck==1.2.1
+certifi==2019.9.11
+cffi==1.12.3
+chardet==3.0.4
+Click==7.0
+cloudpickle==1.2.2
+clyent==1.2.2
+colorama==0.4.1
+comtypes==1.1.7
+conda==4.7.12
+conda-build==3.18.9
+conda-package-handling==1.6.0
+conda-verify==3.4.2
+contextlib2==0.6.0
+crcmod==1.7
+cryptography==2.8
+cssselect==1.1.0
+cycler==0.10.0
+Cython==0.29.13
+cytoolz==0.10.0
+dask==2.5.2
+decorator==4.4.0
+defusedxml==0.6.0
+distributed==2.5.2
+Django==2.1
+django-appconf==1.0.3
+django-cors-headers==3.2.1
+django-guardian==2.2.0
+django-imagekit==4.0.2
+django-middleware-global-request==0.1.2
+django-ratelimit==2.0.0
+django-rest-framework==0.1.0
+djangorestframework==3.11.0
+djangorestframework-jwt==1.11.0
+docutils==0.15.2
+entrypoints==0.3
+et-xmlfile==1.0.1
+fastcache==1.1.0
+ffmpy==0.2.2
+filelock==3.0.12
+Flask==1.1.1
+fsspec==0.5.2
+future==0.17.1
+gevent==1.4.0
+glob2==0.7
+greenlet==0.4.15
+gunicorn==20.0.4
+h2==2.6.2
+h5py==2.9.0
+HeapDict==1.0.1
+hpack==3.0.0
+html5lib==1.0.1
+hyper==0.7.0
+hyperframe==3.2.0
+idna==2.8
+image==1.5.28
+imageio==2.6.0
+imagesize==1.1.0
+importlib-metadata==0.23
+ipip-ipdb==1.3.2
+ipykernel==5.1.2
+ipython==7.8.0
+ipython-genutils==0.2.0
+ipywidgets==7.5.1
+isort==4.3.21
+itsdangerous==1.1.0
+jdcal==1.4.1
+jedi==0.15.1
+Jinja2==2.10.3
+jmespath==0.9.5
+joblib==0.13.2
+jpush==3.3.8
+json5==0.8.5
+jsonschema==3.0.2
+jupyter==1.0.0
+jupyter-client==5.3.3
+jupyter-console==6.0.0
+jupyter-core==4.5.0
+jupyterlab==1.1.4
+jupyterlab-server==1.0.6
+keyring==18.0.0
+kiwisolver==1.1.0
+lazy-object-proxy==1.4.2
+libarchive-c==2.8
+llvmlite==0.29.0
+locket==0.2.0
+lxml==4.4.1
+m3u8-generator==1.5
+MarkupSafe==1.1.1
+matplotlib==3.1.1
+mccabe==0.6.1
+menuinst==1.4.16
+mistune==0.8.4
+mkl-fft==1.0.14
+mkl-random==1.1.0
+mkl-service==2.3.0
+mock==3.0.5
+more-itertools==7.2.0
+mpmath==1.1.0
+msgpack==0.6.1
+multipledispatch==0.6.0
+mysqlclient==1.4.6
+navigator-updater==0.2.1
+nbconvert==5.6.0
+nbformat==4.4.0
+networkx==2.3
+nltk==3.4.5
+nose==1.3.7
+notebook==6.0.1
+numba==0.45.1
+numexpr==2.7.0
+numpy==1.16.5
+numpydoc==0.9.1
+olefile==0.46
+openpyxl==3.0.0
+oss2==2.9.1
+packaging==19.2
+pandas==0.25.1
+pandocfilters==1.4.2
+parso==0.5.1
+partd==1.0.0
+path.py==12.0.1
+pathlib2==2.3.5
+patsy==0.5.1
+paypalrestsdk==1.13.1
+pep8==1.7.1
+pickleshare==0.7.5
+pilkit==2.0
+Pillow==6.2.0
+pkginfo==1.5.0.1
+pluggy==0.13.0
+ply==3.11
+prometheus-client==0.7.1
+prompt-toolkit==2.0.10
+psutil==5.6.3
+py==1.8.0
+pyasn1==0.4.8
+pycodestyle==2.5.0
+pycosat==0.6.3
+pycparser==2.19
+pycrypto==2.6.1
+pycryptodome==3.9.7
+pycryptodomex==3.9.4
+pycurl==7.43.0.3
+pyfcm==1.4.7
+pyflakes==2.1.1
+Pygments==2.4.2
+pyipip==0.1.1
+PyJWT==1.7.1
+pylint==2.4.2
+pymongo==3.10.1
+PyMySQL==0.10.1
+pyodbc==4.0.27
+pyOpenSSL==19.1.0
+pyparsing==2.4.2
+pyquery==1.4.1
+pyreadline==2.1
+pyrsistent==0.15.4
+PySocks==1.7.1
+pytest==5.2.1
+pytest-arraydiff==0.3
+pytest-astropy==0.5.0
+pytest-doctestplus==0.4.0
+pytest-openfiles==0.4.0
+pytest-remotedata==0.3.2
+python-alipay-sdk==2.0.1
+python-dateutil==2.8.0
+pytz==2019.3
+PyWavelets==1.0.3
+pywin32==223
+pywinpty==0.5.5
+PyYAML==5.1.2
+pyzmq==18.1.0
+qcloudsms-py==0.1.4
+QtAwesome==0.6.0
+qtconsole==4.5.5
+QtPy==1.9.0
+redis==3.4.1
+requests==2.22.0
+requests-aws4auth==0.9
+rope==0.14.0
+rsa==4.0
+ruamel-yaml==0.15.46
+s3transfer==0.3.3
+scikit-image==0.15.0
+scikit-learn==0.21.3
+scipy==1.3.1
+seaborn==0.9.0
+selenium==3.141.0
+Send2Trash==1.5.0
+simplegeneric==0.8.1
+simplejson==3.17.0
+singledispatch==3.4.0.3
+six==1.12.0
+snowballstemmer==2.0.0
+sortedcollections==1.1.2
+sortedcontainers==2.1.0
+soupsieve==1.9.3
+South==1.0.2
+Sphinx==2.2.0
+sphinxcontrib-applehelp==1.0.1
+sphinxcontrib-devhelp==1.0.1
+sphinxcontrib-htmlhelp==1.0.2
+sphinxcontrib-jsmath==1.0.1
+sphinxcontrib-qthelp==1.0.2
+sphinxcontrib-serializinghtml==1.1.3
+sphinxcontrib-websupport==1.1.2
+spyder==3.3.6
+spyder-kernels==0.5.2
+SQLAlchemy==1.3.9
+statsmodels==0.10.1
+sympy==1.4
+tables==3.5.2
+tblib==1.4.0
+terminado==0.8.2
+testpath==0.4.2
+toolz==0.10.0
+tornado==6.0.3
+tqdm==4.36.1
+traitlets==4.3.3
+unicodecsv==0.14.1
+urllib3==1.24.2
+var-dump==1.2
+wcwidth==0.1.7
+webencodings==0.5.1
+Werkzeug==0.16.0
+widgetsnbextension==3.5.1
+win-inet-pton==1.1.0
+win-unicode-console==0.5
+wincertstore==0.2
+wrapt==1.11.2
+xlrd==1.2.0
+XlsxWriter==1.2.1
+xlwings==0.15.10
+xlwt==1.3.0
+xmltodict==0.12.0
+xpinyin==0.5.6
+zict==1.0.0
+zipp==0.6.0