mirror of
https://github.com/skyle1995/NetworkAuth.git
synced 2026-05-25 02:24:05 +08:00
New warehouse
This commit is contained in:
121
services/query.go
Normal file
121
services/query.go
Normal file
@@ -0,0 +1,121 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"networkDev/models"
|
||||
"networkDev/utils"
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
|
||||
|
||||
// FindCardByCardNumber 根据卡号查找卡密
|
||||
// cardNumber: 卡号
|
||||
// db: 数据库连接
|
||||
// 返回: 卡密信息和错误
|
||||
func FindCardByCardNumber(cardNumber string, db *gorm.DB) (*models.Card, error) {
|
||||
key := fmt.Sprintf("card:number:%s", cardNumber)
|
||||
return utils.RedisGetOrSet(context.Background(), key, 60*time.Second, func() (*models.Card, error) {
|
||||
var card models.Card
|
||||
err := db.Where("card_number = ?", cardNumber).First(&card).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &card, nil
|
||||
})
|
||||
}
|
||||
|
||||
// FindCardTypeByID 根据ID查找卡密类型
|
||||
// id: 卡密类型ID
|
||||
// db: 数据库连接
|
||||
// 返回: 卡密类型信息和错误
|
||||
func FindCardTypeByID(id uint, db *gorm.DB) (*models.CardType, error) {
|
||||
key := fmt.Sprintf("card_type:id:%d", id)
|
||||
return utils.RedisGetOrSet(context.Background(), key, 30*time.Minute, func() (*models.CardType, error) {
|
||||
var cardType models.CardType
|
||||
err := db.Where("id = ?", id).First(&cardType).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &cardType, nil
|
||||
})
|
||||
}
|
||||
|
||||
// FindSettingByName 根据名称查找设置
|
||||
// name: 设置名称
|
||||
// db: 数据库连接
|
||||
// 返回: 设置信息和错误
|
||||
func FindSettingByName(name string, db *gorm.DB) (*models.Settings, error) {
|
||||
key := fmt.Sprintf("setting:%s", name)
|
||||
return utils.RedisGetOrSet(context.Background(), key, 5*time.Minute, func() (*models.Settings, error) {
|
||||
var setting models.Settings
|
||||
err := db.Where("name = ?", name).First(&setting).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &setting, nil
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
// UpdateEntityByID 根据ID更新实体
|
||||
// model: 模型类型
|
||||
// id: 实体ID
|
||||
// updates: 更新字段
|
||||
// db: 数据库连接
|
||||
// 返回: 错误
|
||||
func UpdateEntityByID(model interface{}, id uint, updates map[string]interface{}, db *gorm.DB) error {
|
||||
return db.Model(model).Where("id = ?", id).Updates(updates).Error
|
||||
}
|
||||
|
||||
// BatchUpdateEntityStatus 批量更新实体状态
|
||||
// model: 模型类型
|
||||
// ids: 实体ID列表
|
||||
// status: 新状态
|
||||
// db: 数据库连接
|
||||
// 返回: 错误
|
||||
func BatchUpdateEntityStatus(model interface{}, ids []uint, status int, db *gorm.DB) error {
|
||||
if len(ids) == 0 {
|
||||
return nil
|
||||
}
|
||||
return db.Model(model).Where("id IN ?", ids).Update("status", status).Error
|
||||
}
|
||||
|
||||
// CountEntitiesByCondition 根据条件统计实体数量
|
||||
// model: 模型类型
|
||||
// condition: 查询条件
|
||||
// db: 数据库连接
|
||||
// args: 查询参数
|
||||
// 返回: 数量和错误
|
||||
func CountEntitiesByCondition(model interface{}, condition string, db *gorm.DB, args ...interface{}) (int64, error) {
|
||||
var count int64
|
||||
err := db.Model(model).Where(condition, args...).Count(&count).Error
|
||||
return count, err
|
||||
}
|
||||
|
||||
// FindEntitiesByCondition 根据条件查找实体
|
||||
// model: 模型类型
|
||||
// result: 结果容器
|
||||
// condition: 查询条件
|
||||
// db: 数据库连接
|
||||
// args: 查询参数
|
||||
// 返回: 错误
|
||||
func FindEntitiesByCondition(model interface{}, result interface{}, condition string, db *gorm.DB, args ...interface{}) error {
|
||||
return db.Model(model).Where(condition, args...).Find(result).Error
|
||||
}
|
||||
|
||||
// CheckEntityExists 检查实体是否存在
|
||||
// model: 模型类型
|
||||
// condition: 查询条件
|
||||
// db: 数据库连接
|
||||
// args: 查询参数
|
||||
// 返回: 是否存在和错误
|
||||
func CheckEntityExists(model interface{}, condition string, db *gorm.DB, args ...interface{}) (bool, error) {
|
||||
var count int64
|
||||
err := db.Model(model).Where(condition, args...).Count(&count).Error
|
||||
return count > 0, err
|
||||
}
|
||||
105
services/settings.go
Normal file
105
services/settings.go
Normal file
@@ -0,0 +1,105 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"networkDev/database"
|
||||
"networkDev/models"
|
||||
"strconv"
|
||||
"sync"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// SettingsService 设置服务
|
||||
type SettingsService struct {
|
||||
mu sync.RWMutex
|
||||
cache map[string]string
|
||||
}
|
||||
|
||||
var settingsService *SettingsService
|
||||
var settingsOnce sync.Once
|
||||
|
||||
// GetSettingsService 获取设置服务单例
|
||||
func GetSettingsService() *SettingsService {
|
||||
settingsOnce.Do(func() {
|
||||
settingsService = &SettingsService{
|
||||
cache: make(map[string]string),
|
||||
}
|
||||
// 初始化时加载所有设置
|
||||
settingsService.loadAllSettings()
|
||||
})
|
||||
return settingsService
|
||||
}
|
||||
|
||||
// loadAllSettings 从数据库加载所有设置到缓存
|
||||
func (s *SettingsService) loadAllSettings() {
|
||||
db, err := database.GetDB()
|
||||
if err != nil {
|
||||
logrus.WithError(err).Error("获取数据库连接失败")
|
||||
return
|
||||
}
|
||||
|
||||
var settings []models.Settings
|
||||
if err := db.Find(&settings).Error; err != nil {
|
||||
logrus.WithError(err).Error("加载设置失败")
|
||||
return
|
||||
}
|
||||
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
|
||||
for _, setting := range settings {
|
||||
s.cache[setting.Name] = setting.Value
|
||||
}
|
||||
|
||||
logrus.WithField("count", len(settings)).Info("设置缓存加载完成")
|
||||
}
|
||||
|
||||
// GetString 获取字符串类型的设置值
|
||||
func (s *SettingsService) GetString(name, defaultValue string) string {
|
||||
s.mu.RLock()
|
||||
defer s.mu.RUnlock()
|
||||
|
||||
if value, exists := s.cache[name]; exists {
|
||||
return value
|
||||
}
|
||||
return defaultValue
|
||||
}
|
||||
|
||||
// GetInt 获取整数类型的设置值
|
||||
func (s *SettingsService) GetInt(name string, defaultValue int) int {
|
||||
strValue := s.GetString(name, "")
|
||||
if strValue == "" {
|
||||
return defaultValue
|
||||
}
|
||||
|
||||
if intValue, err := strconv.Atoi(strValue); err == nil {
|
||||
return intValue
|
||||
}
|
||||
return defaultValue
|
||||
}
|
||||
|
||||
// GetBool 获取布尔类型的设置值
|
||||
func (s *SettingsService) GetBool(name string, defaultValue bool) bool {
|
||||
strValue := s.GetString(name, "")
|
||||
if strValue == "" {
|
||||
return defaultValue
|
||||
}
|
||||
|
||||
return strValue == "1" || strValue == "true"
|
||||
}
|
||||
|
||||
// RefreshCache 刷新设置缓存
|
||||
func (s *SettingsService) RefreshCache() {
|
||||
s.loadAllSettings()
|
||||
}
|
||||
|
||||
|
||||
// GetSessionTimeout 获取会话超时时间(秒)
|
||||
func (s *SettingsService) GetSessionTimeout() int {
|
||||
return s.GetInt("session_timeout", 3600) // 默认1小时
|
||||
}
|
||||
|
||||
// IsMaintenanceMode 检查系统是否关闭
|
||||
func (s *SettingsService) IsMaintenanceMode() bool {
|
||||
return s.GetBool("maintenance_mode", false)
|
||||
}
|
||||
Reference in New Issue
Block a user