@@ -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', '')
|
@@ -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 |
+ ] |
@@ -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): |
@@ -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'), |