Ejemplo n.º 1
0
def show_goal_share(request, pk):
    user = request.session['user']
    wechat_config = get_wechat_config(request)
    sub_models = get_son_models(Goal)
    goal = None
    for sub_model_key in sub_models:
        query = sub_models[sub_model_key].objects.filter(
            user_id=user.user_id).filter(goal_id=pk)
        if query:
            goal = query[0]
            break
    if goal:
        # 跑步自由模式
        if goal.activity_type == RunningGoal.get_activity(
        ) and goal.goal_type == 0:
            goal_intro = "在{0}天内累计跑步{1}km".format(goal.goal_day,
                                                  goal.goal_distance)
        elif goal.activity_type == RunningGoal.get_activity():
            goal_intro = "在{0}天内每天跑步{1}km".format(goal.goal_day,
                                                  goal.kilos_day)
        elif goal.activity_type == ReadingGoal.get_activity():
            goal_intro = "在30天内阅读完书籍《{0}》".format(goal.book_name)
        elif goal.activity_type == SleepingGoal.get_activity():
            goal_intro = "在{0}天内每天早上{1}前起床".format(
                goal.goal_day, goal.getup_time.strftime("%H:%M"))
        else:
            goal_intro = ""
        return render(
            request, 'goal/share.html', {
                "WechatJSConfig": wechat_config,
                "goal_intro": goal_intro,
                "activity": goal.activity_type
            })
    else:
        return HttpResponseNotFound
Ejemplo n.º 2
0
def show_reading_goal(request, pk):
    user = request.session['user']
    goal_id = pk
    goal = ReadingGoal.objects.filter(goal_id=goal_id).filter(
        activity_type=ReadingGoal.get_activity()).first()
    if goal:
        if goal.status != "ACTIVE":
            return render(request, 'goal/finish.html', {
                'goal': goal,
                'goal_type': ReadingGoal.get_activity()
            })
        else:
            # 天数
            dates_inform = get_days(goal)
            # 查询 Activity 相关的活动信息, 找到第一个符合类型要求且在进行中的活动
            app = Activity.objects.get_active_activity(
                activity_type=ReadingGoal.get_activity())
            person_goals = ReadingGoal.objects.filter(status="ACTIVE")[:5]
            persons = set()
            # TODO:FAKE
            app = fake_data([app])[0]
            for person_goal in person_goals:
                persons.add(UserInfo.objects.get(user_id=person_goal.user_id))

            return render(
                request, "goal/reading.html", {
                    "WechatJSConfig": get_wechat_config(request),
                    "app": app,
                    "goal": goal,
                    "datesinform": dates_inform,
                    "notice":
                    UserAddress.objects.address_is_complete(user=user),
                    "persons": persons,
                })
    else:
        return page_not_found(request)
Ejemplo n.º 3
0
from on.activities.sleeping.models import Coefficient, Sleep_Finish_Save
from on.activities.riding.model import RidingCoefficient, Riding_Finish_Save
from on.user import UserInfo, UserRecord, FoolsDay, UserInvite, UserOrder, UserAddress
from on.views import oauth
from on.temp.push_template import do_push
from on.wechatconfig import get_wechat_config
from datetime import timedelta, date, datetime
import django.utils.timezone as timezone
from on.errorviews import page_not_found
from on.settings.local import DEBUG
import logging

goal_mapping = {
    RunningGoal.get_activity(): show_running_goal,
    SleepingGoal.get_activity(): show_sleeping_goal,
    ReadingGoal.get_activity(): show_reading_goal,
    RidingGoal.get_activity(): show_riding_goal,
    WalkingGoal.get_activity(): show_walking_goal,
}
"""
每天凌晨遍历每个goal,检查该目标下的打卡记录是否完整;
首先设立一个字典,用于更新每个目标拿到的扣除的钱。

对于每个目标而言,
(日常模式)如果昨日的打卡完成了,则更新一下目标的进度
(日常模式)如果昨日的打卡未完成
    若用户目标下有对应的免签券,则自动使用;
    否则将数据库中的打卡时间设置为前一天晚上10点,
"""

