调整活动签到

FFIB 1 an auparavant
Parent
Commettre
33e94faca0

+ 0 - 257
api/member_views.py

@@ -342,127 +342,6 @@ def integrals(request):
342 342
     })
343 343
 
344 344
 
345
-@logit
346
-def activity_list(request):
347
-    brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
348
-    user_id = request.POST.get('user_id', '')
349
-
350
-    raw_activitys = MemberActivityInfo.objects.filter(activity_state=1, status=True).order_by('-date')
351
-    banners = []
352
-    activitys = []
353
-    for act in raw_activitys:
354
-        if act.is_slider:
355
-            banners.append(act.data(user_id))
356
-        else:
357
-            activitys.append(act.data(user_id))
358
-
359
-    return response(data={
360
-        'banners': banners,
361
-        'activitys': activitys,
362
-    })
363
-
364
-
365
-@logit
366
-def activity_detail(request):
367
-    brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
368
-    user_id = request.POST.get('user_id', '')
369
-    activity_id = request.POST.get('activity_id', '')
370
-
371
-    try:
372
-        act = MemberActivityInfo.objects.get(activity_id=activity_id, status=True)
373
-    except MemberActivityInfo.DoesNotExist:
374
-        return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND)
375
-
376
-    return response(data={
377
-        'activity': act.details(user_id),
378
-    })
379
-
380
-
381
-@logit
382
-def activity_signup(request):
383
-    brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
384
-    user_id = request.POST.get('user_id', '')
385
-    activity_id = request.POST.get('activity_id', '')
386
-    avatar = request.POST.get('avatar', '')
387
-    name = request.POST.get('name', '')
388
-    phone = request.POST.get('phone', '')
389
-
390
-    try:
391
-        act = MemberActivityInfo.objects.get(activity_id=activity_id, status=True)
392
-    except MemberActivityInfo.DoesNotExist:
393
-        return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND)
394
-
395
-    MemberActivitySignupInfo.objects.update_or_create(user_id=user_id, activity_id=activity_id, defaults={
396
-        'title': act.title,
397
-        'name': name,
398
-        'avatar': avatar,
399
-        'phone': phone,
400
-    })
401
-
402
-    MemberActivityContributionInfo.objects.filter(user_id=user_id, activity_id=activity_id).update(user_name=name, user_avatar=avatar)
403
-
404
-    # TODO: 立即推送模版消息(报名成功,时间,地点)
405
-    # TODO: 延迟(活动当天)推送模版消息(时间,地点)
406
-
407
-    return response(data={
408
-        'activity': act.data(user_id),
409
-    })
410
-
411
-
412
-@logit
413
-def activity_signup_info(request):
414
-    brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
415
-    user_id = request.POST.get('user_id', '')
416
-    activity_id = request.POST.get('activity_id', '')
417
-
418
-    try:
419
-        signup_info = MemberActivitySignupInfo.objects.get(user_id=user_id, activity_id=activity_id, status=True)
420
-    except MemberActivitySignupInfo.DoesNotExist:
421
-        return response()
422
-
423
-    try:
424
-        contribution = MemberActivityContributionInfo.objects.get(user_id=user_id, activity_id=activity_id, content_type=0, status=True)
425
-    except MemberActivityContributionInfo.DoesNotExist:
426
-        return response(MemberActivityContributionStatusCode.ACTIVITY_CONTRIBUTION_NOT_FOUND)
427
-
428
-    return response(data={
429
-        'signup_info': signup_info.data,
430
-        'contribution': contribution.data
431
-    })
432
-
433
-
434
-@logit
435
-@transaction.atomic
436
-def activity_signin(request):
437
-    brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
438
-    user_id = request.POST.get('user_id', '')
439
-    activity_id = request.POST.get('activity_id', '')
440
-
441
-    # 校验用户是否存在
442
-    try:
443
-        user = UserInfo.objects.select_for_update().get(user_id=user_id)
444
-    except UserInfo.DoesNotExist:
445
-        return response(UserStatusCode.USER_NOT_FOUND)
446
-
447
-    try:
448
-        act = MemberActivityInfo.objects.get(activity_id=activity_id, status=True)
449
-    except MemberActivityInfo.DoesNotExist:
450
-        return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND)
451
-
452
-    MemberActivitySigninInfo.objects.update_or_create(user_id=user_id, activity_id=activity_id, defaults={
453
-        'title': act.title,
454
-    })
455
-
456
-    user.integral += act.integral
457
-    user.save()
458
-
459
-    # TODO: 立即推送模版消息(感谢您参加活动,获得的积分)
460
-
461
-    return response(data={
462
-        'activity': act.data(user_id),
463
-    })
464
-
465
-
466 345
 def get_group_share_info_integral(activity_id, share_user_id, open_gid, group_share_integral, group_share_max_integral):
