예제 #1
0
파일: views.py 프로젝트: QQ304988350/on
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
예제 #2
0
def create_goal(request):
    print("开始创建活动")
    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 = decimal.Decimal(down_payment) / int(down_num)
        print("每次要扣除的金额{}".format(average), "底金次数是{}".format(down_num))
        print(average)
        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
        punch_day = 0

        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,
                    punch_day=punch_day)
                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,
                        punch_day=punch_day)
                    return JsonResponse({
                        'status': 200,
                        'goal': goal.goal_id,
                        "rem": rem
                    })
                else:
                    rem = 0
                    return JsonResponse({'status': 403, "rem": rem})
        else:
            pass
            return JsonResponse({"status": 200})
    else:
        return HttpResponseNotFound
예제 #3
0
from on.activities.running.models import Running_Finish_Save, RunCoefficient
from on.activities.reading.models import Read_Finish_Save
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点,
"""
예제 #4
0
        'down_payment': 30,
        'coefficient': 30,
        'goal_day': 15,
        'left_day': 14,
        'kilos_day': 5,
        'fin_all': 0,
        'bonus': 0,
        'user_id': user.user_id
    }

    for time_field in ['start_time', 'end_time']:
        if running_goal_free[time_field]:
            running_goal_free[time_field] = dateutil.parser.parse(
                running_goal_free[time_field])
        if running_goal_no_free[time_field]:
            running_goal_no_free[time_field] = dateutil.parser.parse(
                running_goal_no_free[time_field])

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

    try:
        task = RunningGoal(activity_type='1', **running_goal_no_free)
        task.save()
        print("Create Running Goal...")
    except Exception as e:
        print(e)
예제 #5
0
파일: views.py 프로젝트: QQ304988350/on
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
예제 #6
0
파일: views.py 프로젝트: QQ304988350/on
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})
예제 #7
0
def calc_bonus_job():
    print("Begin to calculate")

    time.sleep(1)
    app_logger.warning("跑步活动开始执行处理")
    # 计算goal_class的收益值
    all_pay = 0
    all_coffe = 0
    # 只有处于活动状态的目标才参与计算
    print(timezone.now())
    for goal in RunningGoal.objects.filter(status="ACTIVE"):
        print("开始计算需要每日金额分配")
        if DEBUG:
            pay, coffe = goal.check_run()
            print("------------+-------------------+--------------------------")
        else:
            pay, coffe = goal.check_run()
        print(pay, "需要被瓜分的金额")
        print(coffe, "每个人的系数")
        # 计算谁需要贡献出奖金分给其他人
        if pay != 0:
            app_logger.info("User:{0} Pay:{1:.2f} Goal:{2}".format(goal.user_id, pay, goal.goal_id))
        all_pay += decimal.Decimal(pay)

        all_coffe += coffe
    app_logger.info("本次扣除的总金{},总系数{}".format(all_pay,all_coffe))
    time.sleep(1)
    if all_pay > 0 and all_coffe > 0:
        print("判断瓜分金额跟总系数是否大大于零")
        average_pay = math.floor(
            decimal.Decimal(100) * (decimal.Decimal(0.996) * all_pay / all_coffe)) * decimal.Decimal(0.01)
        print("平均分配的金额数{}".format(average_pay))
        # 为该种活动类别下的用户分发奖金
        app_logger.info(
            "Profit:{0:.2f} Coffe:{1:.2f} Average:{3:.2f}".format(all_pay, all_coffe, "跑步活动", average_pay))
        for goal in RunningGoal.objects.all():
            print("给每个人分配金额:{}".format(decimal.Decimal(average_pay)))

            goal.earn_run_profit(decimal.Decimal(average_pay))
    else:
        print("此时,没有用户失败,都不需要付出金钱")
        # 重巡出当日打过卡的用户,首先要查询出所有正在参与的用户
        try:
            run_user = RunningGoal.objects.filter(status="ACTIVE")
            for goal in run_user:
                # 其次是要找出今天打了卡的用户
                run = RunningPunchRecord.objects.filter(goal_id=goal.goal_id)
                if run and run[0].record_time.strftime("%Y-%m-%d") == timezone.now().strftime("%Y-%m-%d"):
                    user_run = RunningGoal.objects.get(goal_id=goal.goal_id)
                    # 找出打了卡的用户的user_id跟系数
                    user = UserInfo.objects.get(user_id=user_run.user_id)
                    # 将用户的额外收益加上用户的系数乘以0.01
                    goal.extra_earn += user_run.coefficient * decimal.Decimal(0.01)
                    user.extra_money += user_run.coefficient * decimal.Decimal(0.01)
                    goal.save()
                    user.save()
                    print("给用户分配额外收益成功")
        except Exception as e:
            print("没有用户失败的情况下,给用户分配额外收益失败", e)
        # 查询擂主的目前押金
    # 更新活动的奖金池
    try:
        Activity.objects.update_bonus(RunningGoal.get_activity(), -all_pay)
        print("开始更新奖金池")
    except Exception:
        pass
    app_logger.warning("Activity {0} end ... calcbonus.py -> calc_bonus_job ".format("跑步活动"))
예제 #8
0
def show_running_goal(request, pk):
    ###开始
    user = request.session["user"]
    goal_id = pk
    goal = RunningGoal.objects.filter(goal_id=goal_id).filter(activity_type=RunningGoal.get_activity()).first()
    if goal:
        if goal.status != "ACTIVE":
            return render(request, 'goal/finish.html',
                          {
                              'goal': goal,
                              'goal_type': RunningGoal.get_activity(),
                                "headimg":user.headimgurl
                          })
        else:
            # 免签券数量查询
            nosign_ticket = UserTicket.objects.get_nosigned_tickets(goal_id=goal_id)
            # 天数
            dates_inform = get_days(goal)
            # 查询 Activity 相关的活动信息, 找到第一个符合类型要求且在进行中的活动
            app = Activity.objects.get_active_activity(activity_type=RunningGoal.get_activity())
            # TODO:FAKE
            app = fake_data([app])[0]
            # 查询 Activity 相关的头像信息
            person_goals = RunningGoal.objects.filter(status="ACTIVE")[:10]
            persons = set()
            for person_goal in person_goals:

                persons.add(UserInfo.objects.get(user_id=person_goal.user_id))
            # 随机查询24小时内存在的打卡记录,展示在本页面中
            # lastday, today = timezone.now() - timedelta(days=1), timezone.now()
            lastday = timezone.now() - timedelta(days=1)
            today = timezone.now()
            random_records = RunningPunchRecord.objects.filter(record_time__range=(lastday, today)).order_by(
                "-record_time")[:30]
            # activate_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
            # 获取邀请了多少好友
            num = UserInvite.objects.filter(user_id=request.session["user"].user_id).count()
            obj = RunningGoal.objects.filter(user_id=user.user_id,status="ACTIVE")[0]
            extra_earn = obj.extra_earn
            user_start_time = RunningGoal.objects.get(user_id=user.user_id).start_time
            a = user_start_time.strftime("%Y-%m-%d")
            user_end_time = (user_start_time + timedelta(days=1)).strftime("%Y-%m-%d")
            if len(RunningPunchRecord.objects.filter(goal_id=goal_id,record_time__range=(a,user_end_time)))>0:
                first_day_record = 1
            else:
                first_day_record = 0
            news = []
            for record in random_records:
                voucher_ref_list = record.voucher_ref.split(",")
                userinfo = UserInfo.objects.get(user_id=record.goal.user_id)
                document = record.document
                report = RunningPunchReport.objects.filter(punch_id=record.punch_id).filter(user_id=user.user_id)
                if report:
                    is_no_report = 1
                else:
                    is_no_report = 0
                praise = RunningPunchPraise.objects.filter(punch_id=record.punch_id).filter(user_id=user.user_id)
                if praise:
                    is_no_praise = 1
                else:
                    is_no_praise = 0
                record_time = record.record_time
                dis_day = "今日" if record_time.day == today.day else "昨日"
                dis_date = "%s %s:%02d" % (dis_day,
                                           record_time.hour,
                                           record_time.minute)
                news.append({
                    "headimage": userinfo.headimgurl,
                    "date": dis_date,
                    "distance": record.distance,
                    "praise": record.praise,
                    "report": record.report,
                    'reload': record.reload,

                    'is_no_report': is_no_report,
                    'is_no_praise': is_no_praise,
                    "name": userinfo.nickname,
                    "voucher_ref": voucher_ref_list,
                    "punch_id": record.punch_id,
                    "document": document,
                    'test': timezone.now(),
                })
            if app:
                return render(request, "goal/running.html",
                              {
                                  "WechatJSConfig": get_wechat_config(request),
                                  "app": app,
                                  "goal": goal,
                                  "invite_num": num,
                                  'nosign': nosign_ticket,
                                  "datesinform": dates_inform,
                                  "extra_earn": extra_earn,
                                  "persons": persons,
                                  "news": news,
                                  "first_day_record":first_day_record
                                  # "punch_id":punch_record
                              })
            else:
                return page_not_found(request)
    else:
        return page_not_found(request)
예제 #9
0
def show_running_goal(request, pk):
    # 开始
    user = request.session["user"]
    user_id = user.user_id
    goal_id = pk
    goal = RunningGoal.objects.filter(goal_id=goal_id).filter(
        activity_type=RunningGoal.get_activity()).first()
    if goal:
        if goal.status != "ACTIVE":
            return render(
                request, 'goal/finish.html', {
                    'goal': goal,
                    'goal_type': RunningGoal.get_activity(),
                    "headimg": user.headimgurl
                })
        else:
            # 免签券数量查询
            nosign_ticket = UserTicket.objects.get_nosigned_tickets(
                goal_id=goal_id)
            # 天数
            dates_inform = get_days(goal)
            # 查询 Activity 相关的活动信息, 找到第一个符合类型要求且在进行中的活动
            app = Activity.objects.get_active_activity(
                activity_type=RunningGoal.get_activity())
            # TODO:FAKE
            # app = fake_data([app])[0]
            # 查询 Activity 相关的头像信息
            person_goals = RunningGoal.objects.filter(status="ACTIVE")[:10]
            persons = set()
            for person_goal in person_goals:
                persons.add(UserInfo.objects.get(user_id=person_goal.user_id))
            # 随机查询24小时内存在的打卡记录,展示在本页面中
            # lastday, today = timezone.now() - timedelta(days=1), timezone.now()
            lastday = timezone.now() - timedelta(days=1)
            today = timezone.now()
            random_records = RunningPunchRecord.objects.filter(
                record_time__range=(lastday,
                                    today)).order_by("-record_time")[:20]
            # activate_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
            # 获取邀请了多少好友
            num = UserInvite.objects.filter(
                user_id=request.session["user"].user_id).count()

            obj = RunningGoal.objects.filter(user_id=user.user_id,
                                             status="ACTIVE")[0]
            new_coeff = 0
            default = 0
            extra_coeff = 0
            try:
                coeff = RunCoefficient.objects.get(user_id=user_id)
                default = coeff.default_coeff
                new_coeff = coeff.new_coeff
                if new_coeff:
                    extra_coeff = (new_coeff -
                                   default) / default * decimal.Decimal(100)
                    if extra_coeff > 0:
                        extra_coeff = "+%2d" % extra_coeff + "%"
                    elif extra_coeff < 0:
                        extra_coeff = "%2d" % extra_coeff + "%"
                    else:
                        pass
                else:
                    extra_coeff = ""
            except RunCoefficient.DoesNotExist as e:
                print(e)
            # 该活动的打卡天数
            punch_day = obj.punch_day
            # 该活动的额外收益
            extra_earn = obj.extra_earn
            a = goal.start_time.strftime("%Y-%m-%d")
            user_end_time = (goal.start_time +
                             timedelta(days=1)).strftime("%Y-%m-%d")
            if len(
                    RunningPunchRecord.objects.filter(
                        goal_id=goal_id,
                        record_time__range=(a, user_end_time))) > 0:
                first_day_record = 1
            else:
                first_day_record = 0
            news = []
            for record in random_records:
                voucher_ref_list = record.voucher_ref.split(",")
                userinfo = UserInfo.objects.get(user_id=record.goal.user_id)
                reply = RunReply.objects.filter(other_id=str(
                    record.punch_id).replace("-", "")).order_by('-id')
                response = [{
                    "content": i.r_content,
                    "user_id": i.user_id,
                    "nickname": i.get_user_message.nickname
                } for i in reply] if len(reply) > 0 else ""
                document = record.document
                report = RunningPunchReport.objects.filter(
                    punch_id=record.punch_id).filter(user_id=user.user_id)
                is_no_report = 1 if report else 0
                praise = RunningPunchPraise.objects.filter(
                    punch_id=record.punch_id).filter(user_id=user.user_id)
                is_no_praise = 1 if praise else 0
                record_time = record.record_time
                dis_day = "今日" if record_time.day == today.day else "昨日"
                dis_date = "%s %s:%02d" % (dis_day, record_time.hour,
                                           record_time.minute)
                news.append({
                    "headimage": userinfo.headimgurl,
                    "date": dis_date,
                    "distance": record.distance,
                    "praise": record.praise,
                    "report": record.report,
                    'reload': record.reload,
                    'is_no_report': is_no_report,
                    'is_no_praise': is_no_praise,
                    "name": userinfo.nickname,
                    "voucher_ref": voucher_ref_list,
                    "punch_id": record.punch_id,
                    "document": document,
                    'test': timezone.now(),
                    "reply_data": response
                })
            if app:
                return render(
                    request,
                    "goal/running.html",
                    {
                        "WechatJSConfig": get_wechat_config(request),
                        "app": app,
                        "goal": goal,
                        "invite_num": num,
                        'nosign': nosign_ticket,
                        "datesinform": dates_inform,
                        "extra_earn": extra_earn,
                        "persons": persons,
                        "news": news,
                        'nickname': user.nickname,
                        "punch_day": punch_day,
                        "first_day_record": first_day_record,
                        "default": default,
                        "extra_coeff": extra_coeff
                        # "punch_id":punch_record
                    })
            else:
                return page_not_found(request)
    else:
        return page_not_found(request)
예제 #10
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
        })