mh_goadmin_server/app/admin/models/sms_summary.go
chenlin e9ac976f48 1.优化进销存报表查询时间改成created_at字段;
2.零售订单审核和更新增加updated_at字段;
3.修复会员过期提醒sql报错问题;
4.修复短信使用量统计错误的缺陷;
2024-07-25 20:02:35 +08:00

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
}