财务接口按俱乐部过滤,日收支只读daily_income_stat与daily_payout_stat
This commit is contained in:
@@ -6939,23 +6939,27 @@ class CaiwuView(APIView):
|
||||
today_start = datetime.combine(today, datetime.min.time())
|
||||
today_end = today_start + timedelta(days=1)
|
||||
|
||||
# 四个板子 + 累计:全平台 daily_income_stat / daily_payout_stat 按 date 汇总(不按俱乐部缩范围)
|
||||
today_inc = DailyIncomeStat.query.filter(date=today).aggregate(
|
||||
total_amount=Sum('total_amount'),
|
||||
total_count=Sum('total_count'),
|
||||
from jituan.services.club_context import (
|
||||
filter_club_char_field,
|
||||
filter_queryset_by_club,
|
||||
resolve_club_id_from_request,
|
||||
resolve_club_scope,
|
||||
)
|
||||
from jituan.services.daily_finance_display import (
|
||||
cumulative_income_payout,
|
||||
daily_stats_for_request,
|
||||
sum_payout_stat_for_date,
|
||||
today_income_for_dashboard,
|
||||
)
|
||||
today_income_amount = float(today_inc['total_amount'] or 0.00)
|
||||
today_income_count = int(today_inc['total_count'] or 0)
|
||||
|
||||
today_pay = DailyPayoutStat.query.filter(date=today).aggregate(
|
||||
total_amount=Sum('total_amount'),
|
||||
total_count=Sum('total_count'),
|
||||
)
|
||||
today_payout_amount = float(today_pay['total_amount'] or 0.00)
|
||||
today_payout_count = int(today_pay['total_count'] or 0)
|
||||
order_qs = filter_queryset_by_club(Order.query.all(), request, club_field='ClubID')
|
||||
|
||||
# 四个板子:按 Header 俱乐部范围读 daily_income_stat / daily_payout_stat
|
||||
today_income_amount, today_income_count = today_income_for_dashboard(today, request)
|
||||
today_payout_amount, today_payout_count = sum_payout_stat_for_date(today, request)
|
||||
|
||||
# 今日订单(已付款及之后的状态)
|
||||
today_orders = Order.query.filter(
|
||||
today_orders = order_qs.filter(
|
||||
CreateTime__gte=today_start,
|
||||
CreateTime__lt=today_end,
|
||||
Status__in=[1,2,3,4,5,6,7,8]
|
||||
@@ -6982,7 +6986,8 @@ class CaiwuView(APIView):
|
||||
today_tuikuan_amount = float(today_tuikuan.aggregate(total=Sum('Amount'))['total'] or 0.00)
|
||||
|
||||
# 今日充值(会员充值,leixing=1, zhuangtai=3)
|
||||
today_chongzhi = Czjilu.query.filter(
|
||||
cz_qs = filter_club_char_field(Czjilu.query.all(), request, field='club_id')
|
||||
today_chongzhi = cz_qs.filter(
|
||||
CreateTime__gte=today_start,
|
||||
CreateTime__lt=today_end,
|
||||
leixing=1,
|
||||
@@ -6991,8 +6996,9 @@ class CaiwuView(APIView):
|
||||
today_chongzhi_count = today_chongzhi.count()
|
||||
today_chongzhi_amount = float(today_chongzhi.aggregate(total=Sum('jine'))['total'] or 0.00)
|
||||
|
||||
# 今日新增会员:从购买记录表统计今天创建的用户(去重)
|
||||
new_huiyuan_user_ids = Huiyuangoumai.query.filter(
|
||||
# 今日新增会员
|
||||
hy_qs = filter_club_char_field(Huiyuangoumai.query.all(), request, field='club_id')
|
||||
new_huiyuan_user_ids = hy_qs.filter(
|
||||
CreateTime__gte=today_start,
|
||||
CreateTime__lt=today_end
|
||||
).values_list('yonghu_id', flat=True).distinct()
|
||||
@@ -7001,7 +7007,7 @@ class CaiwuView(APIView):
|
||||
# 新增会员充值总额(这些用户今天的会员充值金额)
|
||||
today_new_huiyuan_amount = 0.0
|
||||
if new_huiyuan_user_ids:
|
||||
amount_sum = Czjilu.query.filter(
|
||||
amount_sum = cz_qs.filter(
|
||||
CreateTime__gte=today_start,
|
||||
CreateTime__lt=today_end,
|
||||
yonghuid__in=new_huiyuan_user_ids,
|
||||
@@ -7016,49 +7022,17 @@ class CaiwuView(APIView):
|
||||
all_zuzhang_yue = float(UserZuzhang.query.aggregate(total=Sum('ketixian_jine'))['total'] or 0.00)
|
||||
all_shangjia_yue = float(UserShangjia.query.aggregate(total=Sum('yue'))['total'] or 0.00)
|
||||
|
||||
# 累计收支 / 利润:日统计表全平台各行相加
|
||||
total_income = float(DailyIncomeStat.query.aggregate(total=Sum('total_amount'))['total'] or 0.00)
|
||||
total_payout = float(DailyPayoutStat.query.aggregate(total=Sum('total_amount'))['total'] or 0.00)
|
||||
platform_profit = round(total_income - total_payout, 2)
|
||||
# 累计收支 / 利润(当前俱乐部视图范围)
|
||||
total_income, total_payout, platform_profit = cumulative_income_payout(request)
|
||||
|
||||
# 近30天每日收支明细(全平台)
|
||||
daily_stats = []
|
||||
since = today - timedelta(days=30)
|
||||
income_by_date = {
|
||||
str(row['date']): {
|
||||
'income': float(row['total_amount'] or 0),
|
||||
'income_count': int(row['total_count'] or 0),
|
||||
}
|
||||
for row in DailyIncomeStat.query.filter(date__gte=since).values('date').annotate(
|
||||
total_amount=Sum('total_amount'),
|
||||
total_count=Sum('total_count'),
|
||||
)
|
||||
}
|
||||
payout_by_date = {
|
||||
str(row['date']): float(row['total_amount'] or 0)
|
||||
for row in DailyPayoutStat.query.filter(date__gte=since).values('date').annotate(
|
||||
total_amount=Sum('total_amount'),
|
||||
)
|
||||
}
|
||||
all_dates = sorted(
|
||||
set(income_by_date.keys()) | set(payout_by_date.keys()),
|
||||
reverse=True,
|
||||
)[:30]
|
||||
for d in all_dates:
|
||||
inc = income_by_date.get(d, {'income': 0.0, 'income_count': 0})
|
||||
payout_amt = payout_by_date.get(d, 0.00)
|
||||
daily_stats.append({
|
||||
'date': d,
|
||||
'income': inc['income'],
|
||||
'income_count': inc['income_count'],
|
||||
'payout': payout_amt,
|
||||
'profit': round(inc['income'] - payout_amt, 2),
|
||||
})
|
||||
daily_stats = daily_stats_for_request(request, days=30)
|
||||
|
||||
return Response({
|
||||
'code': 0,
|
||||
'msg': 'ok',
|
||||
'data': {
|
||||
'club_id': resolve_club_id_from_request(request),
|
||||
'scope': resolve_club_scope(request),
|
||||
'today_income': round(today_income_amount, 2),
|
||||
'today_income_count': today_income_count,
|
||||
'today_payout': round(today_payout_amount, 2),
|
||||
|
||||
Reference in New Issue
Block a user