:art: Support Member Activity Contribute Welfare

huangqimin001 2 lat temu
rodzic
commit
a37357f66d

+ 129 - 8
api/admin_views.py

@@ -23,8 +23,9 @@ from coupon.models import CouponInfo, UserCouponInfo
23 23
 from integral.models import SaleclerkSubmitLogInfo
24 24
 from logs.models import AdministratorLoginLogInfo, ComplementCodeLogInfo, MchInfoEncryptLogInfo
25 25
 from mch.models import AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, ModelInfo
26
-from member.models import (GoodsInfo, GoodsOrderInfo, MemberActivityContributionInfo, MemberActivityGroupShareInfo,
27
-                           MemberActivityInfo, MemberActivitySignupInfo)
26
+from member.models import (GoodsInfo, GoodsOrderInfo, MemberActivityContributionInfo,
27
+                           MemberActivityContributionWelfareInfo, MemberActivityGroupShareInfo, MemberActivityInfo,
28
+                           MemberActivitySignupInfo)
28 29
 from pre.custom_message import sendtemplatemessage, sendwxasubscribemessage
29 30
 from statistic.models import ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo
30 31
 from utils.error.errno_utils import (AdministratorStatusCode, ComplementCodeStatusCode,
@@ -992,7 +993,7 @@ def member_activity_list(request):
992 993
     })
993 994
 
994 995
 
995
-def member_activity_details(request):
996
+def member_activity_detail(request):
996 997
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
997 998
     admin_id = request.POST.get('admin_id', '')
998 999
     activity_id = request.POST.get('activity_id', '')
@@ -1010,10 +1011,8 @@ def member_activity_details(request):
1010 1011
     except MemberActivityInfo.DoesNotExist:
1011 1012
         return response()
1012 1013
 
1013
-    log = log.admindetails
1014
-
1015 1014
     return response(200, 'Get Member Activity Record Details Success', u'获取会员活动详情成功', data={
1016
-        'log': log,
1015
+        'log': log.admindetails,
1017 1016
     })
1018 1017
 
1019 1018
 
@@ -1257,6 +1256,128 @@ def member_activity_contribute_selected(request):
1257 1256
     return response(200, 'Member Activity Contribution Selected Success', u'会员活动投稿入围成功')
1258 1257
 
1259 1258
 
