This commit is contained in:
2025-07-28 01:46:39 +08:00
parent b03129667a
commit 357639462a
219 changed files with 21634 additions and 8138 deletions

View File

@@ -123,6 +123,15 @@ func (r *GormCertificationQueryRepository) Exists(ctx context.Context, id string
return r.ExistsEntity(ctx, id, &entities.Certification{})
}
func (r *GormCertificationQueryRepository) ExistsByUserID(ctx context.Context, userID string) (bool, error) {
var count int64
err := r.GetDB(ctx).Model(&entities.Certification{}).Where("user_id = ?", userID).Count(&count).Error
if err != nil {
return false, fmt.Errorf("查询用户认证是否存在失败: %w", err)
}
return count > 0, nil
}
// ================ 列表查询 ================
// List 分页列表查询
@@ -278,12 +287,12 @@ func (r *GormCertificationQueryRepository) FindByEsignFlowID(ctx context.Context
func (r *GormCertificationQueryRepository) ListPendingRetry(ctx context.Context, maxRetryCount int) ([]*entities.Certification, error) {
var certifications []*entities.Certification
err := r.WithoutCache().GetDB(ctx).
Where("status IN ? AND retry_count < ?",
Where("status IN ? AND retry_count < ?",
[]enums.CertificationStatus{
enums.StatusInfoRejected,
enums.StatusContractRejected,
enums.StatusContractExpired,
},
},
maxRetryCount).
Order("created_at ASC").
Find(&certifications).Error
@@ -367,61 +376,7 @@ func (r *GormCertificationQueryRepository) GetUserActiveCertification(ctx contex
// ================ 统计查询 ================
// GetStatistics 获取统计数据
func (r *GormCertificationQueryRepository) GetStatistics(ctx context.Context, period repositories.CertificationTimePeriod) (*repositories.CertificationStatistics, error) {
now := time.Now()
var startDate time.Time
switch period {
case repositories.PeriodDaily:
startDate = now.AddDate(0, 0, -1)
case repositories.PeriodWeekly:
startDate = now.AddDate(0, 0, -7)
case repositories.PeriodMonthly:
startDate = now.AddDate(0, -1, 0)
case repositories.PeriodYearly:
startDate = now.AddDate(-1, 0, 0)
default:
startDate = now.AddDate(0, 0, -7)
}
// 使用短期缓存进行统计查询
var totalCount int64
r.WithShortCache().GetDB(ctx).Model(&entities.Certification{}).
Where("created_at BETWEEN ? AND ?", startDate, now).
Count(&totalCount)
var completedCount int64
r.WithShortCache().GetDB(ctx).Model(&entities.Certification{}).
Where("created_at BETWEEN ? AND ? AND status = ?", startDate, now, enums.StatusContractSigned).
Count(&completedCount)
successRate := float64(0)
if totalCount > 0 {
successRate = float64(completedCount) / float64(totalCount)
}
return &repositories.CertificationStatistics{
Period: period,
StartDate: startDate,
EndDate: now,
TotalCertifications: totalCount,
CompletedCount: completedCount,
SuccessRate: successRate,
StatusDistribution: make(map[enums.CertificationStatus]int64),
FailureDistribution: make(map[enums.FailureReason]int64),
AvgProcessingTime: 24 * time.Hour, // 简化实现
}, nil
}
// CountByStatus 按状态统计
func (r *GormCertificationQueryRepository) CountByStatus(ctx context.Context, status enums.CertificationStatus) (int64, error) {
var count int64
if err := r.WithShortCache().GetDB(ctx).Model(&entities.Certification{}).Where("status = ?", status).Count(&count).Error; err != nil {
return 0, fmt.Errorf("按状态统计认证失败: %w", err)
}
return count, nil
}
// CountByFailureReason 按失败原因统计
func (r *GormCertificationQueryRepository) CountByFailureReason(ctx context.Context, reason enums.FailureReason) (int64, error) {
@@ -511,4 +466,4 @@ func (r *GormCertificationQueryRepository) GetCacheStats() map[string]interface{
QueryCachePatternUser,
}
return stats
}
}

View File

@@ -0,0 +1,64 @@
package certification
import (
"context"
"tyapi-server/internal/domains/certification/entities"
"tyapi-server/internal/shared/database"
"go.uber.org/zap"
"gorm.io/gorm"
)
const (
EnterpriseInfoSubmitRecordsTable = "enterprise_info_submit_records"
)
type GormEnterpriseInfoSubmitRecordRepository struct {
*database.CachedBaseRepositoryImpl
}
func (r *GormEnterpriseInfoSubmitRecordRepository) Delete(ctx context.Context, id string) error {
return r.DeleteEntity(ctx, id, &entities.EnterpriseInfoSubmitRecord{})
}
func NewGormEnterpriseInfoSubmitRecordRepository(db *gorm.DB, logger *zap.Logger) *GormEnterpriseInfoSubmitRecordRepository {
return &GormEnterpriseInfoSubmitRecordRepository{
CachedBaseRepositoryImpl: database.NewCachedBaseRepositoryImpl(db, logger, EnterpriseInfoSubmitRecordsTable),
}
}
func (r *GormEnterpriseInfoSubmitRecordRepository) Create(ctx context.Context, record *entities.EnterpriseInfoSubmitRecord) error {
return r.CreateEntity(ctx, record)
}
func (r *GormEnterpriseInfoSubmitRecordRepository) Update(ctx context.Context, record *entities.EnterpriseInfoSubmitRecord) error {
return r.UpdateEntity(ctx, record)
}
func (r *GormEnterpriseInfoSubmitRecordRepository) Exists(ctx context.Context, ID string) (bool, error) {
return r.ExistsEntity(ctx, ID, &entities.EnterpriseInfoSubmitRecord{})
}
func (r *GormEnterpriseInfoSubmitRecordRepository) FindLatestByUserID(ctx context.Context, userID string) (*entities.EnterpriseInfoSubmitRecord, error) {
var record entities.EnterpriseInfoSubmitRecord
err := r.GetDB(ctx).
Where("user_id = ?", userID).
Order("submit_at DESC").
First(&record).Error
if err != nil {
return nil, err
}
return &record, nil
}
func (r *GormEnterpriseInfoSubmitRecordRepository) FindLatestVerifiedByUserID(ctx context.Context, userID string) (*entities.EnterpriseInfoSubmitRecord, error) {
var record entities.EnterpriseInfoSubmitRecord
err := r.GetDB(ctx).
Where("user_id = ? AND status = ?", userID, "verified").
Order("verified_at DESC").
First(&record).Error
if err != nil {
return nil, err
}
return &record, nil
}