package service import ( "psi/database" "psi/models" systemReq "psi/models/request" systemRes "psi/models/response" "psi/utils" "time" "gorm.io/gorm" ) type ConfigService struct{} // GetConfigList 获取配置列表 func (s *ConfigService) GetConfigList(req systemReq.GetConfigListRequest, db ...*gorm.DB) (*systemRes.ConfigListResponse, error) { databaseConn := database.OptionalDB(db...) if req.Page < 1 { req.Page = 1 } if req.PageSize < 1 || req.PageSize > 100 { req.PageSize = 20 } query := databaseConn.Model(&models.Config{}).Where("is_del = ?", 0) if req.Keyword != "" { query = query.Where("`key` like ?", "%"+req.Keyword+"%") } var total int64 if err := query.Count(&total).Error; err != nil { return nil, utils.NewError("查询总数失败") } var configs []models.Config offset := (req.Page - 1) * req.PageSize if err := query.Order("created_at DESC").Offset(offset).Limit(req.PageSize).Find(&configs).Error; err != nil { return nil, utils.NewError("查询配置列表失败") } var configItems []systemRes.ConfigItem for _, config := range configs { configItems = append(configItems, systemRes.ConvertConfigToItem(config)) } return &systemRes.ConfigListResponse{ List: configItems, Total: total, Page: req.Page, PageSize: req.PageSize, }, nil } // GetConfigDetail 获取配置详情 func (s *ConfigService) GetConfigDetail(id int64, db ...*gorm.DB) (*models.Config, error) { databaseConn := database.OptionalDB(db...) var config models.Config result := databaseConn.Where("id = ? AND is_del = ?", id, 0).First(&config) if result.Error != nil { return nil, utils.NewError("配置不存在") } return &config, nil } // CreateConfig 创建配置 func (s *ConfigService) CreateConfig(req systemReq.AddConfigRequest, db ...*gorm.DB) (int64, error) { databaseConn := database.OptionalDB(db...) var count int64 databaseConn.Model(&models.Config{}).Where("`key` = ? AND is_del = ?", req.Key, 0).Count(&count) if count > 0 { return 0, utils.NewError("配置键已存在") } now := time.Now().Unix() config := models.Config{ Key: req.Key, Value: req.Value, CreatedAt: now, UpdatedAt: now, IsDel: 0, } if err := databaseConn.Create(&config).Error; err != nil { return 0, utils.NewError("创建配置失败: " + err.Error()) } return config.ID, nil } // UpdateConfig 更新配置 func (s *ConfigService) UpdateConfig(req systemReq.UpdateConfigRequest, db ...*gorm.DB) error { databaseConn := database.OptionalDB(db...) var config models.Config result := databaseConn.Where("id = ? AND is_del = ?", req.ID, 0).First(&config) if result.Error != nil { return utils.NewError("配置不存在") } if req.Key != "" && req.Key != config.Key { var count int64 databaseConn.Model(&models.Config{}).Where("`key` = ? AND id != ? AND is_del = ?", req.Key, req.ID, 0).Count(&count) if count > 0 { return utils.NewError("配置键已存在") } } updateData := make(map[string]interface{}) updateData["updated_at"] = time.Now().Unix() if req.Key != "" { updateData["key"] = req.Key } if req.Value != "" { updateData["value"] = req.Value } if err := databaseConn.Model(&config).Updates(updateData).Error; err != nil { return utils.NewError("更新配置失败: " + err.Error()) } return nil } // DeleteConfig 删除配置(逻辑删除) func (s *ConfigService) DeleteConfig(req systemReq.DeleteConfigRequest, db ...*gorm.DB) error { databaseConn := database.OptionalDB(db...) var config models.Config result := databaseConn.Where("id = ? AND is_del = ?", req.ID, 0).First(&config) if result.Error != nil { return utils.NewError("配置不存在") } updateData := map[string]interface{}{ "is_del": 1, "updated_at": time.Now().Unix(), } if err := databaseConn.Model(&config).Updates(updateData).Error; err != nil { return utils.NewError("删除配置失败: " + err.Error()) } return nil }