fix(api) fill renewal_order_users in user statistics (#40)

This commit is contained in:
sky-line-1
2025-07-06 15:39:42 +08:00
committed by GitHub
parent 4f49dea769
commit 626c3ef05c
2 changed files with 24 additions and 0 deletions
@@ -72,6 +72,15 @@ func (l *QueryUserStatisticsLogic) QueryUserStatistics() (resp *types.UserStatis
} else { } else {
resp.All.Register = allUserCount 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 return
} }
+15
View File
@@ -50,6 +50,7 @@ type customOrderLogicModel interface {
QueryTotalOrders(ctx context.Context) (OrdersTotal, error) QueryTotalOrders(ctx context.Context) (OrdersTotal, error)
QueryMonthlyUserCounts(ctx context.Context, date time.Time) (int64, int64, error) QueryMonthlyUserCounts(ctx context.Context, date time.Time) (int64, int64, error)
QueryDateUserCounts(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) 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 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) { func (m *customOrderModel) IsUserEligibleForNewOrder(ctx context.Context, userID int64) (bool, error) {
var count int64 var count int64
err := m.QueryNoCacheCtx(ctx, nil, func(conn *gorm.DB, _ interface{}) error { err := m.QueryNoCacheCtx(ctx, nil, func(conn *gorm.DB, _ interface{}) error {