New warehouse

This commit is contained in:
2025-10-24 00:09:45 +08:00
commit ac07e27908
75 changed files with 26814 additions and 0 deletions

121
services/query.go Normal file
View 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
View 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)
}