1259
+def member_activity_contribute_welfare_list(request):
1260
+    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
1261
+    admin_id = request.POST.get('admin_id', '')
1262
+    welfare_type = request.POST.get('welfare_type', '')
1263
+    welfare_title = request.POST.get('welfare_title', '')
1264
+    page = request.POST.get('page', 1)
1265
+    num = request.POST.get('num', 20)
1266
+
1267
+    if brand_id != settings.KODO_DEFAULT_BRAND_ID:
1268
+        return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
1269
+
1270
+    try:
1271
+        administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
1272
+    except AdministratorInfo.DoesNotExist:
1273
+        return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
1274
+
1275
+    welfares = MemberActivityContributionWelfareInfo.objects.filter(status=True)
1276
+
1277
+    if welfare_type:
1278
+        welfares = welfares.filter(welfare_type=welfare_type)
1279
+
1280
+    if welfare_title:
1281
+        welfares = welfares.filter(welfare_title__icontains=welfare_title)
1282
+
1283
+    welfares = welfares.order_by('-pk')
1284
+
1285
+    count = welfares.count()
1286
+    welfares, left = pagination(welfares, page, num)
1287
+    welfares = [welfare.data for welfare in welfares]
1288
+
1289
+    return response(200, 'Get Member Activity Contribute Welfare List Success', u'获取会员活动投稿福利列表成功', data={
1290
+        'welfares': welfares,
1291
+        'left': left,
1292
+        'count': count
1293
+    })
1294
+
1295
+
1296
+def member_activity_contribute_welfare_detail(request):
1297
+    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
1298
+    admin_id = request.POST.get('admin_id', '')
1299
+    welfare_id = request.POST.get('welfare_id', '')
1300
+
1301
+    if brand_id != settings.KODO_DEFAULT_BRAND_ID:
1302
+        return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
1303
+
1304
+    try:
1305
+        administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
1306
+    except AdministratorInfo.DoesNotExist:
1307
+        return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
1308
+
1309
+    try:
1310
+        welfare = MemberActivityContributionWelfareInfo.objects.get(welfare_id=welfare_id)
1311
+    except MemberActivityContributionWelfareInfo.DoesNotExist:
1312
+        return response()
1313
+
1314
+    return response(200, 'Get Member Activity Contribute Welfare Detail Success', u'获取会员活动投稿福利详情成功', data={
1315
+        'welfare': welfare.data,
1316
+    })
1317
+
1318
+
1319
+def member_activity_contribute_welfare_update(request):
1320
+    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
1321
+    admin_id = request.POST.get('admin_id', '')
1322
+    welfare_id = request.POST.get('welfare_id', '')
1323
+    welfare_type = int(request.POST.get('welfare_type', 0))
1324
+    welfare_title = request.POST.get('welfare_title', '')
1325
+    welfare_detail = request.POST.get('welfare_detail', '')
1326
+    welfare_value = request.POST.get('welfare_value', '')
1327
+    welfare_image_path = request.POST.get('welfare_image_path', '')
1328
+
1329
+    if brand_id != settings.KODO_DEFAULT_BRAND_ID:
1330
+        return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
1331
+
1332
+    try:
1333
+        administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
1334
+    except AdministratorInfo.DoesNotExist:
1335
+        return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
1336
+
1337
+    try:
1338
+        welfare = MemberActivityContributionWelfareInfo.objects.get(welfare_id=welfare_id, status=True)
1339
+    except MemberActivityContributionWelfareInfo.DoesNotExist:
1340
+        return response()
1341
+
1342
+    welfare.welfare_type = welfare_type
1343
+    welfare.welfare_title = welfare_title
1344
+    welfare.welfare_detail = welfare_detail
1345
+    welfare.welfare_value = welfare_value
1346
+    welfare.welfare_image = welfare_image_path
1347
+    welfare.save()
1348
+
1349
+    return response(200, 'Update Member Activity Contribute Welfare Success', u'更新会员活动投稿福利成功')
1350
+
1351
+
1352
+def member_activity_contribute_welfare_create(request):
1353
+    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
1354
+    admin_id = request.POST.get('admin_id', '')
1355
+    welfare_type = int(request.POST.get('welfare_type', 0))
1356
+    welfare_title = request.POST.get('welfare_title', '')
1357
+    welfare_detail = request.POST.get('welfare_detail', '')
1358
+    welfare_value = request.POST.get('welfare_value', '')
1359
+    welfare_image_path = request.POST.get('welfare_image_path', '')
1360
+
1361
+    if brand_id != settings.KODO_DEFAULT_BRAND_ID:
1362
+        return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
1363
+
1364
+    try:
1365
+        administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
1366
+    except AdministratorInfo.DoesNotExist:
1367
+        return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
1368
+
1369
+    MemberActivityContributionWelfareInfo.objects.create(
1370
+        brand_id=administrator.brand_id,
1371
+        welfare_type=welfare_type,
1372
+        welfare_title=welfare_title,
1373
+        welfare_detail=welfare_detail,
1374
+        welfare_value=welfare_value,
1375
+        welfare_image=welfare_image_path,
1376
+    )
1377
+
1378
+    return response(200, 'Create Member Activity Contribute Welfare Success', u'创建会员活动投稿福利成功')
1379
+
1380
+
1260 1381
 def coupon_list(request):
1261 1382
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
1262 1383
     admin_id = request.POST.get('admin_id', '')
@@ -1294,7 +1415,7 @@ def coupon_list(request):
1294 1415
     })
1295 1416
 
1296 1417
 
1297
-def coupon_details(request):
1418
+def coupon_detail(request):
1298 1419
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
1299 1420
     admin_id = request.POST.get('admin_id', '')
1300 1421
     coupon_id = request.POST.get('coupon_id', '')
