update

FFIB vor 6 Stunden
Ursprung
Commit
444dfda41a
4 geänderte Dateien mit 55 neuen Zeilen und 9 gelöschten Zeilen
  1. 22 6
      api/sale/lottery_views.py
  2. 1 1
      sales/admin.py
  3. 28 0
      sales/migrations/0013_auto_20261027_1541.py
  4. 4 2
      sales/models.py

+ 22 - 6
api/sale/lottery_views.py

@@ -28,15 +28,18 @@ def join_lottery(user, serial_no, model_id='', campaign_id='', submit_pk='', pho
28 28
 
29 29
     # 嵌套 atomic 生成 savepoint:并发插入冲突后还能继续查询
30 30
     with transaction.atomic():
31
-        entry, created = LotteryEntryInfo.objects.get_or_create(
31
+        entry, created = LotteryEntryInfo.objects.update_or_create(
32 32
             campaign_id=campaign.campaign_id,
33 33
             serial_no=serial_no,
34 34
             submit_pk=submit_pk,
35 35
             title=campaign.title,
36
-            phone=phone,
37 36
             user_id=user.user_id,
38 37
             model_id=model_id,
39 38
             model_name=model_name,
39
+            defaults={
40
+                'name': name,
41
+                'phone': phone,
42
+            }
40 43
         )
41 44
 
42 45
     return entry, campaign
@@ -47,10 +50,11 @@ def join_lottery(user, serial_no, model_id='', campaign_id='', submit_pk='', pho
47 50
 def lottery_join_api(request):
48 51
     """抽奖参与接口:写入名额"""
49 52
     user_id = request.POST.get('user_id', '')
50
-    serial_no = request.POST.get('serial_no')
53
+    serial_no = request.POST.get('serial_no', '')
51 54
     model_id = request.POST.get('model_id')
52 55
     campaign_id = request.POST.get('campaign_id', '')
53 56
     submit_pk = request.POST.get('submit_pk', '')
57
+    name = request.POST.get('name', '')
54 58
     phone = request.POST.get('phone', '')
55 59
     model_name = request.POST.get('model_name', '')
56 60
 
@@ -59,11 +63,23 @@ def lottery_join_api(request):
59 63
     except UserInfo.DoesNotExist:
60 64
         return response(UserStatusCode.USER_NOT_FOUND)
61 65
 
62
-    # TODO 安全:应校验该序列号确实绑定在当前用户名下,防止传入他人序列号刷名额
63
-
64
-    entry, campaign = join_lottery(user, serial_no, model_id, campaign_id, submit_pk, phone, model_name)
66
+    campaign = LotteryCampaignInfo.objects.get(status=True, campaign_id=campaign_id)
65 67
 
66 68
     if not campaign:
67 69
         return response(LotteryStatusCode.CAMPAIGN_NOT_FOUND)
68 70
 
71
+    LotteryEntryInfo.objects.update_or_create(
72
+        campaign_id=campaign.campaign_id,
73
+        serial_no=serial_no,
74
+        submit_pk=submit_pk,
75
+        user_id=user.user_id,
76
+        model_id=model_id,
77
+        defaults={
78
+            'campaign_title': campaign.title,
79
+            'name': name,
80
+            'phone': phone,
81
+            'model_name': model_name,
82
+        }
83
+    )        
84
+
69 85
     return response(200, 'join lottery campaign success', '参与抽奖成功') 

+ 1 - 1
sales/admin.py

@@ -19,7 +19,7 @@ class SuperSalesResponsibilityInfoModelsSaleStatisticInfoAdmin(admin.ModelAdmin)
19 19
     list_display = ('brand_id', 'sr_id', 'sr_name', 'ymd', 'today_num', 'yesterday_num', 'current_month', 'last_month', 'position', 'status', 'created_at', 'updated_at')
20 20
 
21 21
 class LotteryEntryInfoAdmin(admin.ModelAdmin):
22
-    list_display = ('entry_id', 'campaign_id', 'user_id', 'title', 'phone', 'created_at', 'updated_at')
22
+    list_display = ('entry_id', 'campaign_id', 'user_id', 'campaign_title', 'phone', 'created_at', 'updated_at')
23 23
 
24 24
 class LotteryCampaignInfoAdmin(admin.ModelAdmin):
25 25
     list_display = ('campaign_id', 'title', 'start_at', 'end_at', 'draw_at', 'created_at', 'updated_at')

+ 28 - 0
sales/migrations/0013_auto_20261027_1541.py

@@ -0,0 +1,28 @@
1
+# -*- coding: utf-8 -*-
2
+# Generated by Django 3.2.16 on 2026-10-27 07:41
3
+
4
+from django.db import migrations, models
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('sales', '0012_alter_lotteryentryinfo_model_name'),
11
+    ]
12
+
13
+    operations = [
14
+        migrations.RemoveField(
15
+            model_name='lotteryentryinfo',
16
+            name='title',
17
+        ),
18
+        migrations.AddField(
19
+            model_name='lotteryentryinfo',
20
+            name='campaign_title',
21
+            field=models.CharField(blank=True, db_index=True, help_text='活动标题', max_length=255, null=True, verbose_name='campaign_title'),
22
+        ),
23
+        migrations.AddField(
24
+            model_name='lotteryentryinfo',
25
+            name='name',
26
+            field=models.CharField(blank=True, db_index=True, help_text='用户姓名', max_length=255, null=True, verbose_name='name'),
27
+        ),
28
+    ]

+ 4 - 2
sales/models.py

@@ -212,9 +212,11 @@ class LotteryEntryInfo(BaseModelMixin):
212 212
                                    help_text=u'所属活动唯一标识', db_index=True)
213 213
     user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True,
214 214
                                help_text=u'用户唯一标识', db_index=True)
215
-    title = models.CharField(_(u'title'), max_length=255, blank=True, null=True,
216
-                               help_text=u'用户姓名', db_index=True)
215
+    campaign_title = models.CharField(_(u'campaign_title'), max_length=255, blank=True, null=True,
216
+                               help_text=u'活动标题', db_index=True)
217 217
     
218
+    name = models.CharField(_(u'name'), max_length=255, blank=True, null=True,
219
+                               help_text=u'用户姓名', db_index=True)
218 220
     phone = models.CharField(_(u'phone'), max_length=11, blank=True, null=True, help_text=u'用户手机', db_index=True)
219 221
 
220 222