# logger = logging.getLogger("app")
Ejemplo n.º 4
0
def create_goal(request):
    user = request.session['user']
    if request.POST:
        reality = request.POST['reality']
        deserve = request.POST["deserve"]
        down_num = request.POST["down_num"]
        guaranty = float(request.POST["guaranty"])
        down_payment = float(request.POST["down_payment"])
        extra_earn = 0
        average = float(down_payment) / int(down_num)
        print("每次要扣除的金额{}".format(average))
        print(
            average,
            "int(down_payment)/int(down_num)int(down_payment)/int(down_num)")
        activate_deposit = guaranty + down_payment
        print(activate_deposit)
        # 日志记录用户支付的钱数
        # logger.info("[Money] User {0} Pay {1} To Create A Goal".format(user.user_id, guaranty + down_payment))
        activity = request.POST["activity"]
        coefficient = float(request.POST["coefficient"])
        mode = request.POST["mode"]
        goal_day = int(request.POST["goal_day"])
        goal_type = request.POST["goal_type"]
        activity_type = Activity.objects.get(
            activity_id=activity).activity_type
        # activate_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
        # 日常模式的结束时间
        # end_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))+timedelta(days=7)
        if activity_type == RunningGoal.get_activity():
            # activate = "跑步"
            distance = request.POST["distance"]
            nosign = request.POST["nosign"]
            rem = 0
            try:
                run = RunningGoal.objects.get(user_id=user.user_id)
            except Exception as e:
                # logger.info("用户活动记录不存在")
                rem = 1
                goal = RunningGoal.objects.create_goal(
                    user_id=user.user_id,
                    runningtype=goal_type,
                    guaranty=guaranty,
                    down_payment=down_payment,
                    activate_deposit=activate_deposit,
                    coefficient=coefficient,
                    mode=mode,
                    goal_day=goal_day,
                    distance=distance,
                    nosign=nosign,
                    extra_earn=extra_earn,
                    average=average,
                    reality_price=reality,
                    deserve_price=deserve,
                    down_num=down_num)
                return JsonResponse({
                    'status': 200,
                    'goal': goal.goal_id,
                    "rem": rem
                })
            else:
                if run.status != "ACTIVE":
                    rem = 1
                    goal = RunningGoal.objects.create_goal(
                        user_id=user.user_id,
                        runningtype=goal_type,
                        guaranty=guaranty,
                        down_payment=down_payment,
                        activate_deposit=activate_deposit,
                        coefficient=coefficient,
                        mode=mode,
                        goal_day=goal_day,
                        distance=distance,
                        nosign=nosign,
                        extra_earn=extra_earn,
                        average=average,
                        reality_price=reality,
                        deserve_price=deserve,
                        down_num=down_num)
                    return JsonResponse({
                        'status': 200,
                        'goal': goal.goal_id,
                        "rem": rem
                    })
                else:
                    rem = 0
                    return JsonResponse({'status': 403, "rem": rem})
        elif activity_type == SleepingGoal.get_activity():
            nosign = request.POST["nosign"]
            delay = request.POST["delay"]
            getuptime = request.POST["getuptime"]
            goal = SleepingGoal.objects.create_goal(
                user_id=user.user_id,
                guaranty=guaranty,
                down_payment=down_payment,
                coefficient=coefficient,
                mode=mode,
                goal_day=goal_day,
                getuptime=getuptime,
                nosign=nosign,
                delay=delay,
            )
            response_data = {'status': 200, 'goal': goal.goal_id}
            return JsonResponse(response_data)
        elif activity_type == ReadingGoal.get_activity():
            maxreturn = request.POST["maxreturn"]
            bookname = request.POST["bookname"]
            goalpage = request.POST["goalpage"]
            bookprice = request.POST["bookprice"]
            imageurl = request.POST["imageurl"]
            goal = ReadingGoal.objects.create_goal(user_id=user.user_id,
                                                   guaranty=guaranty,
                                                   max_return=maxreturn,
                                                   book_name=bookname,
                                                   goal_page=goalpage,
                                                   price=bookprice,
                                                   imageurl=imageurl)
            response_data = {'status': 200, 'goal': goal.goal_id}
            return JsonResponse(response_data)
    else:
        return HttpResponseNotFound
