79 lines
1.9 KiB
Go
79 lines
1.9 KiB
Go
|
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
|
||
|
}
|