:art: Support GOOD_EXCHANGE_ONLY_ONCE

huangqimin001 4 lat temu
rodzic
commit
3a0e43ca50
4 zmienionych plików z 36 dodań i 13 usunięć
  1. 14 13
      api/member_views.py
  2. 20 0
      member/migrations/0029_goodsinfo_only_once.py
  3. 1 0
      member/models.py
  4. 1 0
      utils/error/errno_utils.py

+ 14 - 13
api/member_views.py

@@ -206,25 +206,26 @@ def good_exchange(request):
206 206
         if user.integral < good.integral:
207 207
             return response(MemberGoodStatusCode.GOOD_INTEGRAL_NOT_ENOUGH)
208 208
 
209
+        # 校验重复兑换
210
+        if good.only_once and GoodsOrderInfo.objects.filter(user_id=user_id, good_id=good_id, status=True).exists():
211
+            return response(MemberGoodStatusCode.GOOD_EXCHANGE_ONLY_ONCE)
212
+
209 213
         user.integral -= good.integral
210 214
         user.save()
211 215
 
212 216
         good.left_num -= 1
213 217
         good.save()
214 218
 
215
-        # 校验重复兑换
216
-        is_exists = GoodsOrderInfo.objects.filter(user_id=user_id, good_id=good_id, status=True).exists()
217
-        if not is_exists:
218
-            GoodsOrderInfo.objects.create(
219
-                user_id=user_id,
220
-                good_id=good_id,
221
-                good_type=good.good_type,
222
-                title=good.title,
223
-                name=name,
224
-                phone=phone,
225
-                address=address,
226
-                integral=good.integral,
227
-            )
219
+        GoodsOrderInfo.objects.create(
220
+            user_id=user_id,
221
+            good_id=good_id,
222
+            good_type=good.good_type,
223
+            title=good.title,
224
+            name=name,
225
+            phone=phone,
226
+            address=address,
227
+            integral=good.integral,
228
+        )
228 229
 
229 230
         if good.good_type == GoodsInfo.PHYSICAL:
230 231
             # TODO: 通知客服发快递

+ 20 - 0
member/migrations/0029_goodsinfo_only_once.py

@@ -0,0 +1,20 @@
1
+# -*- coding: utf-8 -*-
2
+# Generated by Django 1.11.29 on 2021-04-25 07:01
3
+from __future__ import unicode_literals
4
+
5
+from django.db import migrations, models
6
+
7
+
8
+class Migration(migrations.Migration):
9
+
10
+    dependencies = [
11
+        ('member', '0028_auto_20210115_1108'),
12
+    ]
13
+
14
+    operations = [
15
+        migrations.AddField(
16
+            model_name='goodsinfo',
17
+            name='only_once',
18
+            field=models.BooleanField(default=False, help_text='\u4ec5\u652f\u6301\u5151\u6362\u4e00\u6b21', verbose_name='only_once'),
19
+        ),
20
+    ]

+ 1 - 0
member/models.py

@@ -47,6 +47,7 @@ class GoodsInfo(BaseModelMixin):
47 47
     minlevel = models.IntegerField(_(u'minlevel'), default=0, help_text=u'兑换最低会员级别', db_index=True)
48 48
 
49 49
     only_for_member = models.BooleanField(_(u'only_for_member'), default=False, help_text=u'会员专属')
50
+    only_once = models.BooleanField(_(u'only_once'), default=False, help_text=u'仅支持兑换一次')
50 51
 
51 52
     position = models.IntegerField(_(u'position'), default=1, help_text=u'排序', db_index=True)
52 53
 

+ 1 - 0
utils/error/errno_utils.py

@@ -81,6 +81,7 @@ class MemberGoodStatusCode(BaseStatusCode):
81 81
     GOOD_NO_EXCHANGE_PERMISSION = StatusCodeField(503502, 'Good No Exchange Permission', description=u'商品无兑换权限')
82 82
     GOOD_INTEGRAL_NOT_ENOUGH = StatusCodeField(503503, 'Good Integral Not Enough', description=u'商品兑换积分不足')
83 83
     GOOD_STOCK_NOT_ENOUGH = StatusCodeField(503504, 'Good Integral Not Enough', description=u'商品库存不足')
84
+    GOOD_EXCHANGE_ONLY_ONCE = StatusCodeField(503505, 'Good Exchange Only Once', description=u'商品仅可兑换一次')
84 85
 
85 86
 
86 87
 class MemberRightStatusCode(BaseStatusCode):