Selaa lähdekoodia

Merge branch 'dev' into lang

# Conflicts:
#	Controller/CloudStorage.py
#	Model/models.py
lang 4 vuotta sitten
vanhempi
commit
9f4bc71da5
6 muutettua tiedostoa jossa 219 lisäystä ja 454 poistoa
  1. 59 19
      Controller/CloudStorage.py
  2. 1 403
      Controller/CloudVod.py
  3. 101 19
      Controller/MealManage.py
  4. 17 10
      Controller/OrderContrller.py
  5. 21 3
      Model/models.py
  6. 20 0
      Object/TokenObject.py

+ 59 - 19
Controller/CloudStorage.py

@@ -32,9 +32,12 @@ from boto3.session import Session
 from django.http import JsonResponse, HttpResponseRedirect, HttpResponse
 from django.http import JsonResponse, HttpResponseRedirect, HttpResponse
 from django.db import transaction
 from django.db import transaction
 from django.views.generic.base import View
 from django.views.generic.base import View
+import jwt
 from pyfcm import FCMNotification
 from pyfcm import FCMNotification
+
 from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_ARN, SERVER_DOMAIN, PAYPAL_CRD, \
 from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_ARN, SERVER_DOMAIN, PAYPAL_CRD, \
-    SERVER_DOMAIN_SSL, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_ARN, APNS_MODE, APNS_CONFIG, BASE_DIR, JPUSH_CONFIG, FCM_CONFIG
+    SERVER_DOMAIN_SSL, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_ARN, APNS_MODE, APNS_CONFIG, BASE_DIR, \
+    JPUSH_CONFIG, FCM_CONFIG, OAUTH_ACCESS_TOKEN_SECRET
 from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket, StsCrdModel, \
 from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket, StsCrdModel, \
     ExperienceContextModel, Pay_Type, CDKcontextModel, Device_User, SysMassModel, SysMsgModel, UidPushModel, Unused_Uid_Meal
     ExperienceContextModel, Pay_Type, CDKcontextModel, Device_User, SysMassModel, SysMsgModel, UidPushModel, Unused_Uid_Meal
 from Object.AliPayObject import AliPayObject
 from Object.AliPayObject import AliPayObject
@@ -44,8 +47,7 @@ from Object.UidTokenObject import UidTokenObject
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
 from Object.m3u8generate import PlaylistGenerator
 from Object.m3u8generate import PlaylistGenerator
 from Object.WechatPayObject import WechatPayObject
 from Object.WechatPayObject import WechatPayObject
-from django.db.models import Q
-from django.db.models import F
+from django.db.models import Q, F
 
 
 from Service.ModelService import ModelService
 from Service.ModelService import ModelService
 
 
@@ -209,9 +211,9 @@ class CloudStorageView(View):
         # userqs = Device_User.objects.filter(userID=userID).values('is_experience')
         # userqs = Device_User.objects.filter(userID=userID).values('is_experience')
 
 
         if mold:
         if mold:
-            qs = qs.filter(bucket__mold=mold,lang=lang)
+            qs = qs.filter(bucket__mold=mold,lang__lang=lang)
         else:
         else:
-            qs = qs.filter(lang=lang)
+            qs = qs.filter(lang__lang=lang)
 
 
         if eq:
         if eq:
             qs = qs.filter(~Q(pay_type='10'))
             qs = qs.filter(~Q(pay_type='10'))
@@ -219,6 +221,7 @@ class CloudStorageView(View):
             qs = qs.filter(pay_type='10')
             qs = qs.filter(pay_type='10')
 
 
         qs = qs.filter(~Q(pay_type='11'))  # 过滤不显示激活码套餐
         qs = qs.filter(~Q(pay_type='11'))  # 过滤不显示激活码套餐
+        qs = qs.annotate(title=F('lang__title'),content=F('lang__content'),discount_content=F('lang__discount_content'))
         qs = qs.values("id", "title", "content", "price", "day", "currency", "bucket__storeDay",
         qs = qs.values("id", "title", "content", "price", "day", "currency", "bucket__storeDay",
                        "bucket__bucket", "bucket__area", "commodity_code",
                        "bucket__bucket", "bucket__area", "commodity_code",
                        "commodity_type", "is_discounts", "virtual_price", "expire",
                        "commodity_type", "is_discounts", "virtual_price", "expire",
@@ -252,6 +255,7 @@ class CloudStorageView(View):
 
 
     def do_sign_play_m3u8(self, request_dict, response):
     def do_sign_play_m3u8(self, request_dict, response):
         uid = request_dict.get('uid', None)
         uid = request_dict.get('uid', None)
+        uid = jwt.decode(uid, OAUTH_ACCESS_TOKEN_SECRET, algorithms='HS256').get('uid', '')
         channel = request_dict.get('channel', None)
         channel = request_dict.get('channel', None)
         storeTime = request_dict.get('time', None)
         storeTime = request_dict.get('time', None)
         now_time = int(time.time())
         now_time = int(time.time())
@@ -465,7 +469,7 @@ class CloudStorageView(View):
             )
             )
             vod_url = '{server_domain}/cloudstorage/signplaym3u8?' \
             vod_url = '{server_domain}/cloudstorage/signplaym3u8?' \
                       'uid={uid}&channel={channel}&time={time}&sign=tktktktk'. \
                       'uid={uid}&channel={channel}&time={time}&sign=tktktktk'. \
