This commit is contained in:
@@ -1301,8 +1301,10 @@ func (s *StatisticsApplicationServiceImpl) getUserApiCallsStats(ctx context.Cont
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 获取今日调用次数
|
// 获取今日调用次数
|
||||||
today := time.Now().Truncate(24 * time.Hour)
|
loc, _ := time.LoadLocation("Asia/Shanghai") // 东八时区
|
||||||
tomorrow := today.Add(24 * time.Hour)
|
now := time.Now().In(loc)
|
||||||
|
today := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, loc) // 当天0点
|
||||||
|
tomorrow := today.AddDate(0, 0, 1) // 次日0点
|
||||||
todayCalls, err := s.getApiCallsCountByDateRange(ctx, userID, today, tomorrow)
|
todayCalls, err := s.getApiCallsCountByDateRange(ctx, userID, today, tomorrow)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Error("获取今日API调用次数失败", zap.String("user_id", userID), zap.Error(err))
|
s.logger.Error("获取今日API调用次数失败", zap.String("user_id", userID), zap.Error(err))
|
||||||
@@ -1356,8 +1358,10 @@ func (s *StatisticsApplicationServiceImpl) getUserConsumptionStats(ctx context.C
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 获取今日消费金额
|
// 获取今日消费金额
|
||||||
today := time.Now().Truncate(24 * time.Hour)
|
loc, _ := time.LoadLocation("Asia/Shanghai") // 东八时区
|
||||||
tomorrow := today.Add(24 * time.Hour)
|
now := time.Now().In(loc)
|
||||||
|
today := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, loc) // 当天0点
|
||||||
|
tomorrow := today.AddDate(0, 0, 1) // 次日0点
|
||||||
todayAmount, err := s.getWalletTransactionsByDateRange(ctx, userID, today, tomorrow)
|
todayAmount, err := s.getWalletTransactionsByDateRange(ctx, userID, today, tomorrow)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Error("获取今日消费金额失败", zap.String("user_id", userID), zap.Error(err))
|
s.logger.Error("获取今日消费金额失败", zap.String("user_id", userID), zap.Error(err))
|
||||||
@@ -1411,8 +1415,10 @@ func (s *StatisticsApplicationServiceImpl) getUserRechargeStats(ctx context.Cont
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 获取今日充值金额
|
// 获取今日充值金额
|
||||||
today := time.Now().Truncate(24 * time.Hour)
|
loc, _ := time.LoadLocation("Asia/Shanghai") // 东八时区
|
||||||
tomorrow := today.Add(24 * time.Hour)
|
now := time.Now().In(loc)
|
||||||
|
today := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, loc) // 当天0点
|
||||||
|
tomorrow := today.AddDate(0, 0, 1) // 次日0点
|
||||||
todayAmount, err := s.getRechargeRecordsByDateRange(ctx, userID, today, tomorrow)
|
todayAmount, err := s.getRechargeRecordsByDateRange(ctx, userID, today, tomorrow)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Error("获取今日充值金额失败", zap.String("user_id", userID), zap.Error(err))
|
s.logger.Error("获取今日充值金额失败", zap.String("user_id", userID), zap.Error(err))
|
||||||
@@ -1682,13 +1688,13 @@ func (s *StatisticsApplicationServiceImpl) getCertificationStats(ctx context.Con
|
|||||||
successRate = float64(userStats.CertifiedUsers) / float64(userStats.TotalUsers)
|
successRate = float64(userStats.CertifiedUsers) / float64(userStats.TotalUsers)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 根据时间范围获取趋势数据
|
// 根据时间范围获取认证趋势数据(基于is_certified字段)
|
||||||
var trendData []map[string]interface{}
|
var trendData []map[string]interface{}
|
||||||
if !startTime.IsZero() && !endTime.IsZero() {
|
if !startTime.IsZero() && !endTime.IsZero() {
|
||||||
if period == "day" {
|
if period == "day" {
|
||||||
trendData, err = s.userRepo.GetSystemDailyUserStats(ctx, startTime, endTime)
|
trendData, err = s.userRepo.GetSystemDailyCertificationStats(ctx, startTime, endTime)
|
||||||
} else if period == "month" {
|
} else if period == "month" {
|
||||||
trendData, err = s.userRepo.GetSystemMonthlyUserStats(ctx, startTime, endTime)
|
trendData, err = s.userRepo.GetSystemMonthlyCertificationStats(ctx, startTime, endTime)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Error("获取认证趋势数据失败", zap.Error(err))
|
s.logger.Error("获取认证趋势数据失败", zap.Error(err))
|
||||||
@@ -1698,16 +1704,35 @@ func (s *StatisticsApplicationServiceImpl) getCertificationStats(ctx context.Con
|
|||||||
// 默认获取最近7天的数据
|
// 默认获取最近7天的数据
|
||||||
endDate := time.Now()
|
endDate := time.Now()
|
||||||
startDate := endDate.AddDate(0, 0, -7)
|
startDate := endDate.AddDate(0, 0, -7)
|
||||||
trendData, err = s.userRepo.GetSystemDailyUserStats(ctx, startDate, endDate)
|
trendData, err = s.userRepo.GetSystemDailyCertificationStats(ctx, startDate, endDate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Error("获取认证每日趋势失败", zap.Error(err))
|
s.logger.Error("获取认证每日趋势失败", zap.Error(err))
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获取今日认证用户数(基于is_certified字段,东八时区)
|
||||||
|
loc, _ := time.LoadLocation("Asia/Shanghai") // 东八时区
|
||||||
|
now := time.Now().In(loc)
|
||||||
|
today := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, loc) // 当天0点
|
||||||
|
tomorrow := today.AddDate(0, 0, 1) // 次日0点
|
||||||
|
|
||||||
|
var certifiedToday int64
|
||||||
|
todayCertStats, err := s.userRepo.GetSystemDailyCertificationStats(ctx, today, tomorrow)
|
||||||
|
if err == nil && len(todayCertStats) > 0 {
|
||||||
|
// 累加今日所有认证用户数
|
||||||
|
for _, stat := range todayCertStats {
|
||||||
|
if count, ok := stat["count"].(int64); ok {
|
||||||
|
certifiedToday += count
|
||||||
|
} else if count, ok := stat["count"].(int); ok {
|
||||||
|
certifiedToday += int64(count)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
stats := map[string]interface{}{
|
stats := map[string]interface{}{
|
||||||
"total_certified": userStats.CertifiedUsers,
|
"total_certified": userStats.CertifiedUsers,
|
||||||
"certified_today": userStats.TodayRegistrations, // 今日注册的用户
|
"certified_today": certifiedToday, // 今日认证的用户数(基于is_certified字段)
|
||||||
"success_rate": successRate,
|
"success_rate": successRate,
|
||||||
"daily_trend": trendData,
|
"daily_trend": trendData,
|
||||||
}
|
}
|
||||||
@@ -1723,9 +1748,11 @@ func (s *StatisticsApplicationServiceImpl) getSystemApiCallStats(ctx context.Con
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取今日API调用次数
|
// 获取今日API调用次数(东八时区)
|
||||||
today := time.Now().Truncate(24 * time.Hour)
|
loc, _ := time.LoadLocation("Asia/Shanghai") // 东八时区
|
||||||
tomorrow := today.Add(24 * time.Hour)
|
now := time.Now().In(loc)
|
||||||
|
today := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, loc) // 当天0点
|
||||||
|
tomorrow := today.AddDate(0, 0, 1) // 次日0点
|
||||||
todayCalls, err := s.apiCallRepo.GetSystemCallsByDateRange(ctx, today, tomorrow)
|
todayCalls, err := s.apiCallRepo.GetSystemCallsByDateRange(ctx, today, tomorrow)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Error("获取今日API调用次数失败", zap.Error(err))
|
s.logger.Error("获取今日API调用次数失败", zap.Error(err))
|
||||||
@@ -1780,8 +1807,11 @@ func (s *StatisticsApplicationServiceImpl) getSystemFinanceStats(ctx context.Con
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 获取今日消费金额
|
// 获取今日消费金额
|
||||||
today := time.Now().Truncate(24 * time.Hour)
|
loc, _ := time.LoadLocation("Asia/Shanghai") // 东八时区
|
||||||
tomorrow := today.Add(24 * time.Hour)
|
now := time.Now().In(loc)
|
||||||
|
today := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, loc) // 当天0点
|
||||||
|
tomorrow := today.AddDate(0, 0, 1) // 次日0点
|
||||||
|
|
||||||
todayConsumption, err := s.walletTransactionRepo.GetSystemAmountByDateRange(ctx, today, tomorrow)
|
todayConsumption, err := s.walletTransactionRepo.GetSystemAmountByDateRange(ctx, today, tomorrow)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Error("获取今日消费金额失败", zap.Error(err))
|
s.logger.Error("获取今日消费金额失败", zap.Error(err))
|
||||||
@@ -2359,8 +2389,10 @@ func (s *StatisticsApplicationServiceImpl) AdminGetConsumptionDomainStatistics(c
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 获取今日消费金额
|
// 获取今日消费金额
|
||||||
today := time.Now().Truncate(24 * time.Hour)
|
loc, _ := time.LoadLocation("Asia/Shanghai") // 东八时区
|
||||||
tomorrow := today.Add(24 * time.Hour)
|
now := time.Now().In(loc)
|
||||||
|
today := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, loc) // 当天0点
|
||||||
|
tomorrow := today.AddDate(0, 0, 1) // 次日0点
|
||||||
todayConsumption, err := s.walletTransactionRepo.GetSystemAmountByDateRange(ctx, today, tomorrow)
|
todayConsumption, err := s.walletTransactionRepo.GetSystemAmountByDateRange(ctx, today, tomorrow)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Error("获取今日消费金额失败", zap.Error(err))
|
s.logger.Error("获取今日消费金额失败", zap.Error(err))
|
||||||
@@ -2459,8 +2491,10 @@ func (s *StatisticsApplicationServiceImpl) AdminGetRechargeDomainStatistics(ctx
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 获取今日充值金额
|
// 获取今日充值金额
|
||||||
today := time.Now().Truncate(24 * time.Hour)
|
loc, _ := time.LoadLocation("Asia/Shanghai") // 东八时区
|
||||||
tomorrow := today.Add(24 * time.Hour)
|
now := time.Now().In(loc)
|
||||||
|
today := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, loc) // 当天0点
|
||||||
|
tomorrow := today.AddDate(0, 0, 1) // 次日0点
|
||||||
todayRecharge, err := s.rechargeRecordRepo.GetSystemAmountByDateRange(ctx, today, tomorrow)
|
todayRecharge, err := s.rechargeRecordRepo.GetSystemAmountByDateRange(ctx, today, tomorrow)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Error("获取今日充值金额失败", zap.Error(err))
|
s.logger.Error("获取今日充值金额失败", zap.Error(err))
|
||||||
|
|||||||
@@ -551,7 +551,7 @@ func (s *FormConfigServiceImpl) generateDescription(jsonTag string, validation s
|
|||||||
"return_type": "返回类型:1-专业和学校名称数据返回编码形式(默认);2-专业和学校名称数据返回中文名称",
|
"return_type": "返回类型:1-专业和学校名称数据返回编码形式(默认);2-专业和学校名称数据返回中文名称",
|
||||||
"photo_data": "人脸图片(必填):base64编码的图片数据,仅支持JPG、BMP、PNG三种格式",
|
"photo_data": "人脸图片(必填):base64编码的图片数据,仅支持JPG、BMP、PNG三种格式",
|
||||||
"owner_type": "企业主类型编码:1-法定代表人;2-主要人员;3-自然人股东;4-法定代表人及自然人股东;5-其他",
|
"owner_type": "企业主类型编码:1-法定代表人;2-主要人员;3-自然人股东;4-法定代表人及自然人股东;5-其他",
|
||||||
"type": "查询类型:per-人员,ent-企业 1",
|
"type": "查询类型:per-人员,ent-企业 目前只能选择企业 ",
|
||||||
"query_reason_id": "查询原因ID:1-授信审批;2-贷中管理;3-贷后管理;4-异议处理;5-担保查询;6-租赁资质审查;7-融资租赁审批;8-借贷撮合查询;9-保险审批;10-资质审核;11-风控审核;12-企业背调",
|
"query_reason_id": "查询原因ID:1-授信审批;2-贷中管理;3-贷后管理;4-异议处理;5-担保查询;6-租赁资质审查;7-融资租赁审批;8-借贷撮合查询;9-保险审批;10-资质审核;11-风控审核;12-企业背调",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,31 +26,25 @@ func ProcessQYGL2S0WRequest(ctx context.Context, params []byte, deps *processors
|
|||||||
var nameValue string
|
var nameValue string
|
||||||
if paramsDto.Type == "per" {
|
if paramsDto.Type == "per" {
|
||||||
// 个人查询:idCardNum 必填
|
// 个人查询:idCardNum 必填
|
||||||
fmt.Print("个人")
|
|
||||||
nameValue = paramsDto.Name
|
nameValue = paramsDto.Name
|
||||||
fmt.Println("nameValue", nameValue)
|
|
||||||
if paramsDto.IDCard == "" {
|
if paramsDto.IDCard == "" {
|
||||||
fmt.Print("个人身份证件号不能为空")
|
fmt.Print("个人身份证件号不能为空")
|
||||||
return nil, fmt.Errorf("%s: %w", processors.ErrInvalidParam, errors.New("当失信被执行人类型为个人时,身份证件号不能为空"))
|
return nil, fmt.Errorf("%s: %w", processors.ErrInvalidParam, errors.New("当失信被执行人类型为个人时,身份证件号不能为空"))
|
||||||
|
|
||||||
}
|
}
|
||||||
} else if paramsDto.Type == "ent" {
|
} else if paramsDto.Type == "ent" {
|
||||||
// 企业查询:name 和 entMark 两者必填其一
|
// 企业查询:name 和 entMark 两者必填其一
|
||||||
|
nameValue = paramsDto.EntName
|
||||||
if paramsDto.EntName == "" && paramsDto.EntCode == "" {
|
if paramsDto.EntName == "" && paramsDto.EntCode == "" {
|
||||||
return nil, fmt.Errorf("%s: %w", processors.ErrInvalidParam, errors.New("当查询为企业时,企业名称和企业标识统一代码注册号两者必填其一"))
|
return nil, fmt.Errorf("%s: %w", processors.ErrInvalidParam, errors.New("当查询为企业时,企业名称和企业标识统一代码注册号两者必填其一"))
|
||||||
|
} // 确定使用哪个值作为 name
|
||||||
|
if paramsDto.EntName != "" {
|
||||||
|
nameValue = paramsDto.EntName
|
||||||
|
} else {
|
||||||
|
nameValue = paramsDto.EntCode
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// 确定使用哪个值作为 name
|
|
||||||
if paramsDto.Type == "ent" && paramsDto.EntName != "" {
|
|
||||||
nameValue = paramsDto.EntName
|
|
||||||
} else {
|
|
||||||
nameValue = paramsDto.EntCode
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("dto2s0w", paramsDto)
|
fmt.Println("dto2s0w", paramsDto)
|
||||||
|
|
||||||
// 构建请求数据(不传的参数也需要添加,值为空字符串)
|
// 构建请求数据(不传的参数也需要添加,值为空字符串)
|
||||||
reqData := map[string]interface{}{
|
reqData := map[string]interface{}{
|
||||||
"idCardNum": paramsDto.IDCard,
|
"idCardNum": paramsDto.IDCard,
|
||||||
|
|||||||
@@ -54,6 +54,8 @@ type UserRepository interface {
|
|||||||
GetSystemUserStatsByDateRange(ctx context.Context, startDate, endDate time.Time) (*UserStats, error)
|
GetSystemUserStatsByDateRange(ctx context.Context, startDate, endDate time.Time) (*UserStats, error)
|
||||||
GetSystemDailyUserStats(ctx context.Context, startDate, endDate time.Time) ([]map[string]interface{}, error)
|
GetSystemDailyUserStats(ctx context.Context, startDate, endDate time.Time) ([]map[string]interface{}, error)
|
||||||
GetSystemMonthlyUserStats(ctx context.Context, startDate, endDate time.Time) ([]map[string]interface{}, error)
|
GetSystemMonthlyUserStats(ctx context.Context, startDate, endDate time.Time) ([]map[string]interface{}, error)
|
||||||
|
GetSystemDailyCertificationStats(ctx context.Context, startDate, endDate time.Time) ([]map[string]interface{}, error)
|
||||||
|
GetSystemMonthlyCertificationStats(ctx context.Context, startDate, endDate time.Time) ([]map[string]interface{}, error)
|
||||||
|
|
||||||
// 排行榜查询方法
|
// 排行榜查询方法
|
||||||
GetUserCallRankingByCalls(ctx context.Context, period string, limit int) ([]map[string]interface{}, error)
|
GetUserCallRankingByCalls(ctx context.Context, period string, limit int) ([]map[string]interface{}, error)
|
||||||
|
|||||||
@@ -458,6 +458,54 @@ func (r *GormUserRepository) GetSystemMonthlyUserStats(ctx context.Context, star
|
|||||||
return results, nil
|
return results, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetSystemDailyCertificationStats 获取系统每日认证用户统计(基于is_certified字段)
|
||||||
|
func (r *GormUserRepository) GetSystemDailyCertificationStats(ctx context.Context, startDate, endDate time.Time) ([]map[string]interface{}, error) {
|
||||||
|
var results []map[string]interface{}
|
||||||
|
|
||||||
|
sql := `
|
||||||
|
SELECT
|
||||||
|
DATE(updated_at) as date,
|
||||||
|
COUNT(*) as count
|
||||||
|
FROM users
|
||||||
|
WHERE is_certified = true
|
||||||
|
AND DATE(updated_at) >= $1
|
||||||
|
AND DATE(updated_at) <= $2
|
||||||
|
GROUP BY DATE(updated_at)
|
||||||
|
ORDER BY date ASC
|
||||||
|
`
|
||||||
|
|
||||||
|
err := r.GetDB(ctx).Raw(sql, startDate.Format("2006-01-02"), endDate.Format("2006-01-02")).Scan(&results).Error
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return results, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetSystemMonthlyCertificationStats 获取系统每月认证用户统计(基于is_certified字段)
|
||||||
|
func (r *GormUserRepository) GetSystemMonthlyCertificationStats(ctx context.Context, startDate, endDate time.Time) ([]map[string]interface{}, error) {
|
||||||
|
var results []map[string]interface{}
|
||||||
|
|
||||||
|
sql := `
|
||||||
|
SELECT
|
||||||
|
TO_CHAR(updated_at, 'YYYY-MM') as month,
|
||||||
|
COUNT(*) as count
|
||||||
|
FROM users
|
||||||
|
WHERE is_certified = true
|
||||||
|
AND updated_at >= $1
|
||||||
|
AND updated_at <= $2
|
||||||
|
GROUP BY TO_CHAR(updated_at, 'YYYY-MM')
|
||||||
|
ORDER BY month ASC
|
||||||
|
`
|
||||||
|
|
||||||
|
err := r.GetDB(ctx).Raw(sql, startDate, endDate).Scan(&results).Error
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return results, nil
|
||||||
|
}
|
||||||
|
|
||||||
// GetUserCallRankingByCalls 按调用次数获取用户排行
|
// GetUserCallRankingByCalls 按调用次数获取用户排行
|
||||||
func (r *GormUserRepository) GetUserCallRankingByCalls(ctx context.Context, period string, limit int) ([]map[string]interface{}, error) {
|
func (r *GormUserRepository) GetUserCallRankingByCalls(ctx context.Context, period string, limit int) ([]map[string]interface{}, error) {
|
||||||
var sql string
|
var sql string
|
||||||
|
|||||||
Reference in New Issue
Block a user