增加会员活动数据提交

FFIB 1 year ago
parent
commit
b8c998fdd3
4 changed files with 134 additions and 2 deletions
  1. 39 1
      member/activity_mp_views.py
  2. 44 0
      member/migrations/0068_auto_20240306_1410.py
  3. 44 1
      member/models.py
  4. 7 0
      member/mp_urls.py

+ 39 - 1
member/activity_mp_views.py

@@ -8,7 +8,7 @@ from django_response import response
8 8
 from paginator import pagination
9 9
 
10 10
 from account.models import UserInfo
11
-from member.models import MemberActivityContributionInfo, MemberActivityInfo, MemberActivitySignupInfo
11
+from member.models import MemberActivityContributionInfo, MemberActivityInfo, MemberActivitySignupInfo, MemberActivityDataInfo
12 12
 from utils.error.errno_utils import MemberActivityContributionStatusCode, MemberActivityStatusCode, UserStatusCode
13 13
 
14 14
 
@@ -129,6 +129,44 @@ def activity_signup_detail(request):
129 129
 
130 130
 
131 131
 @logit
132
+def activity_data_submit(request):
133
+    user_id = request.POST.get('user_id', '')
134
+    lensman_id = request.POST.get('lensman_id', '')
135
+    activity_id = request.POST.get('activity_id', '')
136
+    data_fields = request.POST.get('data_fields', '[]')
137
+
138
+    try:
139
+        act = MemberActivityInfo.objects.get(activity_id=activity_id, status=True)
140
+    except MemberActivityInfo.DoesNotExist:
141
+        return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND)
142
+
143
+    MemberActivityDataInfo.objects.update_or_create(user_id=user_id, activity_id=activity_id, defaults={
144
+        'title': act.title,
145
+        'lensman_id': lensman_id,
146
+        'data_fields': data_fields,
147
+    })
148
+
149
+    return response(data={
150
+        'activity': act.data(user_id),
151
+    })
152
+
153
+
154
+@logit
155
+def activity_data_detail(request):
156
+    user_id = request.POST.get('user_id', '')
157
+    activity_id = request.POST.get('activity_id', '')
158
+
159
+    try:
160
+        data_info = MemberActivityDataInfo.objects.get(user_id=user_id, activity_id=activity_id, status=True)
161
+    except MemberActivityDataInfo.DoesNotExist:
162
+        return response()
163
+
164
+    return response(data={
165
+        'data_info': data_info.data,
166
+    })
167
+
168
+
169
+@logit
132 170
 def activity_contribute_create(request):
133 171
     brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
134 172
     user_id = request.POST.get('user_id', '')

+ 44 - 0
member/migrations/0068_auto_20240306_1410.py

@@ -0,0 +1,44 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+# Generated by Django 3.2.16 on 2024-03-06 06:10
4
+
5
+from django.db import migrations, models
6
+import jsonfield.fields
7
+import shortuuidfield.fields
8
+
9
+
10
+class Migration(migrations.Migration):
11
+
12
+    dependencies = [
13
+        ('member', '0067_memberactivitysignupinfo_passed'),
14
+    ]
15
+
16
+    operations = [
17
+        migrations.AlterField(
18
+            model_name='memberactivitysignupinfo',
19
+            name='lensman_id',
20
+            field=models.CharField(blank=True, db_index=True, help_text='摄影师唯一标识', max_length=32, null=True, verbose_name='user_id'),
21
+        ),
22
+        migrations.CreateModel(
23
+            name='MemberActivityDataInfo',
24
+            fields=[
25
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
26
+                ('status', models.BooleanField(default=True, help_text='Status', verbose_name='status')),
27
+                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')),
28
+                ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')),
29
+                ('brand_id', models.CharField(blank=True, db_index=True, help_text='品牌唯一标识', max_length=32, null=True, verbose_name='brand_id')),
30
+                ('brand_name', models.CharField(blank=True, help_text='品牌名称', max_length=255, null=True, verbose_name='brand_name')),
31
+                ('data_id', shortuuidfield.fields.ShortUUIDField(blank=True, db_index=True, editable=False, help_text='活动数据唯一标识', max_length=22, null=True, unique=True)),
32
+                ('user_id', models.CharField(blank=True, db_index=True, help_text='用户唯一标识', max_length=32, null=True, verbose_name='user_id')),
33
+                ('activity_id', models.CharField(blank=True, db_index=True, help_text='活动唯一标识', max_length=32, null=True, verbose_name='activity_id')),
34
+                ('title', models.CharField(blank=True, help_text='活动名称', max_length=255, null=True, verbose_name='title')),
35
+                ('lensman_id', models.CharField(blank=True, db_index=True, help_text='摄影师唯一标识', max_length=32, null=True, verbose_name='user_id')),
36
+                ('data_fields', jsonfield.fields.JSONField(blank=True, default='[]', help_text='自定义数据表单字段', null=True, verbose_name='data_fields')),
37
+            ],
38
+            options={
39
+                'verbose_name': '会员活动数据信息',
40
+                'verbose_name_plural': '会员活动数据信息',
41
+                'unique_together': {('user_id', 'activity_id')},
42
+            },
43
+        ),
44
+    ]