-                format(server_domain=SERVER_DOMAIN, uid=uid, channel=channel, time=vod['time'])
+                format(server_domain=SERVER_DOMAIN, uid=TokenObject().encryption(data={'uid': uid}), channel=channel, time=vod['time'])
             ts_num = int(vod['fg']) & 0xf
             ts_num = int(vod['fg']) & 0xf
             vod_play_list.append({
             vod_play_list.append({
                 'name': vod['time'],
                 'name': vod['time'],
@@ -648,6 +652,7 @@ class CloudStorageView(View):
         if paytype == "11":
         if paytype == "11":
             showtitle = "兑换成功"
             showtitle = "兑换成功"
 
 
+        wancheng = '完成'
         if lang != 'cn':
         if lang != 'cn':
             showtitle = "Payment successful"
             showtitle = "Payment successful"
             if paytype == "10":
             if paytype == "10":
@@ -655,7 +660,10 @@ class CloudStorageView(View):
 
 
             if paytype == "11":
             if paytype == "11":
                 showtitle = "Successful exchange"
                 showtitle = "Successful exchange"
+
+            wancheng = 'complete'
         response.content = '''
         response.content = '''
+        
 <html>
 <html>
 <head>
 <head>
         <!--浏览器不缓存-->
         <!--浏览器不缓存-->
@@ -719,7 +727,7 @@ class CloudStorageView(View):
     </div>
     </div>
     <center class="bottom">
     <center class="bottom">
             <div class="bottom_div" onclick="payOKButton()"> 
             <div class="bottom_div" onclick="payOKButton()"> 
-             完成
+             '''+wancheng+'''
             </div>
             </div>
     </center>
     </center>
     <script src="//hm.baidu.com/hm.js?eaa57ca47dacb4ad4f5a257001a3457c"></script><script>             // 点击付款成功按钮
     <script src="//hm.baidu.com/hm.js?eaa57ca47dacb4ad4f5a257001a3457c"></script><script>             // 点击付款成功按钮
@@ -812,12 +820,16 @@ class CloudStorageView(View):
                     sys_msg_text_list = ['成功购买云存', 'Successful purchase of cloud storage']
                     sys_msg_text_list = ['成功购买云存', 'Successful purchase of cloud storage']
                     self.do_vod_msg_Notice(UID, channel, userid, lang, sys_msg_text_list)
                     self.do_vod_msg_Notice(UID, channel, userid, lang, sys_msg_text_list)
                     red_url = "{SERVER_DOMAIN}web/paid2/success.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
                     red_url = "{SERVER_DOMAIN}web/paid2/success.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
+                    if lang != 'cn':
+                        red_url = "{SERVER_DOMAIN}web/paid2/en_success.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
                     return HttpResponseRedirect(red_url)
                     return HttpResponseRedirect(red_url)
             return response.json(0, signature)
             return response.json(0, signature)
         except Exception as e:
         except Exception as e:
             if order_qs:
             if order_qs:
                 order_qs.update(status=10)
                 order_qs.update(status=10)
             red_url = "{SERVER_DOMAIN}web/paid2/fail.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
             red_url = "{SERVER_DOMAIN}web/paid2/fail.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
+            if lang != 'cn':
+                red_url = "{SERVER_DOMAIN}web/paid2/en_fail.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
             return HttpResponseRedirect(red_url)
             return HttpResponseRedirect(red_url)
 
 
     def do_pay_by_paypal_callback(self, request_dict, response):
     def do_pay_by_paypal_callback(self, request_dict, response):
@@ -830,6 +842,8 @@ class CloudStorageView(View):
 
 
             if not orderID:
             if not orderID:
                 red_url = "{SERVER_DOMAIN}web/paid2/fail.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
                 red_url = "{SERVER_DOMAIN}web/paid2/fail.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
+                if lang != 'cn':
+                    red_url = "{SERVER_DOMAIN}web/paid2/en_fail.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
                 return HttpResponseRedirect(red_url)
                 return HttpResponseRedirect(red_url)
             # else:
             # else:
             #     order_qs.update(status=9)
             #     order_qs.update(status=9)
@@ -840,6 +854,8 @@ class CloudStorageView(View):
             print(payres)
             print(payres)
             if not payres:
             if not payres:
                 red_url = "{SERVER_DOMAIN}web/paid2/fail.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
                 red_url = "{SERVER_DOMAIN}web/paid2/fail.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
+                if lang != 'cn':
+                    red_url = "{SERVER_DOMAIN}web/paid2/en_fail.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
                 return HttpResponseRedirect(red_url)
                 return HttpResponseRedirect(red_url)
             print("Payment execute successfully")
             print("Payment execute successfully")
 
 
@@ -1028,9 +1044,9 @@ class CloudStorageView(View):
 
 
         # if dv_qs[0]['vodPrimaryUserID'] != '' and dv_qs[0]['vodPrimaryUserID'] != userID:
         # if dv_qs[0]['vodPrimaryUserID'] != '' and dv_qs[0]['vodPrimaryUserID'] != userID:
         #     return response.json(10033)
         #     return response.json(10033)
-        smqs = Store_Meal.objects.filter(id=rank, pay_type=pay_type). \
-            values('currency', 'price', 'content', 'day',
-                   'commodity_type', 'title', 'content',
+        smqs = Store_Meal.objects.filter(id=rank, pay_type=pay_type, lang__lang=lang). \
+            values('currency', 'price', 'lang__content', 'day',
+                   'commodity_type', 'lang__title',
                    'expire', 'commodity_code', 'discount_price')
                    'expire', 'commodity_code', 'discount_price')
         if not smqs.exists():
         if not smqs.exists():
             return response.json(173)
             return response.json(173)
@@ -1038,7 +1054,7 @@ class CloudStorageView(View):
         price = smqs[0]['price']
         price = smqs[0]['price']
         if is_select_discount == '1':
         if is_select_discount == '1':
             price = float(smqs[0]['price']) + float(smqs[0]['discount_price'])
             price = float(smqs[0]['price']) + float(smqs[0]['discount_price'])
-        content = smqs[0]['content']
+        content = smqs[0]['lang__content']
         day = smqs[0]['day']
         day = smqs[0]['day']
         commodity_code = smqs[0]['commodity_code']
         commodity_code = smqs[0]['commodity_code']
         commodity_type = smqs[0]['commodity_type']
         commodity_type = smqs[0]['commodity_type']
@@ -1051,11 +1067,15 @@ class CloudStorageView(View):
 
 
         orderID = CommonService.createOrderID()
         orderID = CommonService.createOrderID()
         if pay_type == 1:
         if pay_type == 1:
+
+            cal_url = "{SERVER_DOMAIN}web/paid2/fail.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
+            if lang != 'cn':
+                cal_url = "{SERVER_DOMAIN}web/paid2/en_fail.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
             call_sub_url = "{SERVER_DOMAIN}cloudstorage/dopaypalcallback?orderID={orderID}&lang={lang}". \
             call_sub_url = "{SERVER_DOMAIN}cloudstorage/dopaypalcallback?orderID={orderID}&lang={lang}". \
                 format(SERVER_DOMAIN=SERVER_DOMAIN, orderID=orderID, lang=lang)
                 format(SERVER_DOMAIN=SERVER_DOMAIN, orderID=orderID, lang=lang)
             # call_sub_url = "http://binbin.uicp.vip/cloudstorage/dopaypalcallback?orderID={orderID}".format(
             # call_sub_url = "http://binbin.uicp.vip/cloudstorage/dopaypalcallback?orderID={orderID}".format(
             # SERVER_DOMAIN=SERVER_DOMAIN, orderID=orderID)
             # SERVER_DOMAIN=SERVER_DOMAIN, orderID=orderID)
-            call_clc_url = "{SERVER_DOMAIN}web/paid2/fail.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
+            call_clc_url = cal_url
             paypalrestsdk.configure(PAYPAL_CRD)
             paypalrestsdk.configure(PAYPAL_CRD)
             payment = paypalrestsdk.Payment({
             payment = paypalrestsdk.Payment({
                 "intent": "sale",
                 "intent": "sale",
@@ -1088,7 +1108,7 @@ class CloudStorageView(View):
             try:
             try:
                 aliPayObj = AliPayObject()
                 aliPayObj = AliPayObject()
                 alipay = aliPayObj.conf()
                 alipay = aliPayObj.conf()
-                subject = smqs[0]['title'] + smqs[0]['content']
+                subject = smqs[0]['lang__title'] + smqs[0]['lang__content']
                 # biz_content = {
                 # biz_content = {
                 #     "subject": subject,
                 #     "subject": subject,
                 #     "out_trade_no": orderID,
                 #     "out_trade_no": orderID,
@@ -1194,8 +1214,8 @@ class CloudStorageView(View):
 
 
         orderID = CommonService.createOrderID()
         orderID = CommonService.createOrderID()
         nowTime = int(time.time())
         nowTime = int(time.time())
-        smqs = Store_Meal.objects.filter(id=rank). \
-            values("day", "bucket_id", "bucket__storeDay", "expire", 'content', 'price', 'currency', 'commodity_type')
+        smqs = Store_Meal.objects.filter(id=rank,lang__lang=lang). \
+            values("day", "bucket_id", "bucket__storeDay", "expire", 'lang__content', 'price', 'currency', 'commodity_type')
         if not smqs.exists():
         if not smqs.exists():
             return response.json(173)
             return response.json(173)
         bucketId = smqs[0]['bucket_id']
         bucketId = smqs[0]['bucket_id']
@@ -1228,7 +1248,7 @@ class CloudStorageView(View):
                      updateTime=nowTime,use_status=1)
                      updateTime=nowTime,use_status=1)
                 uid_bucket_id = ub_cqs.id
                 uid_bucket_id = ub_cqs.id
         Order_Model.objects.create(orderID=orderID, UID=uid, channel=channel, userID_id=userID,
         Order_Model.objects.create(orderID=orderID, UID=uid, channel=channel, userID_id=userID,
-                                   desc=smqs[0]['content'], payType=pay_type, payTime=nowTime,
+                                   desc=smqs[0]['lang__content'], payType=pay_type, payTime=nowTime,
                                    price=smqs[0]['price'], currency=smqs[0]['currency'], addTime=nowTime,
                                    price=smqs[0]['price'], currency=smqs[0]['currency'], addTime=nowTime,
                                    updTime=nowTime,
                                    updTime=nowTime,
                                    pay_url="体验版",
                                    pay_url="体验版",
@@ -1249,14 +1269,14 @@ class CloudStorageView(View):
 
 
         sys_msg_text_list = ['成功购买云存', 'Successful purchase of cloud storage']
         sys_msg_text_list = ['成功购买云存', 'Successful purchase of cloud storage']
         # return response.json(0)
         # return response.json(0)
-        returnurl = "{SERVER_DOMAIN}cloudstorage/payOK?{lang}".format(SERVER_DOMAIN=SERVER_DOMAIN,lang=lang)
+        returnurl = "{SERVER_DOMAIN}cloudstorage/payOK?lang={lang}".format(SERVER_DOMAIN=SERVER_DOMAIN,lang=lang)
         if pay_type == 10:
         if pay_type == 10:
             ExperienceContextModel.objects.create(
             ExperienceContextModel.objects.create(
                 experience_type=0,
                 experience_type=0,
                 uid=uid,
                 uid=uid,
                 do_time=nowTime
                 do_time=nowTime
             )
             )
-            returnurl = "{SERVER_DOMAIN}cloudstorage/payOK?paytype=10&{lang}".format(SERVER_DOMAIN=SERVER_DOMAIN,lang=lang)
+            returnurl = "{SERVER_DOMAIN}cloudstorage/payOK?paytype=10&lang={lang}".format(SERVER_DOMAIN=SERVER_DOMAIN,lang=lang)
             sys_msg_text_list = ['成功体验云存', 'Successful experience of cloud storage']
             sys_msg_text_list = ['成功体验云存', 'Successful experience of cloud storage']
 
 
         if pay_type == 11:
         if pay_type == 11:
@@ -1264,7 +1284,7 @@ class CloudStorageView(View):
             update_dict['is_activate'] = 1
             update_dict['is_activate'] = 1
             update_dict['order'] = orderID
             update_dict['order'] = orderID
             CDKcontextModel.objects.filter(cdk=cdk).update(**update_dict)
             CDKcontextModel.objects.filter(cdk=cdk).update(**update_dict)
-            returnurl = "{SERVER_DOMAIN}cloudstorage/payOK?paytype=11&{lang}".format(SERVER_DOMAIN=SERVER_DOMAIN,lang=lang)
+            returnurl = "{SERVER_DOMAIN}cloudstorage/payOK?paytype=11&lang={lang}".format(SERVER_DOMAIN=SERVER_DOMAIN,lang=lang)
             sys_msg_text_list = ['成功兑换云存', 'Successful exchange of cloud storage']
             sys_msg_text_list = ['成功兑换云存', 'Successful exchange of cloud storage']
 
 
 
 
@@ -1317,6 +1337,7 @@ class CloudStorageView(View):
     # 设备关联套餐列表
     # 设备关联套餐列表
     def device_commodity(self, request_dict, userID, response):
     def device_commodity(self, request_dict, userID, response):
         uid = request_dict.get('uid', None)
         uid = request_dict.get('uid', None)
+        lang = request_dict.get('lang', None)
         dv_qs = Device_Info.objects.filter(userID_id=userID, UID=uid, isShare=False, isExist=1) \
         dv_qs = Device_Info.objects.filter(userID_id=userID, UID=uid, isShare=False, isExist=1) \
             .values('vodPrimaryUserID')
             .values('vodPrimaryUserID')
         if not dv_qs.exists() or dv_qs[0]['vodPrimaryUserID'] != userID:
         if not dv_qs.exists() or dv_qs[0]['vodPrimaryUserID'] != userID:
@@ -1335,6 +1356,25 @@ class CloudStorageView(View):
         else:
         else:
             commodity_dict['using'] = [uid_bucket]
             commodity_dict['using'] = [uid_bucket]
         return response.json(0, commodity_dict)
         return response.json(0, commodity_dict)
+        uid_bucket = UID_Bucket.objects.filter(uid=uid, endTime__gte=now_time).values("id", "uid", "endTime",
+                                                                                      "bucket__content", "bucket__id").order_by(
+            'addTime')
+        bclist = []
+        for ub in uid_bucket:
+            bclist.append(ub['bucket__id'])
+
+        smqs = Store_Meal.objects.filter(bucket__id__in=bclist, lang__lang=lang).values('lang__lang','bucket__id','lang__title')
+        for index, value in enumerate(uid_bucket):
+            value['is_use'] = 0
+            if index == 0:
+                value['is_use'] = 1
+
+            for sm in smqs:
+
+                if value['bucket__id'] == sm['bucket__id']:
+                    value['bucket__content'] = sm['lang__title']
+
+        return response.json(0, list(uid_bucket))
 
 
     # 提前使用设备关联套餐
     # 提前使用设备关联套餐
     def switch_device_commodity(self, request_dict, userID, response):
     def switch_device_commodity(self, request_dict, userID, response):

+ 1 - 403
Controller/CloudVod.py

@@ -100,12 +100,6 @@ class CloudVodView(View):
             return self.do_pay_ok()
             return self.do_pay_ok()
         elif operation == 'payError':
         elif operation == 'payError':
             return self.do_pay_error()
             return self.do_pay_error()
-        elif operation == 'aliPayCallback':
-            return self.do_ali_pay_callback(request)
-        elif operation == 'dopaypalcallback':
-            return self.do_pay_by_paypal_callback(request)
-        elif operation == 'doalicallback':
-            return self.do_pay_by_ali_callback(request)
         else:
         else:
             token = request_dict.get('token', None)
             token = request_dict.get('token', None)
             # 设备主键uid
             # 设备主键uid
@@ -114,9 +108,7 @@ class CloudVodView(View):
             if tko.code != 0:
             if tko.code != 0:
                 return response.json(tko.code)
                 return response.json(tko.code)
             userID = tko.userID
             userID = tko.userID
-            if operation == 'createOrder':
-                return self.do_create_order(request_dict, userID, response)
-            elif operation == 'status':
+            if operation == 'status':
                 return self.do_change_status(request_dict, userID, response)
                 return self.do_change_status(request_dict, userID, response)
             elif operation == 'details':
             elif operation == 'details':
                 return self.do_get_details(request_dict, response)
                 return self.do_get_details(request_dict, response)
@@ -124,149 +116,11 @@ class CloudVodView(View):
                 return self.do_filter_playlist(request_dict, userID, response)
                 return self.do_filter_playlist(request_dict, userID, response)
             elif operation == 'findVod':
             elif operation == 'findVod':
                 return self.do_find_playlist(request_dict, userID, response)
                 return self.do_find_playlist(request_dict, userID, response)
-            # 支付宝支付
-            elif operation == 'aliPayCreateOrder':
-                return self.do_pay_by_ali(request_dict, userID, response)
             elif operation == 'orderStatus':
             elif operation == 'orderStatus':
                 return self.do_pay_status(request_dict, userID, response)
                 return self.do_pay_status(request_dict, userID, response)
-            elif operation == 'createPayOrder':
-                return self.do_create_pay_order(request_dict, userID, response)
-            # elif operation == 'queryAlipayOrder':
-            #     return self.query_alipay_order(request_dict, userID, response)
-            # elif operation == 'alipayCancel':
-            #     return self.do_alipay_cancel(request_dict, userID, response)
-            # elif operation == 'alipayRefund':
-            #     return self.do_alipay_refund(request_dict, userID, response)
             else:
             else:
                 return response.json(414)
                 return response.json(414)
 
 
-    def do_ali_pay_callback(self, request):
-        response = ResponseObject()
-        data = request.POST.dict()
-        signature = data["sign"]
-        data.pop('sign')
-        orderID = data['out_trade_no']
-
-        order_qs = Order_Model.objects.filter(orderID=orderID, status=0)
-        print(order_qs)
-
-        if not order_qs.exists():
-            return response.json(404)
-        print(json.dumps(data))
-        print(signature)
-        # verify
-        aliPayObj = AliPayObject()
-        alipay = aliPayObj.conf()
-        success = alipay.verify(data, signature)
-        if success and data["trade_status"] in ("TRADE_SUCCESS", "TRADE_FINISHED"):
-            print("trade succeed")
-            nowTime = int(time.time())
-            order_list = order_qs.values("UID", "rank__id", "channel")
-            rank_id = order_list[0]['rank__id']
-            print(rank_id)
-            UID = order_list[0]['UID']
-            channel = order_list[0]['channel']
-            order_qs.update(status=1, updTime=nowTime, trade_no=data['trade_no'])
-
-            smqs = Store_Meal.objects.filter(id=rank_id).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():
-                # 判断是否过期了
-                if nowTime > ubqs[0]['endTime']:
-                    ubqs.update(endTime=nowTime + addTime)
-                else:
-                    # 同一个bucket续费
-                    if bucketId == ubqs[0]['bucket_id']:
-                        ubqs.update(endTime=ubqs[0]['endTime'] + addTime)
-                    else:
-                        if ubqs[0]['bucket__storeDay'] > smqs[0]['bucket__storeDay']:
-                            return response.json(10, '不可选低级别套餐')
-                        else:
-                            # 升级
-                            origin_storeDay = int(ubqs[0]['bucket__storeDay'])
-                            upgrade_storeDay = int(smqs[0]['bucket__storeDay'])
-                            ctcTime = ubqs[0]['endTime'] - nowTime
-                            multiple = math.ceil(upgrade_storeDay / origin_storeDay)
-                            ubqs.update(endTime=ctcTime / multiple + addTime + ubqs[0]['endTime'], bucket_id=bucketId)
-                            # 付款成功把oss token删除
-                            OssCrdModel.objects.filter(uid=UID, channel=channel).delete()
-            # 新增模式
-            else:
-                print('create')
-                UID_Bucket.objects.create(uid=UID, channel=channel,
-                                          bucket_id=bucketId, endTime=nowTime + addTime)
-            red_url = "{SERVER_DOMAIN}cloudVod/payOK".format(SERVER_DOMAIN=SERVER_DOMAIN)
-            return HttpResponseRedirect(red_url)
-        return response.json(0, signature)
-
-    #发起支付宝支付
-    def do_pay_by_ali(self, request_dict, userID, response):
-        uid = request_dict.get('uid', None)
-        rank = request_dict.get('rank', None)
-        channel = request_dict.get('channel', None)
-        qs = Device_Info.objects.filter(userID_id=userID, UID=uid, isShare=False)
-        if not qs.exists():
-            return response.json(12)
-        if not channel or not rank:
-            return response.json(444, 'channel,rank')
-        smqs = Store_Meal.objects.filter(id=rank). \
-            values("title", "currency", "price", "content", "day", "bucket__storeDay", "bucket__region", "type")
-        if not smqs.exists():
-            # 套餐不存在
-            return response.json(173)
-        if smqs[0]['type'] != 1:
-            return response.json(10, '不支持支付宝支付')
-        currency = smqs[0]['currency']
-        price = smqs[0]['price']
-        content = smqs[0]['content']
-        day = smqs[0]['day']
-        nowTime = int(time.time())
-        ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel, endTime__gte=nowTime). \
-            values("bucket__storeDay", "bucket__region")
-        if ubqs.exists():
-            if ubqs[0]['bucket__region'] != smqs[0]['bucket__region']:
-                return response.json(712)  # 区域不一致
-            elif ubqs[0]['bucket__storeDay'] != smqs[0]['bucket__storeDay']:
-                return response.json(713)  # 不可更改套餐
-            # 续费流程
-        nowTime = int(time.time())
-        # 新增流程
-        orderID = CommonService.createOrderID()
-
-        try:
-            aliPayObj = AliPayObject()
-            alipay = aliPayObj.conf()
-            order_string = alipay.api_alipay_trade_wap_pay(
-                out_trade_no=orderID,
-                total_amount=price,
-                subject=smqs[0]['title'],
-                return_url="{SERVER_DOMAIN_SSL}cloudVod/payOK".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL),
-                notify_url="{SERVER_DOMAIN_SSL}cloudVod/aliPayCallback".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
-                # return_url="http://192.168.136.40/cloudVod/payOK",
-                # notify_url="http://192.168.136.40/cloudVod/aliPayCallback"
-            )
-            print(order_string)
-        except Exception as e:
-            print(repr(e))
-            return response.json(10, repr(e))
-        if order_string:
-            redirectUrl = aliPayObj.alipay_prefix + order_string
-            Order_Model.objects.create(orderID=orderID, UID=uid, channel=channel, userID_id=userID, desc=content,
-                                       price=price, currency=currency, addTime=nowTime, updTime=nowTime,
-                                       endTime=nowTime + int(day) * 3600 * 24, rank_id=rank, payType=1)
-            return JsonResponse(status=200,
-                                data={'result_code': 0, 'reason': 'success',
-                                      'result': {"redirectUrl": redirectUrl, "orderID": orderID},
-                                      'error_code': 0})
-        else:
-            return response.json(10, '生成订单错误')
-
     def do_get_details(self, request_dict, response):
     def do_get_details(self, request_dict, response):
         uid = request_dict.get('uid', None)
         uid = request_dict.get('uid', None)
         dvqs = Device_Info.objects.filter(UID=uid, isShare=False)
         dvqs = Device_Info.objects.filter(UID=uid, isShare=False)
@@ -438,262 +292,6 @@ class CloudVodView(View):
         '''
         '''
         return response
         return response
 
 
-    def do_pay_by_ali_callback(self, request):
-        response = ResponseObject()
-        data = request.POST.dict()
-        signature = data["sign"]
-        data.pop('sign')
-        orderID = data['out_trade_no']
-
-        order_qs = Order_Model.objects.filter(orderID=orderID, status=0)
-        print(order_qs)
-
-        if not order_qs.exists():
-            return response.json(404)
-        print(json.dumps(data))
-        print(signature)
-        # verify
-        aliPayObj = AliPayObject()
-        alipay = aliPayObj.conf()
-        success = alipay.verify(data, signature)
-        if success and data["trade_status"] in ("TRADE_SUCCESS", "TRADE_FINISHED"):
-            print("trade succeed")
-            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
-                UID_Bucket.objects.create(uid=UID, channel=channel, bucket_id=bucketId, endTime=new_starTime + addTime)
-            else:
-                UID_Bucket.objects.create(uid=UID, channel=channel, bucket_id=bucketId, endTime=nowTime + addTime)
-            red_url = "{SERVER_DOMAIN}cloudVod/payOK".format(SERVER_DOMAIN=SERVER_DOMAIN)
-            return HttpResponseRedirect(red_url)
-        return response.json(0, signature)
-
-    def do_pay_by_paypal_callback(self, request_dict, response):
-        paymentId = request_dict.get('paymentId', None)
-        PayerID = request_dict.get('PayerID', None)
-        orderID = request_dict.get('orderID', None)
-        if not paymentId or not PayerID or not orderID:
-            red_url = "{SERVER_DOMAIN}cloudVod/payError".format(SERVER_DOMAIN=SERVER_DOMAIN)
-            return HttpResponseRedirect(red_url)
-        paypalrestsdk.configure(PAYPAL_CRD)
-        # ID of the payment. This ID is provided when creating payment.
-        payment = paypalrestsdk.Payment.find(paymentId)
-        payres = payment.execute({"payer_id": PayerID})
-        print(payres)
-        if not payres:
-            red_url = "{SERVER_DOMAIN}cloudVod/payError".format(SERVER_DOMAIN=SERVER_DOMAIN)
-            return HttpResponseRedirect(red_url)
-        print("Payment execute successfully")
-        order_qs = Order_Model.objects.filter(orderID=orderID)
-        nowTime = int(time.time())
-        order_qs.update(status=1, updTime=nowTime)
-        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()
-            ubq = ubqs[ubqs_count - 1, ubqs_count]
-            new_starTime = ubq['endTime'] + 1
-            UID_Bucket.objects.create(uid=UID, channel=channel, bucket_id=bucketId, endTime=new_starTime + addTime)
-        else:
-            UID_Bucket.objects.create(uid=UID, channel=channel, bucket_id=bucketId, endTime=nowTime + addTime)
-            # return response.json(0)
-        red_url = "{SERVER_DOMAIN}cloudVod/payOK".format(SERVER_DOMAIN=SERVER_DOMAIN)
-        return HttpResponseRedirect(red_url)
-
-    def do_create_pay_order(self, request_dict, userID, response):
-        uid = request_dict.get('uid', None)
-        channel = request_dict.get('channel', None)
-        commodity_code = request_dict.get('commodity_code', None)
-        pay_type = int(request_dict.get('pay_type', None))
-        dv_qs = Device_Info.objects.filter(userID_id=userID, UID=uid, isShare=False, isExist=1)
-        if not dv_qs.exists():
-            return response.json(12)
-        smqs = Store_Meal.objects.filter(commodity_code=commodity_code, type=pay_type). \
-            values('currency', 'price', 'content', 'day', 'commodity_type', 'title', 'content')
-        if not smqs.exists():
-            return response.json(10, '套餐不存在')
-        currency = smqs[0]['currency']
-        price = smqs[0]['price']
-        content = smqs[0]['content']
-        day = smqs[0]['day']
-        commodity_type = smqs[0]['commodity_type']
-        # 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()
-        #     ubq = ubqs[ubqs_count - 1, ubqs_count]
-        #     new_starTime = ubq['endTime'] + 1
-        nowTime = int(time.time())
-        orderID = CommonService.createOrderID()
-        if pay_type == 0:
-            call_sub_url = "{SERVER_DOMAIN}cloudVod/dopaypalcallback?orderID={orderID}". \
-                format(SERVER_DOMAIN=SERVER_DOMAIN, orderID=orderID)
-            # call_sub_url = "http://192.168.136.40:8077/cloudVod/payExecute?orderID={orderID}".format(
-            #     SERVER_DOMAIN=SERVER_DOMAIN, orderID=orderID)
-            call_clc_url = "{SERVER_DOMAIN}cloudVod/payError".format(SERVER_DOMAIN=SERVER_DOMAIN)
-            paypalrestsdk.configure(PAYPAL_CRD)
-            payment = paypalrestsdk.Payment({
-                "intent": "sale",
-                "payer": {"payment_method": "paypal"},
-                "redirect_urls": {"return_url": call_sub_url, "cancel_url": call_clc_url},
-                "transactions": [{
-                    "item_list": {
-                        "items": [
-                            {"name": "Cloud video", "sku": "1", "price": price, "currency": "USD", "quantity": 1}]},
-                    "amount": {"total": price, "currency": currency},
-                    "description": content
-                }]})
-            if payment.create():
-                print("Payment created successfully")
-            else:
-                print(payment.error)
-                return response.json(10, payment.error)
-            print(payment)
-            for link in payment.links:
-                if link.rel == "approval_url":
-                    approval_url = str(link.href)
-                    print("Redirect for approval: %s" % (approval_url))
-                    Order_Model.objects.create(orderID=orderID, UID=uid, channel=channel, userID_id=userID,
-                                               desc=content,
-                                               price=price, currency=currency, addTime=nowTime, updTime=nowTime,
-                                               endTime=(nowTime + int(day) * 3600 * 24), paypal=approval_url,
-                                               commodity_code=commodity_code, commodity_type=commodity_type)
-                    return response.json(0, {"redirectUrl": approval_url, "orderID": orderID})
-            return response.json(10, 'generate_order_false')
-        else:
-            try:
-                aliPayObj = AliPayObject()
-                alipay = aliPayObj.conf()
-                subject = smqs[0]['title'] + smqs[0]['content']
-                order_string = alipay.api_alipay_trade_wap_pay(
-                    out_trade_no=orderID,
-                    total_amount=price,
-                    subject=subject,
-                    return_url="{SERVER_DOMAIN_SSL}cloudVod/payOK".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL),
-                    notify_url="{SERVER_DOMAIN_SSL}cloudVod/doalicallback".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
-                    # return_url="http://192.168.136.40/cloudVod/payOK",
-                    # notify_url="http://192.168.136.40/cloudVod/aliPayCallback"
-                )
-            except Exception as e:
-                print(repr(e))
-                return response.json(10, repr(e))
-            else:
-                if order_string:
-                    redirectUrl = aliPayObj.alipay_prefix + order_string
-                    Order_Model.objects.create(orderID=orderID, UID=uid, channel=channel, userID_id=userID,
-                                               desc=content, price=price, currency=currency, addTime=nowTime,
-                                               updTime=nowTime, endTime=nowTime + int(day) * 3600 * 24,
-                                               commodity_code=commodity_code, commodity_type=commodity_type,
-                                               paypal='', payType=1)
-                    return JsonResponse(status=200, data={'result_code': 0, 'reason': 'success',
-                                                          'result': {"redirectUrl": redirectUrl, "orderID": orderID},
-                                                          'error_code': 0})
-                else:
-                    return response.json(10, '生成订单错误')
-
-    # 发起paypal支付
-    def do_create_order(self, request_dict, userID, response):
-        uid = request_dict.get('uid', None)
-        rank = request_dict.get('rank', None)
-        channel = request_dict.get('channel', None)
-        if not uid or not channel or not rank:
-            return response.json(444, 'channel,rank')
-        qs = Device_Info.objects.filter(userID_id=userID, UID=uid, isShare=False)
-
-        if not qs.exists():
-            return response.json(12)
-        smqs = Store_Meal.objects.filter(id=rank). \
-            values("currency", "price", "content", "day", "bucket__storeDay", "bucket__region", "type")
-        if not smqs.exists():
-            return response.json(10, '套餐不存在')
-        if smqs[0]['type'] != 0:
-            return response.json(10, '套餐不支持paypal支付')
-        currency = smqs[0]['currency']
-        price = smqs[0]['price']
-        content = smqs[0]['content']
-        day = smqs[0]['day']
-        nowTime = int(time.time())
-        ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel, endTime__gte=nowTime). \
-            values("bucket__storeDay", "bucket__region")
-        if ubqs.exists():
-            if ubqs[0]['bucket__region'] != smqs[0]['bucket__region']:
-                return response.json(712)  # 区域不一致
-            # elif ubqs[0]['bucket__storeDay'] > smqs[0]['bucket__storeDay']:
-            #     return response.json(711)  # 不可降级
-            elif ubqs[0]['bucket__storeDay'] != smqs[0]['bucket__storeDay']:
-                return response.json(713)  # 不可更改套餐
-            # 续费流程
-        nowTime = int(time.time())
-        # 判断是否存在未完成订单
-        # hasOrder = Order_Model.objects.filter(UID=uid, channel=channel, addTime__gte=nowTime - 3600, status=0,
-        #                                       rank_id=rank, userID_id=userID).values('paypal')
-        # if hasOrder.exists():
-        #     approval_url = hasOrder[0]['paypal']
-        #     return response.json(0, {"redirectUrl": approval_url})
-        # 新增流程
-        orderID = CommonService.createOrderID()
-        call_sub_url = "{SERVER_DOMAIN}cloudVod/payExecute?orderID={orderID}". \
-            format(SERVER_DOMAIN=SERVER_DOMAIN, orderID=orderID)
-        # call_sub_url = "http://192.168.136.40:8077/cloudVod/payExecute?orderID={orderID}".format(
-        #     SERVER_DOMAIN=SERVER_DOMAIN, orderID=orderID)
-        call_clc_url = "{SERVER_DOMAIN}cloudVod/payError".format(SERVER_DOMAIN=SERVER_DOMAIN)
-        paypalrestsdk.configure(PAYPAL_CRD)
-        payment = paypalrestsdk.Payment({
-            "intent": "sale",
-            "payer": {"payment_method": "paypal"},
-            "redirect_urls": {"return_url": call_sub_url, "cancel_url": call_clc_url},
-            "transactions": [{
-                "item_list": {
-                    "items": [{"name": "Cloud video", "sku": "1", "price": price, "currency": "USD", "quantity": 1}]},
-                "amount": {"total": price, "currency": currency},
-                "description": content
-            }]})
-        if payment.create():
-            print("Payment created successfully")
-        else:
-            print(payment.error)
-            return response.json(10, payment.error)
-        print(payment)
-        for link in payment.links:
-            if link.rel == "approval_url":
-                approval_url = str(link.href)
-                print("Redirect for approval: %s" % (approval_url))
-                Order_Model.objects.create(orderID=orderID, UID=uid, trade_no=payment['id'], channel=channel, userID_id=userID, desc=content,
-                                           price=price, currency=currency, addTime=nowTime, updTime=nowTime,
-                                           endTime=nowTime + int(day) * 3600 * 24,
-                                           rank_id=rank,
-                                           paypal=approval_url)
-                return response.json(0, {"redirectUrl": approval_url, "orderID": orderID})
-        return response.json(10, 'generate_order_false')
-
-
     def do_getSts(self, request_dict, ip, response):
     def do_getSts(self, request_dict, ip, response):
         uidToken = request_dict.get('uidToken', None)
         uidToken = request_dict.get('uidToken', None)
         utko = UidTokenObject(uidToken)
         utko = UidTokenObject(uidToken)

+ 101 - 19
Controller/MealManage.py

@@ -18,7 +18,7 @@ from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
 from django.views.decorators.csrf import csrf_exempt
 from django.views.generic.base import View
 from django.views.generic.base import View
 
 
-from Model.models import Store_Meal, VodBucketModel, Pay_Type
+from Model.models import Store_Meal, VodBucketModel, Pay_Type, Lang
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
@@ -68,26 +68,35 @@ class MealManage(View):
             return self.delete(request_dict, userID, response)
             return self.delete(request_dict, userID, response)
         elif operation == 'find':
         elif operation == 'find':
             return self.find(request_dict, userID, response)
             return self.find(request_dict, userID, response)
+        elif operation == 'query_language':
+            return self.query_language(request_dict, response)
+        elif operation == 'add_language':
+            return self.add_language(request_dict, response)
+        elif operation == 'delete_language':
+            return self.delete_language(request_dict, response)
+        elif operation == 'edit_language':
+            return self.edit_language(request_dict, response)
         else:
         else:
             return response.json(444, 'operation')
             return response.json(444, 'operation')
 
 
     def add(self, request_dict, userID, response):
     def add(self, request_dict, userID, response):
-        title = request_dict.get('title', None)
+        # title = request_dict.get('title', None)
         id = request_dict.get('id', None)
         id = request_dict.get('id', None)
         price = request_dict.get('price', None)
         price = request_dict.get('price', None)
-        content = request_dict.get('content', None)
+        # content = request_dict.get('content', None)
         day = request_dict.get('day', None)
         day = request_dict.get('day', None)
+        commodity_code = request_dict.get('commodity_code', None)
         currency = request_dict.get('currency', None)
         currency = request_dict.get('currency', None)
         bucketID = request_dict.get('bucketID', None)
         bucketID = request_dict.get('bucketID', None)
         paytype = request_dict.get('paytype', None)
         paytype = request_dict.get('paytype', None)
         virtual_price = request_dict.get('virtual_price', None)
         virtual_price = request_dict.get('virtual_price', None)
         is_discounts = request_dict.get('is_discounts', None)
         is_discounts = request_dict.get('is_discounts', None)
         discount_price = request_dict.get('discount_price', None)
         discount_price = request_dict.get('discount_price', None)
-        discount_content = request_dict.get('discount_content', None)
         expire = request_dict.get('expire', None)
         expire = request_dict.get('expire', None)
         symbol = request_dict.get('symbol', None)
         symbol = request_dict.get('symbol', None)
 
 
-        if not title or not id or not price or not day or not content:
+        # if not title or not id or not price or not day or not content:
+        if not id or not price or not day:
             return response.json(444, 'title,id,price,content,day,bucketID')
             return response.json(444, 'title,id,price,content,day,bucketID')
         own_perm = ModelService.check_perm(userID=userID, permID=40)
         own_perm = ModelService.check_perm(userID=userID, permID=40)
         if own_perm is not True:
         if own_perm is not True:
@@ -96,9 +105,9 @@ class MealManage(View):
             bucketQs = VodBucketModel.objects.filter(id=bucketID)
             bucketQs = VodBucketModel.objects.filter(id=bucketID)
             if Store_Meal.objects.filter(id=id):
             if Store_Meal.objects.filter(id=id):
                 return response.json(10, '已存在')
                 return response.json(10, '已存在')
-            store_meal = Store_Meal(id=id, title=title, price=price, content=content, day=day, bucket_id=bucketID,
+            store_meal = Store_Meal(id=id, price=price, day=day, bucket_id=bucketID, commodity_code = commodity_code,
                                     currency=currency, virtual_price=virtual_price, is_discounts=is_discounts,
                                     currency=currency, virtual_price=virtual_price, is_discounts=is_discounts,
-                                    discount_price=discount_price, discount_content=discount_content, expire=expire, symbol=symbol)
+                                    discount_price=discount_price, expire=expire, symbol=symbol)
             store_meal.save()
             store_meal.save()
             paytype = paytype.split(',')
             paytype = paytype.split(',')
             if len(paytype) > 0:
             if len(paytype) > 0:
@@ -113,9 +122,7 @@ class MealManage(View):
                     'bucket__bucket': bucketQs[0].bucket,
                     'bucket__bucket': bucketQs[0].bucket,
                     'bucket__storeDay': bucketQs[0].storeDay,
                     'bucket__storeDay': bucketQs[0].storeDay,
                     'id': id,
                     'id': id,
-                    'title': title,
                     'price': price,
                     'price': price,
-                    'content': content,
                     'currency': currency,
                     'currency': currency,
                     'day': day,
                     'day': day,
                     'add_time': str(store_meal.add_time),
                     'add_time': str(store_meal.add_time),
@@ -128,9 +135,9 @@ class MealManage(View):
         if page is None or line is None:
         if page is None or line is None:
             return response.json(444)
             return response.json(444)
 
 
-        qs = Store_Meal.objects.values("id", "title", "price", "content", "day", "add_time", "update_time", "currency"
+        qs = Store_Meal.objects.values("id", "price", "day", "add_time", "update_time", "currency"
                                        , "bucket_id", "commodity_type", "commodity_code", "virtual_price", "is_discounts"
                                        , "bucket_id", "commodity_type", "commodity_code", "virtual_price", "is_discounts"
-                                       , "discount_price", "discount_content", "expire", "symbol"
+                                       , "discount_price", "expire", "symbol"
                                        , "bucket__bucket", "bucket__area", "bucket__storeDay")
                                        , "bucket__bucket", "bucket__area", "bucket__storeDay")
         res = {}
         res = {}
         if qs.exists():
         if qs.exists():
@@ -150,10 +157,10 @@ class MealManage(View):
 
 
     def update(self, request_dict, userID, response):
     def update(self, request_dict, userID, response):
         id = request_dict.get('id', None)
         id = request_dict.get('id', None)
-        title = request_dict.get('title', None)
+        # title = request_dict.get('title', None)
         price = request_dict.get('price', None)
         price = request_dict.get('price', None)
         day = request_dict.get('day', None)
         day = request_dict.get('day', None)
-        content = request_dict.get('content', None)
+        # content = request_dict.get('content', None)
         currency = request_dict.get('currency', None)
         currency = request_dict.get('currency', None)
         bucketID = request_dict.get('bucketID', None)
         bucketID = request_dict.get('bucketID', None)
         commodity_type = request_dict.get('commodity_type', None)
         commodity_type = request_dict.get('commodity_type', None)
@@ -161,12 +168,13 @@ class MealManage(View):
         virtual_price = request_dict.get('virtual_price', None)
         virtual_price = request_dict.get('virtual_price', None)
         is_discounts = request_dict.get('is_discounts', None)
         is_discounts = request_dict.get('is_discounts', None)
         discount_price = request_dict.get('discount_price', None)
         discount_price = request_dict.get('discount_price', None)
-        discount_content = request_dict.get('discount_content', None)
         expire = request_dict.get('expire', None)
         expire = request_dict.get('expire', None)
         symbol = request_dict.get('symbol', None)
         symbol = request_dict.get('symbol', None)
         type = request_dict.get('type', None)
         type = request_dict.get('type', None)
-        if not id or not title or not price or not content or not day or not type:
-            return response.json(444, 'id, title, price, content, day,type')
+        # if not id or not title or not price or not content or not day or not type:
+        if not id or not price or not day or not type:
+            # return response.json(444, 'id, title, price, content, day,type')
+            return response.json(444, 'id, price, day,type')
         own_perm = ModelService.check_perm(userID=userID, permID=30)
         own_perm = ModelService.check_perm(userID=userID, permID=30)
         if own_perm is not True:
         if own_perm is not True:
             return response.json(404)
             return response.json(404)
@@ -174,15 +182,14 @@ class MealManage(View):
             store_meal = Store_Meal.objects.get(id=id)
             store_meal = Store_Meal.objects.get(id=id)
             now_time = timezone.localtime(timezone.now())
             now_time = timezone.localtime(timezone.now())
             print(now_time)
             print(now_time)
-            store_meal.title = title
+            # store_meal.title = title
             store_meal.price = price
             store_meal.price = price
-            store_meal.content = content
+            # store_meal.content = content
             store_meal.commodity_type = commodity_type
             store_meal.commodity_type = commodity_type
             store_meal.commodity_code = commodity_code
             store_meal.commodity_code = commodity_code
             store_meal.virtual_price = virtual_price
             store_meal.virtual_price = virtual_price
             store_meal.is_discounts = is_discounts
             store_meal.is_discounts = is_discounts
             store_meal.discount_price = discount_price
             store_meal.discount_price = discount_price
-            store_meal.discount_content = discount_content
             store_meal.expire = expire
             store_meal.expire = expire
             store_meal.symbol = symbol
             store_meal.symbol = symbol
             store_meal.day = day
             store_meal.day = day
@@ -238,6 +245,81 @@ class MealManage(View):
             return response.json(0, send_json)
             return response.json(0, send_json)
         return response.json(0)
         return response.json(0)
 
 
+    def query_language(self, request_dict, response):
+        # 查询套餐语言
+        page = int(request_dict.get('page', None))
+        line = int(request_dict.get('line', None))
+        if page is None or line is None:
+            return response.json(444)
+
+        # lang_qs = Lang.objects.values('id', 'lang', 'title', 'content', 'store_meal__id')
+        storeMeal_qs = Store_Meal.objects.filter(lang__isnull=False).values('id', 'lang__id', 'lang__lang', 'lang__title', 'lang__content', 'lang__discount_content')
+        count = storeMeal_qs.count()
+        lang_qs = storeMeal_qs[(page - 1) * line:page * line]
+        res = {
+            'datas': list(lang_qs),
+            'count': count
+        }
+        return response.json(0, res)
+
+    def add_language(self, request_dict, response):
+        # 添加套餐语言
+        store_meal_id = request_dict.get('store_meal_id', None)
+        # lang_id = request_dict.get('lang_id', None)
+        lang = request_dict.get('lang', None)
+        title = request_dict.get('title', None)
+        content = request_dict.get('content', None)
+        discount_content = request_dict.get('discount_content', None)
+        if not store_meal_id or not lang or not title or not content or not discount_content:
+            return response.json(444, 'store_meal_id,lang,title,content,discount_content')
+        # 查询该套餐是否存在
+        storeMeal_qs = Store_Meal.objects.get(id=store_meal_id)
+        if not storeMeal_qs:
+            return response.json(500)
+        lang_obj = Lang.objects.filter(lang=lang, title=title, content=content, discount_content=discount_content)
+        if not lang_obj.exists():
+            # 数据不存在,lang表创建数据
+            Lang.objects.create(lang=lang, title=title, content=content, discount_content=discount_content)
+            lang_obj = Lang.objects.filter(lang=lang, title=title, content=content, discount_content=discount_content)
+        storeMeal_qs.lang.add(*lang_obj)    # store_meal表添加语言数据
+        return response.json(0)
+
+    def edit_language(self, request_dict, response):
+        # 编辑套餐语言
+        store_meal_id = request_dict.get('store_meal_id', None)
+        lang_id = request_dict.get('lang_id', None)
+        lang = request_dict.get('lang', None)
+        title = request_dict.get('title', None)
+        content = request_dict.get('content', None)
+        discount_content = request_dict.get('discount_content', None)
+        if not store_meal_id or not lang_id or not lang or not title or not content or not discount_content:
+            return response.json(444, 'store_meal_id,lang_id,lang,title,content,discount_content')
+        storeMeal_qs = Store_Meal.objects.get(id=store_meal_id)
+        if not storeMeal_qs:
+            return response.json(500)
+        # 删除原有数据
+        lang_qs = Lang.objects.filter(id=lang_id)
+        storeMeal_qs.lang.remove(*lang_qs)
+        lang_obj = Lang.objects.filter(lang=lang, title=title, content=content, discount_content=discount_content)
+        if not lang_obj.exists():
+            # 数据不存在,lang表创建数据
+            Lang.objects.create(lang=lang, title=title, content=content, discount_content=discount_content)
+            lang_obj = Lang.objects.filter(lang=lang, title=title, content=content, discount_content=discount_content)
+        storeMeal_qs.lang.add(*lang_obj)    # store_meal表添加语言数据
+        return response.json(0)
+
+    def delete_language(self, request_dict, response):
+        # 删除套餐语言
+        store_meal_id = request_dict.get('store_meal_id', None)
+        lang_id = request_dict.get('lang_id', None)
+
+        storeMeal_qs = Store_Meal.objects.get(id=store_meal_id)
+        if not storeMeal_qs:
+            return response.json(500)
+        lang_qs = Lang.objects.filter(id=lang_id)
+        storeMeal_qs.lang.remove(*lang_qs)
+        return response.json(0)
+
 
 
 '''
 '''
 用户获取全部套餐信息
 用户获取全部套餐信息

+ 17 - 10
Controller/OrderContrller.py

@@ -14,6 +14,7 @@
 import time
 import time
 
 
 import paypalrestsdk
 import paypalrestsdk
+from django.db.models import F
 from django.utils.decorators import method_decorator
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
 from django.views.decorators.csrf import csrf_exempt
 from django.views.generic.base import View
 from django.views.generic.base import View
@@ -90,11 +91,12 @@ class OrderView(View):
         page = request_dict.get('page', None)
         page = request_dict.get('page', None)
         line = request_dict.get('line', None)
         line = request_dict.get('line', None)
         uid = request_dict.get('uid', None)
         uid = request_dict.get('uid', None)
+        lang = request_dict.get('lang', None)
         if not page or not line:
         if not page or not line:
             return response.json(444, 'page,line')
             return response.json(444, 'page,line')
         page = int(page)
         page = int(page)
         line = int(line)
         line = int(line)
-        omqs = Order_Model.objects.filter(userID_id=userID, status=1)
+        omqs = Order_Model.objects.filter(userID_id=userID, status=1, rank__lang__lang=lang)
         # 筛选指定设备id的订单
         # 筛选指定设备id的订单
         if uid:
         if uid:
             omqs.filter(UID=uid)
             omqs.filter(UID=uid)
@@ -102,6 +104,7 @@ class OrderView(View):
             return response.json(173)
             return response.json(173)
             # return response.json(10, '订单不存在')
             # return response.json(10, '订单不存在')
         count = omqs.count()
         count = omqs.count()
+        omqs = omqs.annotate(rank__title=F('rank__lang__title'), rank__content=F('rank__lang__content'))
         order_ql = omqs[(page - 1) * line:page * line].values("orderID", "UID", "channel", "desc", "price", "currency",
         order_ql = omqs[(page - 1) * line:page * line].values("orderID", "UID", "channel", "desc", "price", "currency",
                                                               "addTime",
                                                               "addTime",
                                                               "updTime", "paypal", "rank__day", "payType",
                                                               "updTime", "paypal", "rank__day", "payType",
@@ -139,6 +142,7 @@ class OrderView(View):
 
 
     def do_admin_query(self, request_dict, userID, response):
     def do_admin_query(self, request_dict, userID, response):
         own_perm = ModelService.check_perm(userID, 20)
         own_perm = ModelService.check_perm(userID, 20)
+        lang = request_dict.get('lang',None)
         if own_perm is True:
         if own_perm is True:
             page = request_dict.get('page', None)
             page = request_dict.get('page', None)
             line = request_dict.get('line', None)
             line = request_dict.get('line', None)
@@ -147,7 +151,7 @@ class OrderView(View):
             orderID = request_dict.get('orderID', None)
             orderID = request_dict.get('orderID', None)
             page = int(page)
             page = int(page)
             line = int(line)
             line = int(line)
-            omqs = Order_Model.objects.filter()
+            omqs = Order_Model.objects.filter(rank__lang__lang=lang)
             # 筛选指定设备id的订单
             # 筛选指定设备id的订单
             if uid:
             if uid:
                 omqs = omqs.filter(UID=uid)
                 omqs = omqs.filter(UID=uid)
@@ -158,6 +162,7 @@ class OrderView(View):
             if not omqs.exists():
             if not omqs.exists():
                 return response.json(0, [])
                 return response.json(0, [])
             count = omqs.count()
             count = omqs.count()
+            omqs = omqs.annotate(rank__title=F('rank__lang__title'), rank__content=F('rank__lang__content'))
             order_ql = omqs[(page - 1) * line:page * line].values("orderID", "UID", "channel", "desc", "price",
             order_ql = omqs[(page - 1) * line:page * line].values("orderID", "UID", "channel", "desc", "price",
                                                                   "currency", "addTime", "updTime", "paypal",
                                                                   "currency", "addTime", "updTime", "paypal",
                                                                   "payType",
                                                                   "payType",
@@ -175,16 +180,16 @@ class OrderView(View):
         status = request_dict.get('status', None)
         status = request_dict.get('status', None)
         page = request_dict.get('page', None)
         page = request_dict.get('page', None)
         line = request_dict.get('line', None)
         line = request_dict.get('line', None)
-
+        lang = request_dict.get('lang',None)
         if status and page and line:
         if status and page and line:
             order_qs = None
             order_qs = None
             status = int(status)
             status = int(status)
             if status == -1: # 获取所有订单
             if status == -1: # 获取所有订单
-                order_qs = Order_Model.objects.filter(userID__userID=userID)
+                order_qs = Order_Model.objects.filter(userID__userID=userID,rank__lang__lang=lang)
             elif status == 0: # 获取【代付款】订单
             elif status == 0: # 获取【代付款】订单
-                order_qs = Order_Model.objects.filter(userID__userID=userID, status=0)
+                order_qs = Order_Model.objects.filter(userID__userID=userID, status=0,rank__lang__lang=lang)
             elif status == 1:
             elif status == 1:
-                order_qs = Order_Model.objects.filter(userID__userID=userID, status=1)
+                order_qs = Order_Model.objects.filter(userID__userID=userID, status=1,rank__lang__lang=lang)
 
 
             if order_qs is None or not order_qs.exists():
             if order_qs is None or not order_qs.exists():
                 return response.json(0, {'data': [], 'count': 0})
                 return response.json(0, {'data': [], 'count': 0})
@@ -194,6 +199,7 @@ class OrderView(View):
             start = (page - 1) * line
             start = (page - 1) * line
             end = status + line
             end = status + line
             count = order_qs.count()
             count = order_qs.count()
+            order_qs = order_qs.annotate(rank__title=F('rank__lang__title'))
             order_qs = order_qs[start:end].values("orderID", "UID", "channel", "desc", "price",
             order_qs = order_qs[start:end].values("orderID", "UID", "channel", "desc", "price",
                                                   "currency", "addTime", "payType", "rank__day", "rank__price",
                                                   "currency", "addTime", "payType", "rank__day", "rank__price",
                                                   "status", 'channel', "rank__title", "currency")
                                                   "status", 'channel', "rank__title", "currency")
@@ -203,11 +209,12 @@ class OrderView(View):
 
 
     def do_query_order_detail(self, request_dict, userID, response):
     def do_query_order_detail(self, request_dict, userID, response):
         orderID = request_dict.get('orderID', None)
         orderID = request_dict.get('orderID', None)
-
+        lang = request_dict.get('lang', None)
         if orderID:
         if orderID:
-            order_qs = Order_Model.objects.filter(orderID=orderID, userID__userID=userID)
+            order_qs = Order_Model.objects.filter(orderID=orderID, userID__userID=userID, rank__lang__lang=lang)
             if order_qs.exists():
             if order_qs.exists():
                 print(order_qs)
                 print(order_qs)
+                order_qs = order_qs.annotate(rank__title=F('rank__lang__title'))
                 order = order_qs.values("orderID", "UID", "channel", "desc", "price",
                 order = order_qs.values("orderID", "UID", "channel", "desc", "price",
                                         "currency", "addTime", "endTime", "payType",
                                         "currency", "addTime", "endTime", "payType",
                                         "rank__day", "rank__price", "status", 'channel', "rank__title", "currency")[0]
                                         "rank__day", "rank__price", "status", 'channel', "rank__title", "currency")[0]
@@ -220,11 +227,11 @@ class OrderView(View):
 
 
     def do_cancel_order(self, request_dict, userID, response):
     def do_cancel_order(self, request_dict, userID, response):
         orderID = request_dict.get('orderID', None)
         orderID = request_dict.get('orderID', None)
-
+        lang = request_dict.get('lang', None)
         if orderID is None:
         if orderID is None:
             return response.json(444)
             return response.json(444)
 
 
-        order_qs = Order_Model.objects.filter(orderID=orderID)
+        order_qs = Order_Model.objects.filter(orderID=orderID,rank__lang__lang=lang)
         if not order_qs.exists():
         if not order_qs.exists():
             return response.json(800)
             return response.json(800)
 
 

+ 21 - 3
Model/models.py

@@ -416,17 +416,16 @@ class VodBucketModel(models.Model):
 
 
 class Store_Meal(models.Model):
 class Store_Meal(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增ID')
     id = models.AutoField(primary_key=True, verbose_name=u'自增ID')
-    title = models.CharField(blank=True, max_length=32, verbose_name=u'标题')
+    # title = models.CharField(blank=True, max_length=32, verbose_name=u'标题')
     currency = models.CharField(blank=True, default='$', max_length=32, verbose_name=u'货币符号')
     currency = models.CharField(blank=True, default='$', max_length=32, verbose_name=u'货币符号')
     symbol = models.CharField(blank=True, default='$', max_length=32, verbose_name=u'符号')
     symbol = models.CharField(blank=True, default='$', max_length=32, verbose_name=u'符号')
     price = models.CharField(blank=True, max_length=32, verbose_name=u'价格')
     price = models.CharField(blank=True, max_length=32, verbose_name=u'价格')
     virtual_price = models.CharField(blank=True, max_length=32, verbose_name=u'虚拟价格')
     virtual_price = models.CharField(blank=True, max_length=32, verbose_name=u'虚拟价格')
     is_discounts = models.SmallIntegerField(default=0, verbose_name=u'该套餐是否有优惠 [0=否,1是]')   # 0没有;1有
     is_discounts = models.SmallIntegerField(default=0, verbose_name=u'该套餐是否有优惠 [0=否,1是]')   # 0没有;1有
     discount_price = models.CharField(blank=True, max_length=32, verbose_name=u'第二年优惠价格')
     discount_price = models.CharField(blank=True, max_length=32, verbose_name=u'第二年优惠价格')
-    discount_content = models.CharField(blank=True, max_length=320, verbose_name=u'优惠信息描述')
     day = models.IntegerField(default=0, blank=True, verbose_name=u'云存录像保存天数(循环)')   # 7,30,180,360
     day = models.IntegerField(default=0, blank=True, verbose_name=u'云存录像保存天数(循环)')   # 7,30,180,360
     expire = models.IntegerField(default=0, blank=True, verbose_name=u'有效期') #单位月
     expire = models.IntegerField(default=0, blank=True, verbose_name=u'有效期') #单位月
-    content = models.TextField(blank=True, null=True, verbose_name=u'描述')
+    # content = models.TextField(blank=True, null=True, verbose_name=u'描述')
     add_time = models.DateTimeField(blank=True, null=True, verbose_name=u'加入时间', auto_now_add=True)
     add_time = models.DateTimeField(blank=True, null=True, verbose_name=u'加入时间', auto_now_add=True)
     # type = models.SmallIntegerField(default=0, verbose_name='付款类型')  # 0是paypal,1为支付宝
     # type = models.SmallIntegerField(default=0, verbose_name='付款类型')  # 0是paypal,1为支付宝
     pay_type = models.ManyToManyField(to='Pay_Type', verbose_name='付款类型', db_table='store_meal_pay')
     pay_type = models.ManyToManyField(to='Pay_Type', verbose_name='付款类型', db_table='store_meal_pay')
@@ -436,6 +435,7 @@ class Store_Meal(models.Model):
     commodity_type = models.SmallIntegerField(default=0, verbose_name='云存储套餐类型')  # 0:事件型 1:连续型
     commodity_type = models.SmallIntegerField(default=0, verbose_name='云存储套餐类型')  # 0:事件型 1:连续型
     commodity_code = models.CharField(default='', max_length=32, verbose_name='套餐规格码')
     commodity_code = models.CharField(default='', max_length=32, verbose_name='套餐规格码')
     # lang = models.CharField(default='', max_length=20, verbose_name='语言/国家')
     # lang = models.CharField(default='', max_length=20, verbose_name='语言/国家')
+    lang = models.ManyToManyField(to='Lang', verbose_name='套餐语言', db_table='store_meal_lang')
 
 
     def __str__(self):
     def __str__(self):
         return self.id
         return self.id
@@ -461,6 +461,24 @@ class Pay_Type(models.Model):
         ordering = ('id',)
         ordering = ('id',)
 
 
 
 
+# 套餐语言表
+class Lang(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='自增ID')
+    lang = models.CharField(default='', max_length=20, verbose_name='语言/国家')
+    title = models.CharField(blank=True, max_length=32, verbose_name='标题')
+    content = models.TextField(blank=True, null=True, verbose_name='描述')
+    discount_content = models.CharField(blank=True, max_length=320, verbose_name=u'优惠信息描述')
+
+    def __str__(self):
+        return self.id
+
+    class Meta:
+        db_table = 'lang'
+        verbose_name = '套餐语言'
+        verbose_name_plural = verbose_name
+        ordering = ('id',)
+
+
 class Equipment_Version(models.Model):
 class Equipment_Version(models.Model):
     eid = models.CharField(blank=True, max_length=32, primary_key=True)
     eid = models.CharField(blank=True, max_length=32, primary_key=True)
     ESN = models.CharField(blank=True, max_length=32, verbose_name=u'设备规格名称')
     ESN = models.CharField(blank=True, max_length=32, verbose_name=u'设备规格名称')

+ 20 - 0
Object/TokenObject.py

@@ -97,6 +97,26 @@ class TokenObject:
             self.code = 0
             self.code = 0
             return res
             return res
 
 
+    def encryption(self, data={}):
+        try:
+            access_expire = int(OAUTH_ACCESS_TOKEN_TIME.total_seconds())
+            refresh_expire = int(OAUTH_REFRESH_TOKEN_TIME.total_seconds())
+            now_stamp = int(time.time())
+            access_data = data
+            refresh_data = data
+            access_data['exp'] = access_expire + now_stamp
+            refresh_data['exp'] = refresh_expire + now_stamp
+            access_token = jwt.encode(access_data,
+                                      OAUTH_ACCESS_TOKEN_SECRET,
+                                      algorithm='HS256')
+            return access_token.decode('utf-8')
+        except Exception as e:
+            self.code = 309
+            print(repr(e))
+        else:
+            self.code = 0
+            return res
+
     def refresh(self):
     def refresh(self):
         if not self.token:
         if not self.token:
             self.code = 309
             self.code = 309