package dao import ( "cidservice/model/entity" "context" "github.com/gogf/gf/v2/frame/g" ) var ( Strategy = strategyDao{} ) type strategyDao struct{} // GetByName 根据名称获取策略 func (d *strategyDao) GetByName(ctx context.Context, name string) (strategy *entity.Strategy, err error) { err = g.DB().Model("strategies"). Where("name = ?", name). Scan(&strategy) return } // GetByID 根据ID获取策略 func (d *strategyDao) GetByID(ctx context.Context, id int64) (strategy *entity.Strategy, err error) { err = g.DB().Model("strategies"). Where("id = ?", id). Scan(&strategy) return } // GetByTenantLevel 根据租户级别获取策略 func (d *strategyDao) GetByTenantLevel(ctx context.Context, tenantLevel string) (strategy *entity.Strategy, err error) { err = g.DB().Model("strategies"). Where("tenant_level = ? AND status = ?", tenantLevel, "active"). Order("priority DESC, created_at ASC"). Scan(&strategy) return } // Create 创建策略 func (d *strategyDao) Create(ctx context.Context, strategy *entity.Strategy) (id int64, err error) { result, err := g.DB().Model("strategies").Insert(strategy) if err != nil { return 0, err } id, err = result.LastInsertId() return } // Update 更新策略 func (d *strategyDao) Update(ctx context.Context, strategy *entity.Strategy) (affected int64, err error) { result, err := g.DB().Model("strategies"). Where("id = ?", strategy.Id). Update(strategy) if err != nil { return 0, err } return result.RowsAffected() } // Delete 删除策略 func (d *strategyDao) Delete(ctx context.Context, id int64) (affected int64, err error) { result, err := g.DB().Model("strategies"). Where("id = ?", id). Delete() if err != nil { return 0, err } return result.RowsAffected() } // GetList 获取策略列表 func (d *strategyDao) GetList(ctx context.Context, page, size int, tenantLevel, status string) (list []*entity.Strategy, total int64, err error) { model := g.DB().Model("strategies") // 筛选条件 if tenantLevel != "" { model = model.Where("tenant_level = ?", tenantLevel) } if status != "" { model = model.Where("status = ?", status) } // 获取总数 count, err := model.Count() if err != nil { return } total = int64(count) // 分页查询 offset := (page - 1) * size err = model.Order("priority DESC, created_at DESC"). Offset(offset). Limit(size). Scan(&list) return }