Files
sim-server/app/main/api/internal/logic/admin_agent/AdminGetStatisticsOverviewLogic.go

133 lines
4.8 KiB
Go
Raw Normal View History

2026-02-08 16:19:37 +08:00
package admin_agent
import (
"context"
"time"
"sim-server/app/main/api/internal/svc"
"sim-server/app/main/api/internal/types"
"github.com/Masterminds/squirrel"
"github.com/zeromicro/go-zero/core/logx"
)
type AdminGetStatisticsOverviewLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewAdminGetStatisticsOverviewLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetStatisticsOverviewLogic {
return &AdminGetStatisticsOverviewLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *AdminGetStatisticsOverviewLogic) AdminGetStatisticsOverview() (resp *types.AdminGetStatisticsOverviewResp, err error) {
// Get current time for date filtering
now := time.Now()
todayStart := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
monthStart := time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, now.Location())
// 1. Total agents - count from agent table
totalAgents, err := l.svcCtx.AgentModel.FindCount(l.ctx, l.svcCtx.AgentModel.SelectBuilder(), "id")
if err != nil {
l.Errorf("Failed to count total agents: %v", err)
return nil, err
}
// 2. Today new agents - count agents created today
todayAgentsBuilder := l.svcCtx.AgentModel.SelectBuilder().Where(squirrel.GtOrEq{"create_time": todayStart})
todayNewAgents, err := l.svcCtx.AgentModel.FindCount(l.ctx, todayAgentsBuilder, "id")
if err != nil {
l.Errorf("Failed to count today new agents: %v", err)
return nil, err
}
// 3. Total orders - count from agent_order table
totalOrders, err := l.svcCtx.AgentOrderModel.FindCount(l.ctx, l.svcCtx.AgentOrderModel.SelectBuilder(), "id")
if err != nil {
l.Errorf("Failed to count total orders: %v", err)
return nil, err
}
// 4. Today orders - count orders created today
todayOrdersBuilder := l.svcCtx.AgentOrderModel.SelectBuilder().Where(squirrel.GtOrEq{"create_time": todayStart})
todayOrders, err := l.svcCtx.AgentOrderModel.FindCount(l.ctx, todayOrdersBuilder, "id")
if err != nil {
l.Errorf("Failed to count today orders: %v", err)
return nil, err
}
// 5. Total order amount - sum from agent_order table
totalOrderAmount, err := l.svcCtx.AgentOrderModel.FindSum(l.ctx, l.svcCtx.AgentOrderModel.SelectBuilder(), "order_amount")
if err != nil {
l.Errorf("Failed to sum total order amount: %v", err)
return nil, err
}
// 6. Today order amount - sum orders created today
todayOrderAmount, err := l.svcCtx.AgentOrderModel.FindSum(l.ctx, todayOrdersBuilder, "order_amount")
if err != nil {
l.Errorf("Failed to sum today order amount: %v", err)
return nil, err
}
// 7. Total commission - sum of all commission amounts
totalCommission, err := l.svcCtx.AgentCommissionModel.FindSum(l.ctx, l.svcCtx.AgentCommissionModel.SelectBuilder(), "amount")
if err != nil {
l.Errorf("Failed to sum total commission: %v", err)
return nil, err
}
// 8. Today commission - sum of today's commission
todayCommissionBuilder := l.svcCtx.AgentCommissionModel.SelectBuilder().Where(squirrel.GtOrEq{"create_time": todayStart})
todayCommission, err := l.svcCtx.AgentCommissionModel.FindSum(l.ctx, todayCommissionBuilder, "amount")
if err != nil {
l.Errorf("Failed to sum today commission: %v", err)
return nil, err
}
// 9. Pending withdraw - sum of withdraw records with status=0
pendingWithdrawBuilder := l.svcCtx.AgentWithdrawModel.SelectBuilder().Where(squirrel.Eq{"status": 0})
pendingWithdraw, err := l.svcCtx.AgentWithdrawModel.FindSum(l.ctx, pendingWithdrawBuilder, "withdraw_amount")
if err != nil {
l.Errorf("Failed to sum pending withdraw: %v", err)
return nil, err
}
// 10. Month order amount - sum of orders in current month
monthOrderAmountBuilder := l.svcCtx.AgentOrderModel.SelectBuilder().Where(squirrel.GtOrEq{"create_time": monthStart})
monthOrderAmount, err := l.svcCtx.AgentOrderModel.FindSum(l.ctx, monthOrderAmountBuilder, "order_amount")
if err != nil {
l.Errorf("Failed to sum month order amount: %v", err)
return nil, err
}
// 11. Month commission - sum of commission in current month
monthCommissionBuilder := l.svcCtx.AgentCommissionModel.SelectBuilder().Where(squirrel.GtOrEq{"create_time": monthStart})
monthCommission, err := l.svcCtx.AgentCommissionModel.FindSum(l.ctx, monthCommissionBuilder, "amount")
if err != nil {
l.Errorf("Failed to sum month commission: %v", err)
return nil, err
}
resp = &types.AdminGetStatisticsOverviewResp{
TotalAgents: totalAgents,
TodayNewAgents: todayNewAgents,
TotalOrders: totalOrders,
TodayOrders: todayOrders,
TotalOrderAmount: totalOrderAmount,
TodayOrderAmount: todayOrderAmount,
TotalCommission: totalCommission,
TodayCommission: todayCommission,
PendingWithdraw: pendingWithdraw,
MonthOrderAmount: monthOrderAmount,
MonthCommission: monthCommission,
}
return resp, nil
}