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
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
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点, """
'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)
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
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})
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("跑步活动"))
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)
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)
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 })