:art: Support activity_contribute

huangqimin001 2 gadi atpakaļ
vecāks
revīzija
deb2b19881
5 mainītis faili ar 118 papildinājumiem un 17 dzēšanām
  1. 33 2
      api/member_views.py
  2. 2 0
      api/urls.py
  3. 9 2
      member/admin.py
  4. 38 0
      member/migrations/0035_memberactivitycontributioninfo.py
  5. 36 13
      member/models.py

+ 33 - 2
api/member_views.py

@@ -15,8 +15,8 @@ from TimeConvert import TimeConvert as tc
15 15
 
16 16
 from account.models import UserInfo
17 17
 from coupon.models import UserCouponInfo
18
-from member.models import (GoodsInfo, GoodsOrderInfo, MemberActivityGroupShareInfo, MemberActivityInfo,
19
-                           MemberActivitySigninInfo, MemberActivitySignupInfo, RightInfo)
18
+from member.models import (GoodsInfo, GoodsOrderInfo, MemberActivityContributionInfo, MemberActivityGroupShareInfo,
19
+                           MemberActivityInfo, MemberActivitySigninInfo, MemberActivitySignupInfo, RightInfo)
20 20
 from utils.error.errno_utils import (MemberActivityStatusCode, MemberCouponStatusCode, MemberGoodStatusCode,
21 21
                                      MemberRightStatusCode, UserStatusCode)
22 22
 from utils.redis.connect import r
@@ -508,3 +508,34 @@ def activity_group_share(request):
508 508
         return response(400002, 'Activity has been offline', '会员活动已下线')
509 509
 
510 510
     return response()
511
+
512
+
513
+@logit
514
+def activity_contribute(request):
515
+    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
516
+    user_id = request.POST.get('user_id', '')
517
+    activity_id = request.POST.get('activity_id')
518
+    content_type = get_query_value(request, 'content_type', val_cast_type='int')
519
+    title = request.POST.get('title', '')
520
+    content = request.POST.get('content', '')
521
+    images = get_query_value(request, 'images', val_cast_type='listjson')
522
+
523
+    # 校验用户是否存在
524
+    try:
525
+        UserInfo.objects.get(user_id=user_id)
526
+    except UserInfo.DoesNotExist:
527
+        return response(UserStatusCode.USER_NOT_FOUND)
528
+
529
+    contribution = MemberActivityContributionInfo.objects.create(
530
+        brand_id=brand_id,
531
+        user_id=user_id,
532
+        activity_id=activity_id,
533
+        content_type=content_type,
534
+        title=title,
535
+        content=content,
536
+        images=images,
537
+    )
538
+
539
+    return response(data={
540
+        'contribution': contribution.data,
541
+    })

+ 2 - 0
api/urls.py