467 346
     # 校验该分享人是否已领取该群积分
468 347
     if open_gid:
@@ -547,142 +426,6 @@ def activity_group_share(request):
547 426
 
548 427
 
549 428
 @logit
550
-def activity_contribute(request):
551
-    brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
552
-    user_id = request.POST.get('user_id', '')
553
-    activity_id = request.POST.get('activity_id', '')
554
-    content_type = get_query_value(request, 'content_type', val_cast_type='int')
555
-    title = request.POST.get('title', '')
556
-    content = request.POST.get('content', '')
557
-    images = get_query_value(request, 'images', val_cast_type='listjson')
558
-    video_url = request.POST.get('video_url', '')
559
-
560
-    # 校验用户是否存在
561
-    try:
562
-        UserInfo.objects.get(user_id=user_id)
563
-    except UserInfo.DoesNotExist:
564
-        return response(UserStatusCode.USER_NOT_FOUND)
565
-
566
-    try:
567
-        signup_info = MemberActivitySignupInfo.objects.get(user_id=user_id, activity_id=activity_id, status=True)
568
-    except MemberActivitySignupInfo.DoesNotExist:
569
-        signup_info = None
570
-
571
-    contribution = MemberActivityContributionInfo.objects.create(
572
-        brand_id=brand_id,
573
-        user_id=user_id,
574
-        activity_id=activity_id,
575
-        content_type=content_type,
576
-        title=title,
577
-        content=content,
578
-        images=images,
579
-        video_url=video_url,
580
-        user_name=signup_info.name if signup_info else '',
581
-        user_avatar=signup_info.final_avatar if signup_info else '',
582
-    )
583
-
584
-    return response(data={
585
-        'contribution': contribution.data,
586
-    })
587
-
588
-
589
-@logit
590
-def activity_contribute_update(request):
591
-    brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
592
-    user_id = request.POST.get('user_id', '')
593
-    activity_id = request.POST.get('activity_id', '')
594
-    content_type = get_query_value(request, 'content_type', val_cast_type='int')
595
-    contribution_id = request.POST.get('contribution_id', '')
596
-    title = request.POST.get('title', '')
597
-    content = request.POST.get('content', '')
598
-    images = get_query_value(request, 'images', val_cast_type='listjson')
599
-    video_url = request.POST.get('video_url', '')
600
-
601
-    # 校验用户是否存在
602
-    try:
603
-        UserInfo.objects.get(user_id=user_id)
604
-    except UserInfo.DoesNotExist:
605
-        return response(UserStatusCode.USER_NOT_FOUND)
606
-
607
-    try:
608
-        signup_info = MemberActivitySignupInfo.objects.get(user_id=user_id, activity_id=activity_id, status=True)
609
-    except MemberActivitySignupInfo.DoesNotExist:
610
-        signup_info = None
611
-
612
-    contribution, _ = MemberActivityContributionInfo.objects.update_or_create(brand_id=brand_id, user_id=user_id, activity_id=activity_id, contribution_id=contribution_id, defaults={
613
-        'title': title,
614
-        'content': content,
615
-        'images': images,
616
-        'video_url': video_url,
617
-        'user_name': signup_info.name if signup_info else '',
618
-        'user_avatar': signup_info.final_avatar if signup_info else '',
619
-        'audit_status': 0,
620
-    })
621
-
622
-    return response(data={
623
-        'contribution': contribution.data,
624
-    })
625
-
626
-
627
-@logit
628
-def activity_contribute_list(request):
629
-    brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
630
-    user_id = request.POST.get('user_id', '')
631
-    main_activity_id = request.POST.get('main_activity_id', '')
632
-    activity_id = request.POST.get('activity_id', '')
633
-    content_type = get_query_value(request, 'content_type', val_cast_type='int')
634
-    is_myself = get_query_value(request, 'is_myself', val_cast_type='int')
635
-    audit_status = get_query_value(request, 'audit_status', val_cast_type='int')
636
-    is_audit_pass = get_query_value(request, 'is_audit_pass', val_cast_type='int')
637
-    is_selected = get_query_value(request, 'is_selected', val_cast_type='int')
638
-    page = request.POST.get('page', 1)
639
-    num = request.POST.get('num', 20)
640
-
641
-    if main_activity_id:
642
-        contributions = MemberActivityContributionInfo.objects.filter(main_activity_id=main_activity_id, status=True)
643
-    else:
644
-        contributions = MemberActivityContributionInfo.objects.filter(activity_id=activity_id, status=True)
645
-
646
-    if 'content_type' in request.POST:
647
-        contributions = contributions.filter(content_type=content_type)
648
-    if 'is_myself' in request.POST:
649
-        if is_myself:
650
-            contributions = contributions.filter(user_id=user_id)
651
-        else:
652
-            contributions = contributions.exclude(user_id=user_id)
653
-    if 'audit_status' in request.POST:
654
-        contributions = contributions.filter(audit_status=audit_status)
655
-    if 'is_audit_pass' in request.POST:
656
-        if is_audit_pass:
657
-            contributions = contributions.filter(audit_status=MemberActivityContributionInfo.AUDIT_PASS)
658
-        else:
659
-            contributions = contributions.exclude(audit_status=MemberActivityContributionInfo.AUDIT_PASS)
660
-    if 'is_selected' in request.POST:
661
-        contributions = contributions.filter(is_selected=is_selected)
662
-    contributions = contributions.order_by('-pk')
663
-    contributions, left = pagination(contributions, page, num)
664
-    contributions = [contribution.data for contribution in contributions]
665
-
666
-    return response(data={
667
-        'contributions': contributions,
668
-        'left': left,
669
-    })
670
-
671
-
672
-@logit
673
-def activity_contribute_detail(request):
674
-    brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
675
-    contribution_id = request.POST.get('contribution_id', '')
676
-
677
-    try:
678
-        contribution = MemberActivityContributionInfo.objects.get(contribution_id=contribution_id, status=True)
679
-    except MemberActivityContributionInfo.DoesNotExist:
680
-        return response(MemberActivityContributionStatusCode.ACTIVITY_CONTRIBUTION_NOT_FOUND)
681
-
682
-    return response(data=contribution.data)
683
-
684
-
685
-@logit
686 429
 def activity_contribute_welfare_unlocking_list(request):
