package models import ( "database/sql" orm "go-admin/common/global" "gorm.io/gorm" "time" ) const monthlyLimit = 1000 // 每月的短信限额为 1000 type SmsSummary struct { Model Year int `json:"year"` // 年 Month int `json:"month"` // 月 Used int `json:"used"` // 短信已发送数量 } // GetSmsNumberRemaining 查询本月短信剩余数量 func GetSmsNumberRemaining() int { // 获取当前时间的年份和月份 now := time.Now() year, month, _ := now.Date() var totalUsed sql.NullInt64 // 查询当前年份和月份的短信发送总数 if err := orm.Eloquent.Debug().Model(&SmsSummary{}). Where("year = ? AND month = ?", year, int(month)). Select("SUM(used)"). Scan(&totalUsed).Error; err != nil { return 0 } // 获取每月短信限额 nMonthlyLimit, err := GetSystemSmsConfig() if err != nil { nMonthlyLimit = monthlyLimit } remaining := nMonthlyLimit - int(totalUsed.Int64) return remaining } // UpdateSmsUsedCount 更新本月已使用短信数量 func UpdateSmsUsedCount(count int) error { // 获取当前时间的年份和月份 now := time.Now() year, month, _ := now.Date() // 查询当前年份和月份的短信发送记录 var smsSummary SmsSummary if err := orm.Eloquent.Where("year = ? AND month = ?", year, int(month)).First(&smsSummary).Error; err != nil { if err == gorm.ErrRecordNotFound { // 如果记录不存在,则创建新记录 smsSummary = SmsSummary{ Year: year, Month: int(month), Used: count, // 使用传入的 count 初始化已使用数量 } if err := orm.Eloquent.Create(&smsSummary).Error; err != nil { return err } } else { return err } } else { // 如果记录存在,则更新已使用的短信数量 smsSummary.Used += count if err := orm.Eloquent.Model(&smsSummary).Updates(&SmsSummary{Used: smsSummary.Used}).Error; err != nil { return err } } return nil }