140 lines
3.4 KiB
Go
140 lines
3.4 KiB
Go
package system
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"kra/internal/biz/system"
|
|
"kra/internal/data/model"
|
|
"kra/internal/data/query"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// ParamsRepo 系统参数仓储实现
|
|
type ParamsRepo struct {
|
|
data *gorm.DB
|
|
}
|
|
|
|
// NewParamsRepo 创建系统参数仓储
|
|
func NewParamsRepo(data *gorm.DB) system.ParamsRepo {
|
|
return &ParamsRepo{data: data}
|
|
}
|
|
|
|
// Create 创建参数
|
|
func (r *ParamsRepo) Create(ctx context.Context, params *system.Params) error {
|
|
m := toParamsModel(params)
|
|
return query.Use(r.data).SysParam.WithContext(ctx).Create(m)
|
|
}
|
|
|
|
// Delete 删除参数
|
|
func (r *ParamsRepo) Delete(ctx context.Context, id uint) error {
|
|
q := query.Use(r.data).SysParam
|
|
_, err := q.WithContext(ctx).Where(q.ID.Eq(int64(id))).Delete()
|
|
return err
|
|
}
|
|
|
|
// DeleteByIds 批量删除参数
|
|
func (r *ParamsRepo) DeleteByIds(ctx context.Context, ids []uint) error {
|
|
q := query.Use(r.data).SysParam
|
|
int64Ids := make([]int64, len(ids))
|
|
for i, id := range ids {
|
|
int64Ids[i] = int64(id)
|
|
}
|
|
_, err := q.WithContext(ctx).Where(q.ID.In(int64Ids...)).Delete()
|
|
return err
|
|
}
|
|
|
|
// Update 更新参数
|
|
func (r *ParamsRepo) Update(ctx context.Context, params *system.Params) error {
|
|
q := query.Use(r.data).SysParam
|
|
_, err := q.WithContext(ctx).Where(q.ID.Eq(int64(params.ID))).Updates(toParamsModel(params))
|
|
return err
|
|
}
|
|
|
|
// FindByID 根据ID查找参数
|
|
func (r *ParamsRepo) FindByID(ctx context.Context, id uint) (*system.Params, error) {
|
|
q := query.Use(r.data).SysParam
|
|
m, err := q.WithContext(ctx).Where(q.ID.Eq(int64(id))).First()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return toParamsBiz(m), nil
|
|
}
|
|
|
|
// FindByKey 根据Key查找参数
|
|
func (r *ParamsRepo) FindByKey(ctx context.Context, key string) (*system.Params, error) {
|
|
q := query.Use(r.data).SysParam
|
|
m, err := q.WithContext(ctx).Where(q.Key.Eq(key)).First()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return toParamsBiz(m), nil
|
|
}
|
|
|
|
// FindList 查找参数列表
|
|
func (r *ParamsRepo) FindList(ctx context.Context, page, pageSize int, filters map[string]interface{}) ([]*system.Params, int64, error) {
|
|
q := query.Use(r.data).SysParam
|
|
do := q.WithContext(ctx)
|
|
|
|
// 应用过滤条件
|
|
if name, ok := filters["name"].(string); ok && name != "" {
|
|
do = do.Where(q.Name.Like("%" + name + "%"))
|
|
}
|
|
if key, ok := filters["key"].(string); ok && key != "" {
|
|
do = do.Where(q.Key.Like("%" + key + "%"))
|
|
}
|
|
if startTime, ok := filters["start_time"].(*time.Time); ok && startTime != nil {
|
|
do = do.Where(q.CreatedAt.Gte(*startTime))
|
|
}
|
|
if endTime, ok := filters["end_time"].(*time.Time); ok && endTime != nil {
|
|
do = do.Where(q.CreatedAt.Lte(*endTime))
|
|
}
|
|
|
|
// 获取总数
|
|
total, err := do.Count()
|
|
if err != nil {
|
|
return nil, 0, err
|
|
}
|
|
|
|
// 分页查询
|
|
if pageSize > 0 {
|
|
do = do.Limit(pageSize).Offset((page - 1) * pageSize)
|
|
}
|
|
|
|
list, err := do.Find()
|
|
if err != nil {
|
|
return nil, 0, err
|
|
}
|
|
|
|
result := make([]*system.Params, len(list))
|
|
for i, m := range list {
|
|
result[i] = toParamsBiz(m)
|
|
}
|
|
return result, total, nil
|
|
}
|
|
|
|
// toParamsModel 转换为数据模型
|
|
func toParamsModel(p *system.Params) *model.SysParam {
|
|
return &model.SysParam{
|
|
ID: int64(p.ID),
|
|
Name: p.Name,
|
|
Key: p.Key,
|
|
Value: p.Value,
|
|
Desc: p.Desc,
|
|
}
|
|
}
|
|
|
|
// toParamsBiz 转换为业务实体
|
|
func toParamsBiz(m *model.SysParam) *system.Params {
|
|
return &system.Params{
|
|
ID: uint(m.ID),
|
|
CreatedAt: m.CreatedAt,
|
|
UpdatedAt: m.UpdatedAt,
|
|
Name: m.Name,
|
|
Key: m.Key,
|
|
Value: m.Value,
|
|
Desc: m.Desc,
|
|
}
|
|
}
|