687 430
     brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
688 431
     user_id = request.POST.get('user_id', '')

+ 0 - 11
api/urls.py

@@ -239,19 +239,8 @@ urlpatterns += [
239 239
 
240 240
     url(r'^member/integrals$', member_views.integrals, name='member_integrals'),
241 241
 
242
-    url(r'^member/activity/list$', member_views.activity_list, name='member_activity_list'),
243
-    url(r'^member/activity/detail$', member_views.activity_detail, name='member_activity_detail'),
244
-    url(r'^member/activity/signup$', member_views.activity_signup, name='member_activity_signup'),
245
-    url(r'^member/activity/signin$', member_views.activity_signin, name='member_activity_signin'),
246
-
247 242
     url(r'^member/activity/group_share$', member_views.activity_group_share, name='member_activity_group_share'),
248 243
 
249
-    url(r'^member/activity/signup/info$', member_views.activity_signup_info, name='activity_signup_info'),
250
-    url(r'^member/activity/contribute$', member_views.activity_contribute, name='member_activity_contribute'),
251
-    url(r'^member/activity/contribute/list$', member_views.activity_contribute_list, name='member_activity_contribute_list'),
252
-    url(r'^member/activity/contribute/update$', member_views.activity_contribute_update, name='activity_contribute_update'),
253
-    url(r'^member/activity/contribute/detail$', member_views.activity_contribute_detail, name='member_activity_contribute_detail'),
254
-
255 244
     url(r'^member/activity/contribute/welfare/unlocking/list$', member_views.activity_contribute_welfare_unlocking_list, name='member_activity_contribute_welfare_unlocking_list'),
256 245
     url(r'^member/activity/contribute/welfare/unlocking/detail$', member_views.activity_contribute_welfare_unlocking_detail, name='member_activity_contribute_welfare_unlocking_detail'),
257 246
     url(r'^member/activity/contribute/welfare/unlocking/update$', member_views.activity_contribute_welfare_unlocking_update, name='member_activity_contribute_welfare_unlocking_update'),

+ 4 - 0
member/activity_admin_views.py

@@ -233,12 +233,16 @@ def activity_signup_list(request, administrator):
233 233
     page = int(request.POST.get('page', 1))
234 234
     num = int(request.POST.get('num', 20))
235 235
     query = request.POST.get('query', '')
236
+    is_signin = request.POST.get('is_signin', False)
236 237
 
237 238
     logs = MemberActivitySignupInfo.objects.filter(activity_id=activity_id, status=True).exclude(fields='[]')
238 239
 
239 240
     if query:
240 241
         logs = logs.filter(fields__icontains=query)
241 242
 
243
+    if is_signin:
244
+        logs = logs.filter(is_signin=is_signin)
245
+
242 246
     count = logs.count()
243 247
     logs, left = pagination(logs, page, num)
244 248
     logs = [log.admindata for log in logs]

+ 34 - 1
member/activity_mp_views.py

@@ -1,13 +1,15 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 
3 3
 from django.conf import settings
4
+from django.db import transaction
4 5
 from django_logit import logit
5 6
 from django_query import get_query_value
6 7
 from django_response import response
7 8
 from paginator import pagination
8 9
 
10
+from account.models import UserInfo
9 11
 from member.models import MemberActivityInfo, MemberActivitySignupInfo, MemberActivityContributionInfo
10
-from utils.error.errno_utils import MemberActivityStatusCode
12
+from utils.error.errno_utils import MemberActivityStatusCode, UserStatusCode
11 13
 
12 14
 
13 15
 @logit
@@ -261,3 +263,34 @@ def activity_contribute_detail_lastest(request):
261 263
     contribution = MemberActivityContributionInfo.objects.filter(activity_id=activity_id, user_id=user_id, status=True).first()
262 264
 
263 265
     return response(data=contribution.data)
266
+
267
+
268
+@logit
269
+@transaction.atomic
270
+def activity_signin(request):
271
+    brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
272
+    user_id = request.POST.get('user_id', '')
273
+    activity_id = request.POST.get('activity_id', '')
274
+
275
+    # 校验用户是否存在
276
+    try:
277
+        user = UserInfo.objects.select_for_update().get(user_id=user_id)
278
+    except UserInfo.DoesNotExist:
279
+        return response(UserStatusCode.USER_NOT_FOUND)
280
+
281
+    try:
282
+        act = MemberActivityInfo.objects.get(activity_id=activity_id, status=True)
283
+    except MemberActivityInfo.DoesNotExist:
284
+        return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND)
285
+
286
+    try:
287
+        signup_info = MemberActivitySignupInfo.objects.get(activity_id=activity_id, user_id=user_id, status=True)
288
+    except MemberActivitySignupInfo.DoesNotExist:
289
+        return response(40001, 'Signup Info Not Found', u'用户未报名')
290
+
291
+    signup_info.is_signin = True
292
+    signup_info.save()
293
+
294
+    return response(data={
295
+        'activity': act.data(user_id)
296
+    })

