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