@@ -1449,7 +1570,7 @@ def member_goods_list(request):
1449 1570
     })
1450 1571
 
1451 1572
 
1452
-def member_goods_details(request):
1573
+def member_goods_detail(request):
1453 1574
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
1454 1575
     admin_id = request.POST.get('admin_id', '')
1455 1576
     good_id = request.POST.get('good_id', '')

+ 8 - 3
api/urls.py

@@ -165,7 +165,7 @@ urlpatterns += [
165 165
     url(r'^admin/member/goods/order/batch/update$', admin_views.member_goods_order_batch_update, name='member_goods_order_batch_update'),
166 166
 
167 167
     url(r'^admin/member/activity/list$', admin_views.member_activity_list, name='member_activity_list'),
168
-    url(r'^admin/member/activity/details$', admin_views.member_activity_details, name='member_activity_details'),
168
+    url(r'^admin/member/activity/details$', admin_views.member_activity_detail, name='member_activity_detail'),
169 169
     url(r'^admin/member/activity/update$', admin_views.member_activity_update, name='member_activity_update'),
170 170
     url(r'^admin/member/activity/create$', admin_views.member_activity_create, name='member_activity_create'),
171 171
     url(r'^admin/member/activity/share/list$', admin_views.member_activity_share_list, name='member_activity_share_list'),
@@ -175,14 +175,19 @@ urlpatterns += [
175 175
     url(r'^admin/member/activity/contribute/audit$', admin_views.member_activity_contribute_audit, name='admin_member_activity_contribute_audit'),
176 176
     url(r'^admin/member/activity/contribute/selected$', admin_views.member_activity_contribute_selected, name='admin_member_activity_contribute_selected'),
177 177
 
178
+    url(r'^admin/member/activity/contribute/welfare/list$', admin_views.member_activity_contribute_welfare_list, name='member_activity_contribute_welfare_list'),
179
+    url(r'^admin/member/activity/contribute/welfare/detail$', admin_views.member_activity_contribute_welfare_detail, name='member_activity_contribute_welfare_detail'),
180
+    url(r'^admin/member/activity/contribute/welfare/update$', admin_views.member_activity_contribute_welfare_update, name='member_activity_contribute_welfare_update'),
181
+    url(r'^admin/member/activity/contribute/welfare/create$', admin_views.member_activity_contribute_welfare_create, name='member_activity_contribute_welfare_create'),
182
+
178 183
     url(r'^admin/coupon/list$', admin_views.coupon_list, name='coupon_list'),
179
-    url(r'^admin/coupon/details$', admin_views.coupon_details, name='coupon_update'),
184
+    url(r'^admin/coupon/details$', admin_views.coupon_detail, name='coupon_detail'),
180 185
     url(r'^admin/coupon/create$', admin_views.coupon_create, name='coupon_create'),
181 186
     url(r'^admin/coupon/update$', admin_views.coupon_update, name='coupon_update'),
182 187
     url(r'^admin/coupon/delete$', admin_views.coupon_delete, name='coupon_delete'),
183 188
 
184 189
     url(r'^admin/member/goods/list$', admin_views.member_goods_list, name='member_goods_list'),
185
-    url(r'^admin/member/goods/details$', admin_views.member_goods_details, name='member_goods_details'),
190
+    url(r'^admin/member/goods/details$', admin_views.member_goods_detail, name='member_goods_detail'),
186 191
     url(r'^admin/member/goods/create$', admin_views.member_goods_create, name='member_goods_create'),
187 192
     url(r'^admin/member/goods/update$', admin_views.member_goods_update, name='member_goods_update'),
188 193
 

+ 9 - 3
member/admin.py

@@ -5,9 +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, MemberActivityContributionInfo, MemberActivityGroupShareInfo,
9
-                           MemberActivityInfo, MemberActivitySigninInfo, MemberActivitySignupInfo, RightInfo,
10
-                           ShotTypeInfo)
8
+from member.models import (GoodsInfo, GoodsOrderInfo, MemberActivityContributionInfo,
9
+                           MemberActivityContributionWelfareInfo, MemberActivityGroupShareInfo, MemberActivityInfo,
10
+                           MemberActivitySigninInfo, MemberActivitySignupInfo, RightInfo, ShotTypeInfo)
11 11
 from pre.custom_message import sendwxasubscribemessage
12 12
 from utils.redis.rshot import update_member_shot_data
13 13
 
@@ -103,6 +103,11 @@ class MemberActivityContributionInfoAdmin(admin.ModelAdmin):
103 103
     list_filter = ('activity_id', 'content_type', 'is_audit_pass', 'is_selected', 'status')
104 104
 
105 105
 
106
+class MemberActivityContributionWelfareInfoAdmin(admin.ModelAdmin):
107
+    list_display = ('welfare_id', 'welfare_type', 'welfare_title', 'welfare_detail', 'welfare_value', 'welfare_image', 'status', 'created_at', 'updated_at')
108
+    list_filter = ('welfare_type', 'status')
109
+
110
+
106 111
 admin.site.register(GoodsInfo, GoodsInfoAdmin)
107 112
 admin.site.register(GoodsOrderInfo, GoodsOrderInfoAdmin)
108 113
 admin.site.register(RightInfo, RightInfoAdmin)
@@ -112,3 +117,4 @@ admin.site.register(MemberActivitySignupInfo, MemberActivitySignupInfoAdmin)
112 117
 admin.site.register(MemberActivitySigninInfo, MemberActivitySigninInfoAdmin)
113 118
 admin.site.register(MemberActivityGroupShareInfo, MemberActivityGroupShareInfoAdmin)
114 119
 admin.site.register(MemberActivityContributionInfo, MemberActivityContributionInfoAdmin)
120
+admin.site.register(MemberActivityContributionWelfareInfo, MemberActivityContributionWelfareInfoAdmin)

+ 43 - 0
member/migrations/0038_auto_20221025_0141.py

@@ -0,0 +1,43 @@
1
+# -*- coding: utf-8 -*-
2
+# Generated by Django 3.2.16 on 2022-10-24 17:41
3
+
4
+from django.db import migrations, models
5
+import django_models_ext.fileext
6
+import shortuuidfield.fields
7
+import simditor.fields
8
+
9
+
10
+class Migration(migrations.Migration):
11
+
12
+    dependencies = [
13
+        ('member', '0037_auto_20221023_2010'),
14
+    ]
15
+
16
+    operations = [
17
+        migrations.CreateModel(
18
+            name='MemberActivityContributionWelfareInfo',
19
+            fields=[
20
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
21
+                ('status', models.BooleanField(default=True, help_text='Status', verbose_name='status')),
22
+                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')),
23
+                ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')),
24
+                ('brand_id', models.CharField(blank=True, db_index=True, help_text='品牌唯一标识', max_length=32, null=True, verbose_name='brand_id')),
25
+                ('brand_name', models.CharField(blank=True, help_text='品牌名称', max_length=255, null=True, verbose_name='brand_name')),
26
+                ('welfare_id', shortuuidfield.fields.ShortUUIDField(blank=True, db_index=True, editable=False, help_text='福利唯一标识', max_length=22, null=True, unique=True)),
27
+                ('welfare_type', models.IntegerField(choices=[(0, '实物'), (1, '积分'), (2, '虚拟')], db_index=True, default=0, help_text='福利类型', verbose_name='welfare_type')),
28
+                ('welfare_title', models.CharField(blank=True, help_text='福利标题', max_length=255, null=True, verbose_name='welfare_title')),
29
+                ('welfare_detail', simditor.fields.RichTextField(blank=True, help_text='福利详情', null=True, verbose_name='welfare_detail')),
30
+                ('welfare_value', models.IntegerField(default=0, help_text='福利数量', verbose_name='welfare_value')),
31
+                ('welfare_image', models.ImageField(blank=True, help_text='福利图片', null=True, upload_to=django_models_ext.fileext.upload_path, verbose_name='welfare_image')),
32
+            ],
33
+            options={
34
+                'verbose_name': '会员活动投稿福利信息',
35
+                'verbose_name_plural': '会员活动投稿福利信息',
36
+            },
37
+        ),
38
+        migrations.AlterField(
39
+            model_name='memberactivitycontributioninfo',
40
+            name='content_type',
41
+            field=models.IntegerField(choices=[(0, '投稿'), (1, '创作日记')], db_index=True, default=0, help_text='内容类型', verbose_name='content_type'),
42
+        ),
43
+    ]

+ 19 - 0
member/migrations/0039_memberactivitycontributionwelfareinfo_is_upload_qiniu.py

@@ -0,0 +1,19 @@
1
+# -*- coding: utf-8 -*-
2
+# Generated by Django 3.2.16 on 2022-10-24 17:59
3
+
4
+from django.db import migrations, models
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('member', '0038_auto_20221025_0141'),
11
+    ]
12
+
13
+    operations = [
14
+        migrations.AddField(
15
+            model_name='memberactivitycontributionwelfareinfo',
16
+            name='is_upload_qiniu',
17
+            field=models.BooleanField(default=False, help_text='是否已上传七牛', verbose_name='is_upload_qiniu'),
18
+        ),
19
+    ]

