Эх сурвалжийг харах

Merge branch 'lang' into test

# Conflicts:
#	Model/models.py
lang 3 жил өмнө
parent
commit
2a8ca7b408

+ 9 - 9
Controller/CloudStorage.py

@@ -734,7 +734,7 @@ class CloudStorageView(View):
 
                     # 核销coupon
                     if order_list[0]['coupon_id']:
-                        CouponModel.objects.filter(id=order_list[0]['coupon_id']).update(use_status=2)
+                        CouponModel.objects.filter(id=order_list[0]['coupon_id']).update(use_status=2, update_time=nowTime)
 
                     order_qs.update(status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id, promotion_rule_id=promotion_rule_id)
                     datetime = time.strftime("%Y-%m-%d", time.localtime())
@@ -884,7 +884,7 @@ class CloudStorageView(View):
 
                 # 核销coupon
                 if order_list[0]['coupon_id']:
-                    CouponModel.objects.filter(id=order_list[0]['coupon_id']).update(use_status=2)
+                    CouponModel.objects.filter(id=order_list[0]['coupon_id']).update(use_status=2, update_time=nowTime)
 
                 order_qs.update(status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id, promotion_rule_id=promotion_rule_id)
                 datetime = time.strftime("%Y-%m-%d", time.localtime())
@@ -1014,7 +1014,7 @@ class CloudStorageView(View):
 
                     # 核销coupon
                     if order_list[0]['coupon_id']:
-                        CouponModel.objects.filter(id=order_list[0]['coupon_id']).update(use_status=2)
+                        CouponModel.objects.filter(id=order_list[0]['coupon_id']).update(use_status=2, update_time=nowTime)
 
                     order_qs.update(status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id, promotion_rule_id=promotion_rule_id)
                     datetime = time.strftime("%Y-%m-%d", time.localtime())
@@ -1103,16 +1103,16 @@ class CloudStorageView(View):
         orderID = CommonService.createOrderID()
         #优惠券
         if coupon_id:
-            couponObj = CouponModel.objects.filter(id=coupon_id, use_status=0, distributeTime__lte=nowTime,
+            couponObj = CouponModel.objects.filter(id=coupon_id, use_status=0, distribute_time__lte=nowTime,
                                                    valid_time__gt=nowTime)
-            couponQuery = couponObj.values("id", "type", "coupon_discount")
+            couponQuery = couponObj.values("id", "coupon_config__type", "coupon_config__coupon_discount")
             if not couponQuery.exists():
                 return response.json(10049)
             price = Decimal(price)
-            coupon_discount = Decimal(couponQuery[0]['coupon_discount'])
-            if couponQuery[0]['type'] == 1:  #打折
+            coupon_discount = Decimal(couponQuery[0]['coupon_config__coupon_discount'])
+            if couponQuery[0]['coupon_config__type'] == 1:  #打折
                 price = coupon_discount/10 * price
-            elif couponQuery[0]['type'] == 2:  #抵扣
+            elif couponQuery[0]['coupon_config__type'] == 2:  #抵扣
                 price = price - coupon_discount
         price = float(price)
         if price < 0 or price == 0 or price < 0.01:
@@ -1137,7 +1137,7 @@ class CloudStorageView(View):
                                            rank_id=rank, plan_id=subInfo['plan_id'],coupon_id=coupon_id,ai_rank_id=1)
                 # if coupon_id:
                 #     #冻结优惠券
-                #     CouponModel.objects.filter(id=coupon_id, use_status=0, distributeTime__lte=nowTime,
+                #     CouponModel.objects.filter(id=coupon_id, use_status=0, distribute_time__lte=nowTime,
                 #                                            valid_time__gt=nowTime).update(use_status=1)
 
                 return response.json(0, {"redirectUrl": subInfo['url'], "orderID": orderID})

+ 58 - 38
Controller/CouponController.py

@@ -6,7 +6,7 @@ import os
 import time
 import math
 from django.views.generic.base import View
-from Model.models import CouponModel,Device_User
+from Model.models import CouponModel, Device_User, CouponConfigModel, CouponLang
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from django.db.models import Q, F, Count
@@ -41,59 +41,79 @@ class CouponView(View):
             if tko.code != 0:
                 return response.json(tko.code)
             userID = tko.userID