+ 44 - 1
member/models.py

@@ -730,7 +730,7 @@ class MemberActivitySignupInfo(BaseModelMixin, BrandInfoMixin):
730 730
     activity_id = models.CharField(_(u'activity_id'), max_length=32, blank=True, null=True, help_text=u'活动唯一标识', db_index=True)
731 731
 
732 732
     title = models.CharField(_(u'title'), max_length=255, blank=True, null=True, help_text=u'活动名称')
733
-    lensman_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)
733
+    lensman_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'摄影师唯一标识', db_index=True)
734 734
 
735 735
     avatar = models.CharField(_(u'avatar'), max_length=255, blank=True, null=True, help_text=u'头像')
736 736
     name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'姓名')
@@ -785,6 +785,49 @@ class MemberActivitySignupInfo(BaseModelMixin, BrandInfoMixin):
785 785
             'is_signin': self.is_signin,
786 786
             'passed': self.passed,
787 787
         }
788
+    
789
+class MemberActivityDataInfo(BaseModelMixin, BrandInfoMixin):
790
+    data_id = ShortUUIDField(_(u'data_id'), max_length=32, blank=True, null=True, help_text=u'活动数据唯一标识', db_index=True, unique=True)
791
+
792
+    user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)
793
+
794
+    activity_id = models.CharField(_(u'activity_id'), max_length=32, blank=True, null=True, help_text=u'活动唯一标识', db_index=True)
795
+
796
+    title = models.CharField(_(u'title'), max_length=255, blank=True, null=True, help_text=u'活动名称')
797
+    lensman_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'摄影师唯一标识', db_index=True)
798
+
799
+    data_fields = JSONField(_(u'data_fields'), blank=True, null=True, default='[]', help_text=u'自定义数据表单字段')
800
+
801
+    class Meta:
802
+        verbose_name = _(u'会员活动数据信息')
803
+        verbose_name_plural = _(u'会员活动数据信息')
804
+
805
+        unique_together = (
806
+            ('user_id', 'activity_id'),
807
+        )
808
+
809
+    def __unicode__(self):
810
+        return '%d' % self.pk
811
+
812
+    @property
813
+    def data(self):
814
+        return {
815
+            'signup_id': self.data_id,
816
+            'lensman_id': self.lensman_id,
817
+            'title': self.title,
818
+            'data_fields': json.loads(self.data_fields) if self.data_fields else [],
819
+        }
820
+
821
+    @property
822
+    def admindata(self):
823
+        return {
824
+            'signup_id': self.data_id,
825
+            'user_id': self.user_id,
826
+            'lensman_id': self.lensman_id,
827
+            'activity_id': self.activity_id,
828
+            'title': self.title,
829
+            'data_fields': json.loads(self.data_fields) if self.data_fields else [],
830
+        }
788 831
 
789 832
 
790 833
 class MemberActivitySigninInfo(BaseModelMixin, BrandInfoMixin):

+ 7 - 0
member/mp_urls.py

@@ -20,6 +20,13 @@ urlpatterns += [
20 20
     url(r'^member/activity/signin$', activity_mp_views.activity_signin, name='mp_member_activity_signin'),  # 会员活动签到
21 21
 ]
22 22
 
23
+# activity data
24
+urlpatterns += [
25
+    url(r'^member/activity/data/submit$', activity_mp_views.activity_data_submit, name='mp_member_activity_data_submit'),  # 会员活动数据提交
26
+    url(r'^member/activity/data/detail$', activity_mp_views.activity_data_detail, name='mp_member_activity_data_detail'),  # 获取会员活动报名信息
27
+]
28
+
29
+
23 30
 # activity contribution
24 31
 urlpatterns += [
25 32
     url(r'^member/activity/contribute/create$', activity_mp_views.activity_contribute_create, name='mp_member_activity_contribute_create'),