mh_goadmin_server/app/admin/models/sms_summary.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
}