-            if operation == 'UserCoupon':  #用户优惠券
+            if operation == 'UserCoupon':  # 用户优惠券
                 return self.query_user_coupon(request_dict, userID, response)
             else:
                 return response.json(414)
 
-    def generate_coupon(self,request_dict,response):
+    def generate_coupon(self, request_dict, response):
         username = request_dict.get('username', None)
         num = request_dict.get('num', None)
         userID = Device_User.objects.filter(username=username).values('userID')[0]['userID']
 
         try:
             data = []
-            for i in range(int(num)):
-                if i % 2 == 0:
-                    data.append(CouponModel(
-                        userID_id=userID,
-                        use_status=0,
-                        type=1,
-                        coupon_discount=7,
-                        distributeTime=int(time.time()),
-                        valid_time=int(time.time()) + 8640000,
-                        addTime=int(time.time())
-                    ))
-                else:
-                    data.append(CouponModel(
-                        userID_id=userID,
-                        use_status=0,
-                        type=2,
-                        coupon_discount=0.01,
-                        distributeTime=int(time.time()),
-                        valid_time=int(time.time()) + 8640000,
-                        addTime=int(time.time())
-                    ))
-            CouponModel.objects.bulk_create(data)
+            # CouponConfigModel.objects.create(type=1, use_range=1, coupon_discount=8)
+            # CouponLang.objects.create(
+            #     lang='en',
+            #     instruction='for the first month of the Auto-renewal plan',
+            #     quota='20.0%',
+            #     unit='off',
+            #     remark='This coupon can be used on each device once only.'
+            # )
+            # CouponConfigModel.objects.get(id=1).lang.add(1)
+            now_time = int(time.time())
+            CouponModel.objects.create(
+                use_status=0,
+                distribute_time=now_time,
+                valid_time=now_time,
+                userID=userID,
+                coupon_config_id=1,
+                update_time=now_time,
+                create_time=now_time
+            )
             return HttpResponse('success')
         except Exception as e:
-            return HttpResponse(repr(e))
+            return HttpResponse(
+                "错误行数:{errLine}, 错误信息: {errmsg}".format(errLine=e.__traceback__.tb_lineno, errmsg=repr(e)))
 
+    def query_user_coupon(self, request_dict, userID, response):  # 用户优惠券列表
+        now_time = int(time.time())
+        lang = request_dict.get('lang', 'en')
+        # couponObj = CouponModel.objects.filter(userID_id=userID, use_status=0, distributeTime__lte=now_time,
+        #                                        valid_time__gt=now_time).annotate(coupon_id=F('id')).values(
+        #     "coupon_id", "type", "coupon_discount", "valid_time")
 
+        coupon_obj = CouponModel.objects.filter(
+            userID=userID,
+            use_status=0,
+            distribute_time__lte=now_time,
+            valid_time__gt=now_time,
+            coupon_config__lang__lang=lang,
+        ).annotate(
+            coupon_id=F('id'),
+            type=F('coupon_config__type'),
+            coupon_discount=F('coupon_config__coupon_discount'),
+            instruction=F('coupon_config__lang__instruction'),
+            remark=F('coupon_config__lang__remark'),
+            quota=F('coupon_config__lang__quota'),
+            unit=F('coupon_config__lang__unit'),
+        ).values(
+            "coupon_id",
+            "type",
+            "coupon_discount",
+            "valid_time",
+            "instruction",
+            "remark",
+            "quota",
+            "unit",
+        )
 
+        for couponList in coupon_obj:
+            couponList['valid_time'] = CommonService.timestamp_to_str(couponList['valid_time'])
 
-
-
-
-    def query_user_coupon(self, request_dict, userID, response):  #用户优惠券列表
-        nowTime = int(time.time())
-        couponObj = CouponModel.objects.filter(userID_id=userID,use_status=0,distributeTime__lte=nowTime,
-                                               valid_time__gt=nowTime).annotate(coupon_id=F('id')).values(
-                                               "coupon_id","type","coupon_discount","valid_time")
-        for couponList in couponObj:
-            couponList['valid_time'] =  CommonService.timestamp_to_str(couponList['valid_time'])
         result = {
-            'count':couponObj.count(),
-            'couponList':list(couponObj),
+            'count': coupon_obj.count(),
+            'couponList': list(coupon_obj),
         }
         return response.json(0, result)

