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
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 24 additions and 0 deletions

View File

@ -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
} }

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 {