diff --git a/internal/logic/admin/console/queryUserStatisticsLogic.go b/internal/logic/admin/console/queryUserStatisticsLogic.go index 03d2a83..1859c79 100644 --- a/internal/logic/admin/console/queryUserStatisticsLogic.go +++ b/internal/logic/admin/console/queryUserStatisticsLogic.go @@ -72,6 +72,15 @@ func (l *QueryUserStatisticsLogic) QueryUserStatistics() (resp *types.UserStatis } else { resp.All.Register = allUserCount } + + // query all user order counts + allNewOrderUsers, allRenewalOrderUsers, err := l.svcCtx.OrderModel.QueryTotalUserCounts(l.ctx) + if err != nil { + l.Errorw("[QueryUserStatisticsLogic] QueryTotalUserCounts error", logger.Field("error", err.Error())) + } else { + resp.All.NewOrderUsers = allNewOrderUsers + resp.All.RenewalOrderUsers = allRenewalOrderUsers + } return } diff --git a/internal/model/order/model.go b/internal/model/order/model.go index f752252..a463aca 100644 --- a/internal/model/order/model.go +++ b/internal/model/order/model.go @@ -50,6 +50,7 @@ type customOrderLogicModel interface { QueryTotalOrders(ctx context.Context) (OrdersTotal, error) QueryMonthlyUserCounts(ctx context.Context, date time.Time) (int64, int64, error) QueryDateUserCounts(ctx context.Context, date time.Time) (int64, int64, error) + QueryTotalUserCounts(ctx context.Context) (int64, int64, error) IsUserEligibleForNewOrder(ctx context.Context, userID int64) (bool, error) } @@ -202,6 +203,20 @@ func (m *customOrderModel) QueryDateUserCounts(ctx context.Context, date time.Ti return newUsers, renewalUsers, err } +func (m *customOrderModel) QueryTotalUserCounts(ctx context.Context) (int64, int64, error) { + var newUsers int64 + var renewalUsers int64 + err := m.QueryNoCacheCtx(ctx, nil, func(conn *gorm.DB, _ interface{}) error { + return conn.Model(&Order{}). + Where("status IN ? AND method != ?", []int64{2, 5}, "balance"). + Select( + "COUNT(DISTINCT CASE WHEN is_new = 1 THEN user_id END) as new_users, "+ + "COUNT(DISTINCT CASE WHEN is_new = 0 THEN user_id END) as renewal_users"). + Row().Scan(&newUsers, &renewalUsers) + }) + return newUsers, renewalUsers, err +} + func (m *customOrderModel) IsUserEligibleForNewOrder(ctx context.Context, userID int64) (bool, error) { var count int64 err := m.QueryNoCacheCtx(ctx, nil, func(conn *gorm.DB, _ interface{}) error {