def patch(self, activity_id): """ 修改活动信息 Args: activity_id: Returns: """ activity = Activity.get_or_404(id=activity_id) form = self.validated_arguments self.has_patch_permission(activity) Activity.update(**form).where(Activity.id == activity_id).execute() updated = Activity.get_or_404(id=activity_id) self.write(ActivitySerializer(updated).data)
def get(self, activity_id, member_id): activity = Activity.get_or_404(id=activity_id) self.has_read_permission(activity) member = ActivityMember.get_or_404(id=member_id) self.write(InsecureActivityMemberSerializer(member).data)
def cancel_activity(activity_id, cancel_reason=""): """取消活动 1. 取消活动后需要通知用户活动取消,已付款用户将退款 2. 已结算活动不能取消 """ activity = Activity.get_or_404(id=activity_id) if activity.state == Activity.ActivityState.finished: raise ArgumentError(400, "已结束活动不能取消") members = ActivityMember.select().where( ActivityMember.activity == activity_id) with app.db.transaction() as txn: for member in members: member.refund("活动取消") # 修改场次状态为取消 Activity.update(state=Activity.ActivityState.cancelled, cancelled=datetime.now(), cancel_reason=cancel_reason, online_paid_amount=Decimal(0), credit_paid_amount=Decimal(0), cash_paid_amount=Decimal(0), free_times_amount=Decimal(0)).where( Activity.id == activity.id).execute()
def get(self, activity_id): activity = Activity.get_or_404(id=activity_id) form = CreateActivityFrom(obj=activity, team=self.current_team) self.render("activity/edit.html", form=form, cities=ChinaCity.get_cities())
def get(self, activity_id, *args, **kwargs): activity = Activity.get_or_404(id=activity_id) if not Activity.is_member(activity.id, user_id=self.current_user): raise ApiException(400, '未参加活动, 不用退出') self.can_leave(activity) activity.leave(user=self.current_user) self.set_status(204)
def get(self, activity_id): """ 获取活动详情 Args: activity_id: 活动 ID """ activity = Activity.get_or_404(id=activity_id) serializer = ActivitySerializer(instance=activity) self.write(serializer.data)
def gen_next_activity(activity_id): """ 生成下期活动 """ if Activity.select().where(Activity.parent_id == activity_id).exists(): logging.debug("已经存在") return activity = Activity.get_or_404(id=activity_id) # 时间相关都顺延一周 delta = timedelta(days=7) if activity.repeat_end and \ datetime.now() + delta > activity.repeat_end: logging.debug("活动已经结束自动循环") return activity = copy.copy(activity) activity.id = None activity.members_count = 0 activity.comments_count = 0 activity.recommend_time = 0 activity.recommend_region = 0 if activity.join_start: activity.join_start += delta if activity.join_end: activity.join_end += delta activity.cancelled = None activity.cancel_reason = "" activity.finished = None activity.start_time += delta activity.end_time += delta activity.online_paid_amount = 0 activity.credit_paid_amount = 0 activity.cash_paid_amount = 0 activity.free_times_amount = 0 activity.created = datetime.now() activity.updated = datetime.now() activity.state = Activity.ActivityState.opening activity.parent_id = activity_id activity.save() # 更新俱乐部活动数 Team.update_activities_count(activity.team_id)
def get(self, activity_id): activity = Activity.get_or_404(id=activity_id) members = ActivityMember.select( ActivityMember, TeamOrder, User ).join( User, on=(ActivityMember.user == User.id).alias("user") ).switch( ActivityMember ).join( TeamOrder, join_type=JOIN_LEFT_OUTER, on=(TeamOrder.id == ActivityMember.order_id).alias("order") ).where( ActivityMember.activity == activity ) activity.total_amount = ActivityMember.select( fn.SUM(ActivityMember.total_fee) ).where( ActivityMember.payment_state << (TeamOrder.OrderState.TRADE_BUYER_PAID, TeamOrder.OrderState.TRADE_FINISHED), ActivityMember.activity == activity ).scalar() or 0 members = self.paginate_query(members) activity.members_count = ActivityMember.select( fn.SUM(ActivityMember.users_count) ).where( ActivityMember.state == ActivityMember.ActivityMemberState.confirmed, ActivityMember.activity == activity ).scalar() or 0 self.render("activity/members.html", activity=activity, members=members)
def post(self, activity_id): activity = Activity.get_or_404(id=activity_id) form = CreateActivityFrom(self.arguments, team=self.current_team) if form.validate(): form.populate_obj(activity) need_fields = self.get_arguments("need_fields") for field in need_fields: setattr(activity, field, True) geocode = yield self.get_geocode(activity.city, activity.address) if geocode.get("geocodes", []): location = geocode['geocodes'][0]['location'].split(",") activity.lat = location[1] activity.lng = location[0] activity.geohash = geohash.encode(float(location[1]), float(location[0])) if activity.repeat_type == "week": activity.week_day = activity.start_time.weekday() + 1 elif activity.repeat_type == "month": activity.month_day = activity.start_time.day activity.updated = datetime.now() activity.save() self.redirect(self.reverse_url("club_activity_list")) return province = self.get_argument("province", None) if province: form.city.choices = ChinaCity.get_cities(province) self.render("activity/new.html", form=form, cities=ChinaCity.get_cities())
def finish_activity(activity_id): """结算活动场次 1. 将用户在线支付费用转到俱乐部账户 2. 标记场次和订单状态为完成 3. 记录俱乐部账户变化 """ activity = Activity.get_or_404(id=activity_id) if activity.end_time > datetime.now(): raise Exception("活动场次未结束") if activity.state == Activity.ActivityState.cancelled: raise Exception("活动场次已取消") if activity.state == Activity.ActivityState.finished: raise Exception("活动场次已结算") # 计算在线支付完成交易的总额 online_paid_amount = TeamOrder.select(fn.SUM(TeamOrder.payment_fee)).where( TeamOrder.activity_id == activity_id, TeamOrder.state >= TeamOrder.OrderState.TRADE_BUYER_PAID.value, TeamOrder.refund_state == TeamOrder.OrderRefundState.NO_REFUND, TeamOrder.payment_method << TeamOrder.ONLINE_PAYMENT_METHODS).scalar() or 0 # 计算余额支付完成交易的总额 credit_paid_amount = TeamOrder.select(fn.SUM(TeamOrder.credit_fee)).where( TeamOrder.activity_id == activity_id, TeamOrder.state >= TeamOrder.OrderState.TRADE_BUYER_PAID.value).scalar() or 0 # 使用次数 free_times_amount = ActivityMember.select(fn.SUM( ActivityMember.free_times)).where( ActivityMember.state == ActivityMember.ActivityMemberState.confirmed).scalar() or 0 # online_paid_amount= DecimalField(default=Decimal(0), verbose_name="在线支付收入") # credit_paid_amount= DecimalField(default=Decimal(0), verbose_name="余额支付收入") # cash_paid_amount= DecimalField(default=Decimal(0), verbose_name="现金支付收入") # free_times_amount = IntegerField(default=0, verbose_name="次卡支付数量") with app.db.transaction() as txn: team = Team.select().where( Team.id == activity.team.id).for_update().get() # 将收入打到俱乐部账上 Team.update( credit=Team.credit + online_paid_amount, total_receipts=Team.total_receipts + online_paid_amount, updated=datetime.now()).where(Team.id == team.id).execute() # 将订单修改状态为已完成 TeamOrder.update( state=TeamOrder.OrderState.TRADE_FINISHED.value, finished=datetime.now()).where( TeamOrder.activity_id == activity_id, TeamOrder.state == TeamOrder.OrderState.TRADE_BUYER_PAID.value, TeamOrder.refund_state == TeamOrder.OrderRefundState.NO_REFUND.value).execute() # 修改场次状态为已结算 Activity.update(state=Activity.ActivityState.finished, finished=datetime.now(), online_paid_amount=online_paid_amount, credit_paid_amount=credit_paid_amount, free_times_amount=free_times_amount).where( Activity.id == activity_id).execute() # 记录俱乐部账户变更 TeamAccountLog.create(team_id=team.id, credit_change=online_paid_amount, change_type=0, credit_before=team.credit, credit_after=team.credit + online_paid_amount, note="活动结算:%s(%s)" % (activity.title, activity.start_time), activity_id=activity_id, operator_id=0) # 生成下期活动 gen_next_activity(activity_id)
def get(self, activity_id): activity = Activity.get_or_404(id=activity_id) self.render("activity/detail.html", activity=activity)
def post(self, activity_id, ): activity = Activity.get_or_404(id=activity_id)