82 lines
2.0 KiB
Go
82 lines
2.0 KiB
Go
package models
|
|
|
|
import (
|
|
"fmt"
|
|
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()
|
|
|
|
nTotalUsed := struct {
|
|
TotalUsed int `json:"total_used"`
|
|
}{}
|
|
|
|
// 查询当前年份和月份的短信发送总数
|
|
if err := orm.Eloquent.Debug().Model(&SmsSummary{}).
|
|
Where("year = ? AND month = ?", year, int(month)).
|
|
Select("SUM(used) as total_used").
|
|
Scan(&nTotalUsed).Error; err != nil {
|
|
fmt.Println("SQL Error:", err) // 打印 SQL 错误信息
|
|
return 0
|
|
}
|
|
|
|
// 获取每月短信限额
|
|
nMonthlyLimit, err := GetSystemSmsConfig()
|
|
if err != nil {
|
|
nMonthlyLimit = monthlyLimit
|
|
}
|
|
|
|
remaining := nMonthlyLimit - nTotalUsed.TotalUsed
|
|
|
|
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
|
|
}
|