def get(self): """获取俱乐部列表""" keyword = self.get_argument("kw", "") state = intval(self.get_argument("state", -1)) sort = intval(self.get_argument("sort", 0)) query = Team.select() # 这里限制的需要是 俱乐部创建者所在的位置进行过滤 而不是俱乐部本身的位置 is_restrict_by_areas = self.current_user.is_restrict_by_areas() if is_restrict_by_areas: query = query.join( User, on=(User.id == Team.owner_id) ).where( User.province << self.current_user.valid_manage_provinces ) if state in (0, 1): query = query.where(Team.state == state) if keyword: query = query.where(Team.name.contains(keyword)) query = query.order_by(Team.id.desc()) teams = self.paginate_query(query) self.render("team/list.html", teams=teams, )
def get(self): """获取俱乐部列表""" query = Team.select() query = self.filter_query(query) page = self.paginate_query(query) data = self.get_paginated_data(page=page, alias='teams', serializer=SimpleTeamSerializer) self.write(data)
def check_create_throttle(self): """ 一个用户只允许创建一个俱乐部 """ count = Team.select()\ .where(Team.owner_id == self.current_user.id)\ .count() if count == 0: return True raise ApiException(400, "已创建的俱乐部数量 [{0}] 超限".format(count))
def get(self, order_no): # order = TeamOrder.get_or_404(user=self.current_user, # order_no=order_no) try: order = TeamOrder.select(TeamOrder, Activity)\ .join(Activity, on=(TeamOrder.activity_id == Activity.id) .alias("activity"))\ .where(TeamOrder.user == self.current_user, TeamOrder.order_no == order_no) user = User.select().where(User.id == self.current_user.id) team = Team.select() order_pf = prefetch(order, user, team).get() except TeamOrder.DoesNotExist: raise ApiException(404, "订单不存在") self.write(SecureOrderSerializer(instance=order_pf).data)
def post(self): form = ApplyCashFrom(self.arguments) settings = TeamSettings.get_or_none(team=self.current_team.id) if form.validate() and self.validate_amount(form) and \ settings and settings.cash_ready(): with(self.db.transaction()): team = Team.select().where( Team.id == self.current_team.id ).for_update().get() cash_amount = decimalval(self.get_argument("amount")) TeamCashLog.create( team_id=team.id, amount=cash_amount, cash_account_type=settings.cash_type, cash_account=settings.cash_account, cash_name=settings.cash_username, order_no=TeamCashLog.get_new_order_no() ) # 将收入打到俱乐部账上 Team.update( credit=Team.credit - cash_amount, cashed_amount=Team.cashed_amount + cash_amount, updated=datetime.now() ).where( Team.id == team.id ).execute() self.redirect(self.reverse_url("club_cash_logs")) return self.render("orders/apply_cash.html", form=form, settings=settings )
def following_teams(cls, user_id): """获取用户关注的俱乐部列表""" query = Team.select(Team)\ .join(TeamFollower, on=(TeamFollower.team_id == Team.id))\ .where(TeamFollower.user_id == user_id) return query
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)