@@ -228,6 +228,8 @@ urlpatterns += [
228 228
 
229 229
     url(r'^member/activity/group_share$', member_views.activity_group_share, name='member_activity_group_share'),
230 230
 
231
+    url(r'^member/activity/contribute$', member_views.activity_contribute, name='member_activity_contribute'),
232
+
231 233
     url(r'^rights$', member_views.rights, name='rights'),
232 234
     url(r'^right/detail$', member_views.right_detail, name='right_detail'),
233 235
     url(r'^goods$', member_views.goods, name='goods'),

+ 9 - 2
member/admin.py

@@ -5,8 +5,9 @@ from django.contrib import admin
5 5
 from django_admin import DeleteModelAdmin
6 6
 
7 7
 from account.models import UserInfo
8
-from member.models import (GoodsInfo, GoodsOrderInfo, MemberActivityGroupShareInfo, MemberActivityInfo,
9
-                           MemberActivitySigninInfo, MemberActivitySignupInfo, RightInfo, ShotTypeInfo)
8
+from member.models import (GoodsInfo, GoodsOrderInfo, MemberActivityContributionInfo, MemberActivityGroupShareInfo,
9
+                           MemberActivityInfo, MemberActivitySigninInfo, MemberActivitySignupInfo, RightInfo,
10
+                           ShotTypeInfo)
10 11
 from pre.custom_message import sendwxasubscribemessage
11 12
 from utils.redis.rshot import update_member_shot_data
12 13
 
@@ -97,6 +98,11 @@ class MemberActivityGroupShareInfoAdmin(admin.ModelAdmin):
97 98
     list_filter = ('is_integral', 'status')
98 99
 
99 100
 
101
+class MemberActivityContributionInfoAdmin(admin.ModelAdmin):
102
+    list_display = ('contribution_id', 'activity_id', 'content_type', 'title', 'content', 'images', 'status', 'created_at', 'updated_at')
103
+    list_filter = ('activity_id', 'content_type', 'status')
104
+
105
+
100 106
 admin.site.register(GoodsInfo, GoodsInfoAdmin)
101 107
 admin.site.register(GoodsOrderInfo, GoodsOrderInfoAdmin)
102 108
 admin.site.register(RightInfo, RightInfoAdmin)
@@ -105,3 +111,4 @@ admin.site.register(MemberActivityInfo, MemberActivityInfoAdmin)
105 111
 admin.site.register(MemberActivitySignupInfo, MemberActivitySignupInfoAdmin)
106 112
 admin.site.register(MemberActivitySigninInfo, MemberActivitySigninInfoAdmin)
107 113
 admin.site.register(MemberActivityGroupShareInfo, MemberActivityGroupShareInfoAdmin)
114
+admin.site.register(MemberActivityContributionInfo, MemberActivityContributionInfoAdmin)

+ 38 - 0
member/migrations/0035_memberactivitycontributioninfo.py

@@ -0,0 +1,38 @@
1
+# -*- coding: utf-8 -*-
2
+# Generated by Django 3.2.16 on 2022-10-23 06:42
3
+
4
+from django.db import migrations, models
5
+import jsonfield.fields
6
+import shortuuidfield.fields
7
+
8
+
9
+class Migration(migrations.Migration):
10
+
11
+    dependencies = [
12
+        ('member', '0034_memberactivityinfo_limit_image_num'),
13
+    ]
14
+
15
+    operations = [
16
+        migrations.CreateModel(
17
+            name='MemberActivityContributionInfo',
18
+            fields=[
19
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
20
+                ('status', models.BooleanField(default=True, help_text='Status', verbose_name='status')),
21
+                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')),
22
+                ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')),
23
+                ('brand_id', models.CharField(blank=True, db_index=True, help_text='品牌唯一标识', max_length=32, null=True, verbose_name='brand_id')),
24
+                ('brand_name', models.CharField(blank=True, help_text='品牌名称', max_length=255, null=True, verbose_name='brand_name')),
25
+                ('contribution_id', shortuuidfield.fields.ShortUUIDField(blank=True, db_index=True, editable=False, help_text='投稿唯一标识', max_length=22, null=True, unique=True)),
26
+                ('user_id', models.CharField(blank=True, db_index=True, help_text='用户唯一标识', max_length=32, null=True, verbose_name='user_id')),
27
+                ('activity_id', models.CharField(blank=True, db_index=True, help_text='活动唯一标识', max_length=32, null=True, verbose_name='activity_id')),
28
+                ('content_type', models.IntegerField(choices=[(0, '投稿'), (1, '入围'), (2, '创作日记')], db_index=True, default=0, help_text='内容类型', verbose_name='content_type')),
29
+                ('title', models.CharField(blank=True, help_text='标题', max_length=255, null=True, verbose_name='title')),
30
+                ('content', models.TextField(blank=True, help_text='内容', null=True, verbose_name='content')),
31
+                ('images', jsonfield.fields.JSONField(default=[], help_text='图片列表', verbose_name='images')),
32
+            ],
33
+            options={
34
+                'verbose_name': '会员活动投稿信息',
35
+                'verbose_name_plural': '会员活动投稿信息',
36
+            },
37
+        ),
38
+    ]

+ 36 - 13
member/models.py

@@ -601,6 +601,7 @@ class MemberActivitySignupInfo(BaseModelMixin):
601 601
     @property
602 602
     def admindata(self):
603 603
         return {
604
+            'signup_id': self.signup_id,
604 605
             'user_id': self.user_id,
605 606
             'activity_id': self.activity_id,
606 607
             'title': self.title,
@@ -664,28 +665,50 @@ class MemberActivityGroupShareInfo(BaseModelMixin):
664 665
 
665 666
 
666 667
 class MemberActivityContributionInfo(BaseModelMixin):
668
+    CONTENT_TYPE = (
669
+        (0, u'投稿'),
670
+        (1, u'入围'),
671
+        (2, u'创作日记'),
672
+    )
673
+
667 674
     brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True)
668 675
     brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称')
669 676
 
670
-    activity_id = models.CharField(_(u'activity_id'), max_length=32, blank=True, null=True, help_text=u'活动唯一标识', db_index=True)
677
+    contribution_id = ShortUUIDField(_(u'contribution_id'), max_length=32, blank=True, null=True, help_text=u'投稿唯一标识', db_index=True, unique=True)
671 678
 
672
-    share_user_id = models.CharField(_(u'share_user_id'), max_length=32, blank=True, null=True, help_text=u'分享用户唯一标识', db_index=True)
673
-    click_user_id = models.CharField(_(u'click_user_id'), max_length=32, blank=True, null=True, help_text=u'点击用户唯一标识', db_index=True)
679
+    user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)
674 680
 