+ 20 - 0
member/migrations/0063_memberactivitysignupinfo_is_signup.py

@@ -0,0 +1,20 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+# Generated by Django 3.2.6 on 2023-10-16 08:56
4
+
5
+from django.db import migrations, models
6
+
7
+
8
+class Migration(migrations.Migration):
9
+
10
+    dependencies = [
11
+        ('member', '0062_memberactivitysignupinfo_fields'),
12
+    ]
13
+
14
+    operations = [
15
+        migrations.AddField(
16
+            model_name='memberactivitysignupinfo',
17
+            name='is_signup',
18
+            field=models.BooleanField(default=False, help_text='是否已签到', verbose_name='is_signup'),
19
+        ),
20
+    ]

+ 24 - 0
member/migrations/0064_auto_20231016_1730.py

@@ -0,0 +1,24 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+# Generated by Django 3.2.6 on 2023-10-16 09:30
4
+
5
+from django.db import migrations, models
6
+
7
+
8
+class Migration(migrations.Migration):
9
+
10
+    dependencies = [
11
+        ('member', '0063_memberactivitysignupinfo_is_signup'),
12
+    ]
13
+
14
+    operations = [
15
+        migrations.RemoveField(
16
+            model_name='memberactivitysignupinfo',
17
+            name='is_signup',
18
+        ),
19
+        migrations.AddField(
20
+            model_name='memberactivitysignupinfo',
21
+            name='is_signin',
22
+            field=models.BooleanField(default=False, help_text='是否已签到', verbose_name='is_signin'),
23
+        ),
24
+    ]