Ejemplo n.º 5
0
def delete_goal(request):
    try:
        user = request.session['user']
        if request.method == "POST":
            # 删除当前的目标活动并退还钱
            activity_type = request.POST['goal_type']
            goal_id = request.POST['goal']
            delete_map = {
                RunningGoal.get_activity(): RunningGoal,
                ReadingGoal.get_activity(): ReadingGoal,
                SleepingGoal.get_activity(): SleepingGoal
            }
            for goal_type in delete_map.keys():
                if activity_type == goal_type:
                    goal_class = delete_map[goal_type]
                    goal = goal_class.objects.get(goal_id=goal_id)
                    # 增加用户的完成次数
                    # if goal.status == "SUCCESS":
                    UserRecord.objects.finish_goal(user=user)
                    # 用户触发,如果挑战成功则删除目标,退还押金
                    # 判断用户是否挑战成功
                    # if goal.refund_to_user(user.wechat_id):

                    # 更新用户的押金
                    UserInfo.objects.update_deposit(
                        user_id=user.user_id,
                        pay_delta=-(goal.guaranty + goal.down_payment))
                    # 更新目前的奖金池
                    obj = Activity.objects.get(
                        activity_type=goal.activity_type)
                    obj.bonus_all -= (goal.guaranty + goal.down_payment)
                    obj.save()

                    # 获取邀请了多少好友
                    num = UserInvite.objects.filter(
                        user_id=request.session["user"].user_id).count()
                    # 用户获取收益的百分比
                    add_up = num * 0.5 + 1
                    if add_up >= 10:
                        add_up = 10
                    # 查询用户的额外收益
                    extra = UserInfo.objects.get(user_id=user.user_id)

                    # 查询用户当前的额外收益
                    Run = RunningGoal.objects.get(user_id=user.user_id)
                    extra_earn = Run.extra_earn
                    print(extra_earn)
                    price = decimal.Decimal(Run.guaranty) + decimal.Decimal(
                        Run.down_payment) + decimal.Decimal(
                            Run.bonus *
                            decimal.Decimal(add_up)) + decimal.Decimal(
                                extra.extra_money)
                    # 将用户获取的收益存入余额
                    # 查询现在用户的保证金跟底金
                    UserInfo.objects.save_balance(user_id=user.user_id,
                                                  price=price)
                    # openid = str(UserInfo.objects.get(user_id=user.user_id).wechat_id)
                    # 删除用户的目标
                    goal_class.objects.delete_goal(goal_id)
                    openid = user.wechat_id
                    url = 'http://wechat.onmytarget.cn/user/index'
                    activate = "跑步"
                    finish_time = timezone.now().strftime('%Y-%m-%d %H:%M')
                    earn_money = str(goal.guaranty + goal.down_payment)
                    earn_time = (goal.start_time + timedelta(
                        days=goal.goal_day)).strftime('%Y-%m-%d %H:%M')
                    balance = str(
                        UserInfo.objects.get(user_id=user.user_id).balance)
                    # 发送模板提醒
                    data = finish_tem(openid, url, activate, finish_time,
                                      earn_money, earn_time, balance)
                    do_push(data)
                    return JsonResponse({'status': 200})
            '''
            if activity_type == RunningGoal.get_activity():
                # 获取相应的goal,准备退款给用户
                goal = RunningGoal.objects.get(goal_id=goal_id)
                # 增加用户的完成次数
                if goal.status == "SUCCESS":
                    UserRecord.objects.finish_goal(user=user)
                if goal.refund_to_user(user.wechat_id):
                    RunningGoal.objects.delete_goal(goal_id)
                    return JsonResponse({'status': 200})
                else:
                    return JsonResponse({'status':403})
            elif activity_type == SleepingGoal.get_activity():
                goal = SleepingGoal.objects.get(goal_id=goal_id)
                UserRecord.objects.finish_goal(user=user)
                if goal.refund_to_user(user.wechat_id):
                    SleepingGoal.objects.delete_goal(goal_id)
                    return JsonResponse({'status': 200})
                else:
                    return JsonResponse({'status': 403})
            elif activity_type == ReadingGoal.get_activity():
                goal = ReadingGoal.objects.get(goal_id=goal_id)
                UserRecord.objects.finish_goal(user=user)
                if goal.refund_to_user(user.wechat_id):
                    ReadingGoal.objects.delete_goal(goal_id)
                    return JsonResponse({'status': 200})
                else:
                    return JsonResponse({'status': 403})
'''
        else:
            return JsonResponse({'status': 404})
    except Exception:
        return HttpResponseNotFound
    else:
        return JsonResponse({'status': 200})