+ 50 - 0
member/models.py

@@ -718,3 +718,53 @@ class MemberActivityContributionInfo(BaseModelMixin):
718 718
             'video_url': self.video_url or '',
719 719
             'created_at': tc.local_string(utc_dt=self.created_at),
720 720
         }
721
+
722
+
723
+class MemberActivityContributionWelfareInfo(BaseModelMixin):
724
+    WELFARE_TYPE = (
725
+        (0, u'实物'),
726
+        (1, u'积分'),
727
+        (2, u'虚拟'),
728
+    )
729
+
730
+    brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True)
731
+    brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称')
732
+
733
+    welfare_id = ShortUUIDField(_(u'welfare_id'), max_length=32, blank=True, null=True, help_text=u'福利唯一标识', db_index=True, unique=True)
734
+
735
+    welfare_type = models.IntegerField(_(u'welfare_type'), choices=WELFARE_TYPE, default=0, help_text=u'福利类型', db_index=True)
736
+
737
+    welfare_title = models.CharField(_(u'welfare_title'), max_length=255, blank=True, null=True, help_text=u'福利标题')
738
+    welfare_detail = RichTextField(_(u'welfare_detail'), blank=True, null=True, help_text=u'福利详情')
739
+    welfare_value = models.IntegerField(_(u'welfare_value'), default=0, help_text=_(u'福利数量'))
740
+    welfare_image = models.ImageField(_(u'welfare_image'), upload_to=upload_path, blank=True, null=True, help_text=u'福利图片')
741
+
742
+    is_upload_qiniu = models.BooleanField(_(u'is_upload_qiniu'), default=False, help_text=_(u'是否已上传七牛'))
743
+
744
+    class Meta:
745
+        verbose_name = _(u'会员活动投稿福利信息')
746
+        verbose_name_plural = _(u'会员活动投稿福利信息')
747
+
748
+    def __unicode__(self):
749
+        return '%d' % self.pk
750
+
751
+    @property
752
+    def welfare_image_path(self):
753
+        return upload_file_path(self.welfare_image)
754
+
755
+    @property
756
+    def welfare_image_url(self):
757
+        return qiniu_file_url(self.welfare_image.name, bucket='tamron') if self.is_upload_qiniu else upload_file_url(self.welfare_image)
758
+
759
+    @property
760
+    def data(self):
761
+        return {
762
+            'welfare_id': self.welfare_id,
763
+            'welfare_type': self.welfare_type,
764
+            'welfare_type_str': dict(MemberActivityContributionWelfareInfo.WELFARE_TYPE).get(self.welfare_type),
765
+            'welfare_title': self.welfare_title,
766
+            'welfare_detail': self.welfare_detail,
767
+            'welfare_value': self.welfare_value,
768
+            'welfare_image_url': self.welfare_image_url,
769
+            'welfare_image_path': self.welfare_image_path,
770
+        }