675
-    open_gid = models.CharField(_(u'open_gid'), max_length=32, blank=True, null=True, help_text=u'群组唯一标识', db_index=True)
681
+    activity_id = models.CharField(_(u'activity_id'), max_length=32, blank=True, null=True, help_text=u'活动唯一标识', db_index=True)
676 682
 
677
-    title = models.CharField(_(u'title'), max_length=255, blank=True, null=True, help_text=u'活动名称')
683
+    content_type = models.IntegerField(_(u'content_type'), choices=CONTENT_TYPE, default=0, help_text=u'内容类型', db_index=True)
678 684
 
679
-    is_integral = models.BooleanField(_(u'is_integral'), default=False, help_text=u'是否有积分')
680
-    integral = models.IntegerField(_(u'integral'), default=0, help_text=u'积分')
685
+    # 传参图片列表(默认第一张为封面图,包括图片url、宽、高)、标题、内容(纯文本)。
686
+    title = models.CharField(_(u'title'), max_length=255, blank=True, null=True, help_text=u'标题')
687
+    content = models.TextField(_(u'content'), blank=True, null=True, help_text=u'内容')
688
+    # content_rich_text = RichTextField(_(u'content_rich_text'), blank=True, default='', help_text=u'内容')
689
+    # [{
690
+    #     'image_url': '',
691
+    #     'width': 100,
692
+    #     'height': 100,
693
+    # }]
694
+    images = JSONField(_(u'images'), default=[], help_text=u'图片列表')
681 695
 
682 696
     class Meta:
683
-        verbose_name = _(u'会员活动群组分享信息')
684
-        verbose_name_plural = _(u'会员活动群组分享信息')
685
-
686
-        unique_together = (
687
-            ('activity_id', 'share_user_id', 'click_user_id', 'open_gid', 'brand_id'),
688
-        )
697
+        verbose_name = _(u'会员活动投稿信息')
698
+        verbose_name_plural = _(u'会员活动投稿信息')
689 699
 
690 700
     def __unicode__(self):
691 701
         return '%d' % self.pk
702
+
703
+    @property
704
+    def data(self):
705
+        return {
706
+            'contribution_id': self.contribution_id,
707
+            'user_id': self.user_id,
708
+            'activity_id': self.activity_id,
709
+            'content_type': self.content_type,
710
+            'content_type_str': dict(MemberActivityContributionInfo.CONTENT_TYPE).get(self.content_type),
711
+            'title': self.title,
712
+            'content': self.content,
713
+            'images': self.images,
714
+        }