Ejemplo n.º 6
0
                running_goal_no_free[time_field])
        if reading_goal[time_field]:
            reading_goal[time_field] = dateutil.parser.parse(
                reading_goal[time_field])
        if sleeping_goal[time_field]:
            sleeping_goal[time_field] = dateutil.parser.parse(
                sleeping_goal[time_field])

    try:
        task = RunningGoal(activity_type='1', **running_goal_no_free)
        task.save()
        print("Create Running Goal...")
    except Exception as e:
        print(e)

    task = ReadingGoal(activity_type='2', **reading_goal)
    try:
        task.save()
        print("Create Reading Goal...")
    except Exception as e:
        print(e)

    task = SleepingGoal(activity_type='0', **sleeping_goal)
    try:
        task.save()
        print("Create Sleeping Goal...")
    except Exception as e:
        print(e)
    """
    for record_data in task_records:
        print('Creating task record - %s %s' % (task, record_data['record_time']))
Ejemplo n.º 7
0
def show_reading_goal(request, pk):
    from on.activities.reading.models import Comments, Reply

    user = request.session["user"]
    goal_id = pk

    read = ReadingGoal.objects.filter(goal_id=goal_id).filter(activity_type=ReadingGoal.get_activity()).first()
    readinginfo = BookInfo.objects.get_book_info(book_id=1)
    # user = UserInfo.objects.filter(user_id=user.user_id)[0]
    # user = UserInfo.objects.get(user_id=user.user_id)
    if read:
        if read.status == "SUCCESS" or read.status == "FAILED":
            return render(request, 'goal/finish.html',
                          {
                              'goal': read,
                              'goal_type': ReadingGoal.get_activity(),
                              "headimg": user.headimgurl
                          })
        elif read.status == "ACTIVE":
            # 天数.
            dates_inform = get_days(read, goal_id)
            state = ReadTime.objects.get_reading_state(user_id=user.user_id)
            time_range = ReadTime.objects.filter(user_id=user.user_id)[0]
            # 查询 Activity 相关的活动信息, 找到第一个符合类型要求且在进行中的活动
            app = Activity.objects.get_active_activity(activity_type=ReadingGoal.get_activity())
            person_goals = ReadingGoal.objects.filter(status="ACTIVE")[:5]
            persons = set()
            # TODO:FAKE
            # app = fake_data([app])[0]
            confirm = UserOrder.objects.filter(user_id=user.user_id, goal_id=goal_id)
            if confirm:
                is_no_confirm = confirm[0].is_no_confirm
            elif read.is_start == 1:
                is_no_confirm = 1
            else:
                is_no_confirm = None
            for person_goal in person_goals:
                persons.add(UserInfo.objects.get(user_id=person_goal.user_id))

            owen = Comments.objects.filter(user_id=user.user_id).order_by("-c_time")
            comment_obj = Comments.objects.filter(is_delete=0,is_top=1).order_by("-c_time")
            datas = []
            for comment in comment_obj:
                report = ReadingPunchReport.objects.filter(punch_id=comment.id,user_id=user.user_id)
                reply = Reply.objects.filter(other_id=comment.id).order_by('id')
                response = [{"content": i.r_content, "other_id": i.user_id, "nickname": i.get_user_message.nickname} for
                            i in reply] if len(reply) > 0 else ""
                is_no_report = 1 if len(report) > 0 else 0
                prise = ReadingPunchPraise.objects.filter(punch_id=comment.id,user_id=user.user_id)
                is_no_prise = 1 if len(prise) > 0 else 0
                ref = comment.voucher_ref.split(",") if len(comment.voucher_ref) > 0 else ""
                top = comment.is_top
                if top == 0:
                    datas.append({
                        "id": comment.id,
                        'user_id': comment.user_id,
                        "content": comment.content,
                        "c_time": comment.c_time,
                        "prise": comment.prise,
                        "report": comment.report,
                        "voucher_ref": ref,
                        "is_delete": comment.is_delete,
                        "is_top": comment.is_top,
                        "headimgurl": comment.get_some_message.headimgurl,
                        "nickname": comment.get_some_message.nickname,
                        "is_no_report": is_no_report,
                        "is_no_prise": is_no_prise,
                        "reply_data": response
                    })
                else:
                    datas = []
            return render(request, "goal/reading.html",
                          {
                              "WechatJSConfig": get_wechat_config(request),
                              "app": app,
                              "goal": read,
                              "datesinform": dates_inform,
                              "notice": UserAddress.objects.address_is_complete(user=user),
                              "persons": persons,
                              "book_id": read.book_id,
                              "is_start": read.is_start,
                              "readinginfo": readinginfo,
                              "state": state,
                              "time_range": timezone.now() - time_range.start_read,
                              "is_no_confirm": is_no_confirm,
                              "user_comments": owen,
                              "datas": datas,
                              "nickname": user.nickname
                          })
        else:
            app = Activity.objects.get_active_activity(activity_type=ReadingGoal.get_activity())
            # 用户头像
            person_goals = ReadingGoal.objects.filter(status="ACTIVE")[:5]
            persons = set()
            # TODO:FAKE
            for person_goal in person_goals:
                persons.add(UserInfo.objects.get(user_id=person_goal.user_id))
            context = {
                "WechatJSConfig": get_wechat_config(request),
                "readinginfo": readinginfo,
                "app": app,
                "balance": user.balance,
                "user_id":user.user_id
            }
            return render(request, "activity/reading.html", context)
    else:
        app = Activity.objects.get_active_activity(activity_type=ReadingGoal.get_activity())
        # 用户余额
        # 用户头像
        person_goals = ReadingGoal.objects.filter(status="ACTIVE")[:5]
        persons = set()
        # TODO:FAKE
        for person_goal in person_goals:
            persons.add(UserInfo.objects.get(user_id=person_goal.user_id))

        context = {
            "WechatJSConfig": get_wechat_config(request),
            "readinginfo": readinginfo,
            "app": app,
            "balance": user.balance
        }
        return render(request, "activity/reading.html", context)
Ejemplo n.º 8
0
def show_specific_activity(request, pk):
    user = request.session.get("user")

    activity = Activity.objects.get(activity_id=pk)
    # 余额
    balance = UserInfo.objects.get(user_id=user.user_id).balance
    # TODO:FakeDATA
    # activity = fake_data([activity])[0]
    # TODO
    if not settings.DEBUG:
        user = request.session['user']
        sub_models = get_son_models(Goal)
        for sub_model_key in sub_models:
            sub_model = sub_models[sub_model_key]
            goal = sub_model.objects.filter(user_id=user.user_id).filter(
                activity_type=activity.activity_type)
            if goal:
                goal = goal.first()
                if goal.status != "PENDING":
                    redirect_url = '/goal/{0}?activity_type={1}'.format(
                        goal.goal_id, activity.activity_type)
                    return HttpResponseRedirect(redirect_url)
                else:
                    pass
    else:
        user = request.session['user']
        sub_models = get_son_models(Goal)
        for sub_model_key in sub_models:
            sub_model = sub_models[sub_model_key]
            goal = sub_model.objects.filter(user_id=user.user_id).filter(
                activity_type=activity.activity_type)
            if goal:
                goal = goal.first()
                if goal.status != "PENDING":
                    redirect_url = '/goal/{0}?activity_type={1}'.format(
                        goal.goal_id, activity.activity_type)

                    return HttpResponseRedirect(redirect_url)

                else:
                    pass

    # 专门为读书设立的字段
    readinginfo = BookInfo.objects.get_book_info(book_id=1)
    person_goals = []
    if activity.activity_type == ReadingGoal.get_activity():
        person_goals = ReadingGoal.objects.filter(status="ACTIVE")[:5]
    elif activity.activity_type == SleepingGoal.get_activity():
        person_goals = SleepingGoal.objects.filter(status="ACTIVE")[:5]
    elif activity.activity_type == RunningGoal.get_activity():
        person_goals = RunningGoal.objects.filter(status="ACTIVE")[:5]
    elif activity.activity_type == WalkingGoal.get_activity():
        person_goals = WalkingGoal.objects.filter(status="ACTIVE")[:5]
    # 生成一个persons集合
    persons = set()
    for person_goal in person_goals:
        persons.add(UserInfo.objects.get(user_id=person_goal.user_id))
    record = Tutorial.objects.filter(user_id=user.user_id)
    times = record[0].times_in_read if record else None

    return render(
        request,
        'activity/{0}'.format(mappings[activity.activity_type]),
        {
            "app": activity,
            "readinginfo": readinginfo,
            "WechatJSConfig": get_wechat_config(request),
            "persons": persons,
            "DEBUG": settings.DEBUG,
            "balance": balance,
            "times": times,
            "user_id": user.user_id,
            # "user_comments": owen,
            "user": user
        })
Ejemplo n.º 9
0
def show_specific_activity(request, pk):
    user = request.session['user']
    print("当前登录的用户是{},用户id是:{}".format(user.nickname, user.user_id))
    activity = Activity.objects.get(activity_id=pk)
    # 余额
    balance = UserInfo.objects.get(user_id=user.user_id).balance
    # TODO:FakeDATA
    activity = fake_data([activity])[0]
    # TODO
    if not settings.DEBUG:
        user = request.session['user']
        sub_models = get_son_models(Goal)
        for sub_model_key in sub_models:
            sub_model = sub_models[sub_model_key]
            goal = sub_model.objects.filter(user_id=user.user_id).filter(
                activity_type=activity.activity_type)
            if goal:
                goal = goal.first()
                if goal.status != "PENDING":
                    redirect_url = '/goal/{0}?activity_type={1}'.format(
                        goal.goal_id, activity.activity_type)
                    return HttpResponseRedirect(redirect_url)
                else:
                    pass
    else:
        user = request.session['user']
        sub_models = get_son_models(Goal)
        for sub_model_key in sub_models:
            sub_model = sub_models[sub_model_key]
            goal = sub_model.objects.filter(user_id=user.user_id).filter(
                activity_type=activity.activity_type)
            if goal:
                goal = goal.first()

                if goal.status != "PENDING":
                    redirect_url = '/goal/{0}?activity_type={1}'.format(
                        goal.goal_id, activity.activity_type)

                    return HttpResponseRedirect(redirect_url)

                else:
                    pass

    # 专门为读书设立的字段
    readinginfo = {
        'title': '你的生命有什么可能',
        'intro':
        '本书探讨了以下问题:高竞争的工作、高不可攀的房价和房租、 拥挤的交通、糟糕的空气、不安全的食品……在竭尽全力才能生存的时代,年轻人如何追求自己的梦想?在这样的时代,我们的生命又有什么可能?如何才能越过现实和理想的鸿沟,找到和进入自己希望的人生?如何修炼自己在现实中活得更好的能力?如何在现实之中发展自己的兴趣?如何连接现实和理想?如何面对生命里的苦难、贫穷、不完美或者不公正?如何获得心灵的自由?',
        'imageurl': '/static/images/reading_book_demo.png',
        'price': 35,
        'return': 20,
        'guaranty': 30,
        'page': 315
    }
    if activity.activity_type == ReadingGoal.get_activity():
        person_goals = ReadingGoal.objects.filter(status="ACTIVE")[:5]
    elif activity.activity_type == SleepingGoal.get_activity():
        person_goals = SleepingGoal.objects.filter(status="ACTIVE")[:5]
    else:
        person_goals = RunningGoal.objects.filter(status="ACTIVE")[:5]
    # 生成一个persons集合
    persons = set()
    for person_goal in person_goals:
        persons.add(UserInfo.objects.get(user_id=person_goal.user_id))

    return render(
        request, 'activity/{0}'.format(mappings[activity.activity_type]), {
            "app": activity,
            "readinginfo": readinginfo,
            "WechatJSConfig": get_wechat_config(request),
            "persons": persons,
            "DEBUG": settings.DEBUG,
            "balance": balance
        })