+ 1 - 1
Controller/PaymentCycle.py

@@ -269,7 +269,7 @@ class PaypalCycleNotify(View):
 
                 # 核销coupon
                 if order_list[0]['coupon_id']:
-                    CouponModel.objects.filter(id=order_list[0]['coupon_id']).update(use_status=2)
+                    CouponModel.objects.filter(id=order_list[0]['coupon_id']).update(use_status=2, update_time=nowTime)
 
                 order_qs.update(status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id,
                                 promotion_rule_id=promotion_rule_id, agreement_id=agreement_id)

+ 42 - 6
Model/models.py

@@ -916,16 +916,52 @@ class Order_Model(models.Model):
         ordering = ('-orderID',)
 
 
-class CouponModel(models.Model):
+# 优惠券文案语言表
+class CouponLang(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='自增ID')
+    lang = models.CharField(default='', max_length=20, db_index=True, verbose_name='语言/国家')
+    instruction = models.CharField(blank=True, default='', max_length=200, verbose_name=u'用法')
+    quota = models.CharField(blank=True, default='', max_length=200, verbose_name=u'优惠额度, 例如20.0%')
+    unit = models.CharField(blank=True, default='', max_length=200, verbose_name=u'优惠单位, 例如off, 折')
+    remark = models.CharField(blank=True, default='', max_length=200, verbose_name=u'备注')
+
+    def __str__(self):
+        return self.id
+
+    class Meta:
+        db_table = 'coupon_lang'
+        verbose_name = '套餐语言'
+        verbose_name_plural = verbose_name
+        ordering = ('id',)
+
+
+class CouponConfigModel(models.Model):
     id = models.AutoField(primary_key=True, verbose_name='主键')
-    userID_id = models.CharField(default='', db_index=True, blank=True, max_length=32, verbose_name=u'用户ID')
-    use_status = models.SmallIntegerField(default=0, verbose_name='使用状态')  # 0未使用;1冻结;2已使用
     type = models.SmallIntegerField(default=0, verbose_name='优惠类型')  # 1打折; 2抵扣
+    use_range = models.CharField(default=0, max_length=100, verbose_name='使用限制')  # 0:所有服务都可使用; 1:云存;2:ai;多种1,2,3
     coupon_discount = models.CharField(blank=True, max_length=32, verbose_name=u'折扣力度')
-    distributeTime = models.IntegerField(verbose_name='发放到用户账户时间', default=0)
+    lang = models.ManyToManyField(to='CouponLang', verbose_name='套餐语言', db_table='coupon_lang_associated')
+
+    def __str__(self):
+        return self.id
+
+    class Meta:
+        db_table = 'coupon_config'
+        verbose_name = u'优惠券配置表'
+        verbose_name_plural = verbose_name
+
+
+class CouponModel(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='主键')
+    use_status = models.SmallIntegerField(default=0, verbose_name='使用状态')  # 0未使用;1冻结;2已使用
+    distribute_time = models.IntegerField(verbose_name='发放到用户账户时间', default=0)
     valid_time = models.PositiveIntegerField(default=9999999999, verbose_name='有效期间')  # 超过有效期不可在使用;0永久
-    # use_limit = models.CharField(default=0, max_length=100, verbose_name='使用限制')  #0:所有服务都可使用; 1:云存;2:ai;
-    addTime = models.IntegerField(verbose_name='添加时间', default=0)
+    # userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)  # 关联用户
+    userID = models.CharField(blank=True, max_length=32, db_index=True, verbose_name=u'用户ID', unique=True)
+    coupon_config = models.ForeignKey(CouponConfigModel, null=True, blank=True, to_field='id', on_delete=models.CASCADE,
+                                      verbose_name='关联优惠券配置表的id')
+    update_time = models.IntegerField(verbose_name='更新时间', default=0)
+    create_time = models.IntegerField(verbose_name='添加时间', default=0)
 
     def __str__(self):
         return self.id