+ 3 - 0
member/models.py

@@ -726,6 +726,8 @@ class MemberActivitySignupInfo(BaseModelMixin, BrandInfoMixin):
726 726
 
727 727
     fields = JSONField(_(u'fields'), blank=True, null=True, default='[]', help_text=u'自定义报名字段')
728 728
 
729
+    is_signin = models.BooleanField(_(u'is_signin'), default=False, help_text=u'是否已签到')
730
+
729 731
     class Meta:
730 732
         verbose_name = _(u'会员活动报名信息')
731 733
         verbose_name_plural = _(u'会员活动报名信息')
@@ -763,6 +765,7 @@ class MemberActivitySignupInfo(BaseModelMixin, BrandInfoMixin):
763 765
             'name': self.name,
764 766
             'phone': self.phone,
765 767
             'fields': json.loads(self.fields) if self.fields else [],
768
+            'is_signin': self.is_signin,
766 769
         }
767 770
 
768 771
 

+ 1 - 0
member/mp_urls.py

@@ -15,6 +15,7 @@ urlpatterns = [
15 15
 urlpatterns += [
16 16
     url(r'^member/activity/signup$', activity_mp_views.activity_signup, name='mp_member_activity_signup'),  # 会员活动报名
17 17
     url(r'^member/activity/signup/detail$', activity_mp_views.activity_signup_detail, name='mp_member_activity_signup_detail'),  # 获取会员活动报名信息
18
+    url(r'^member/activity/signin$', activity_mp_views.activity_signin, name='mp_member_activity_signin'),  # 会员活动签到
18 19
 ]
19 20
 
20 21
 # activity contribution