139 lines
3.5 KiB
Go
139 lines
3.5 KiB
Go
package system
|
|
|
|
import (
|
|
"context"
|
|
"strconv"
|
|
|
|
"kra/internal/biz/system"
|
|
"kra/internal/data/model"
|
|
"kra/internal/data/query"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type errorRepo struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
// NewErrorRepo 创建错误日志仓储
|
|
func NewErrorRepo(db *gorm.DB) system.ErrorRepo {
|
|
return &errorRepo{db: db}
|
|
}
|
|
|
|
func (r *errorRepo) Create(ctx context.Context, sysError *system.SysError) error {
|
|
m := toModelError(sysError)
|
|
return query.SysError.WithContext(ctx).Create(m)
|
|
}
|
|
|
|
func (r *errorRepo) Delete(ctx context.Context, id string) error {
|
|
_, err := query.SysError.WithContext(ctx).Where(query.SysError.ID.Eq(parseID(id))).Delete()
|
|
return err
|
|
}
|
|
|
|
func (r *errorRepo) DeleteByIds(ctx context.Context, ids []string) error {
|
|
idList := make([]int64, len(ids))
|
|
for i, id := range ids {
|
|
idList[i] = parseID(id)
|
|
}
|
|
_, err := query.SysError.WithContext(ctx).Where(query.SysError.ID.In(idList...)).Delete()
|
|
return err
|
|
}
|
|
|
|
func (r *errorRepo) Update(ctx context.Context, sysError *system.SysError) error {
|
|
_, err := query.SysError.WithContext(ctx).Where(query.SysError.ID.Eq(sysError.ID)).Updates(map[string]any{
|
|
"form": sysError.Form,
|
|
"info": sysError.Info,
|
|
"level": sysError.Level,
|
|
"solution": sysError.Solution,
|
|
"status": sysError.Status,
|
|
})
|
|
return err
|
|
}
|
|
|
|
func (r *errorRepo) GetById(ctx context.Context, id string) (*system.SysError, error) {
|
|
m, err := query.SysError.WithContext(ctx).Where(query.SysError.ID.Eq(parseID(id))).First()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return toBizError(m), nil
|
|
}
|
|
|
|
func (r *errorRepo) GetList(ctx context.Context, req *system.ErrorSearchReq) ([]*system.SysError, int64, error) {
|
|
q := query.SysError.WithContext(ctx).Order(query.SysError.CreatedAt.Desc())
|
|
|
|
// 条件搜索
|
|
if len(req.CreatedAtRange) == 2 {
|
|
q = q.Where(query.SysError.CreatedAt.Between(req.CreatedAtRange[0], req.CreatedAtRange[1]))
|
|
}
|
|
if req.Form != nil && *req.Form != "" {
|
|
q = q.Where(query.SysError.Form.Eq(*req.Form))
|
|
}
|
|
if req.Info != nil && *req.Info != "" {
|
|
q = q.Where(query.SysError.Info.Like("%" + *req.Info + "%"))
|
|
}
|
|
|
|
total, err := q.Count()
|
|
if err != nil {
|
|
return nil, 0, err
|
|
}
|
|
|
|
if req.PageSize > 0 {
|
|
offset := req.PageSize * (req.Page - 1)
|
|
q = q.Limit(req.PageSize).Offset(offset)
|
|
}
|
|
|
|
list, err := q.Find()
|
|
if err != nil {
|
|
return nil, 0, err
|
|
}
|
|
|
|
result := make([]*system.SysError, len(list))
|
|
for i, m := range list {
|
|
result[i] = toBizError(m)
|
|
}
|
|
return result, total, nil
|
|
}
|
|
|
|
func (r *errorRepo) UpdateStatus(ctx context.Context, id string, status string) error {
|
|
_, err := query.SysError.WithContext(ctx).Where(query.SysError.ID.Eq(parseID(id))).Update(query.SysError.Status, status)
|
|
return err
|
|
}
|
|
|
|
func (r *errorRepo) UpdateSolution(ctx context.Context, id string, status string, solution string) error {
|
|
_, err := query.SysError.WithContext(ctx).Where(query.SysError.ID.Eq(parseID(id))).Updates(map[string]any{
|
|
"status": status,
|
|
"solution": solution,
|
|
})
|
|
return err
|
|
}
|
|
|
|
// 转换函数
|
|
func parseID(id string) int64 {
|
|
n, _ := strconv.ParseInt(id, 10, 64)
|
|
return n
|
|
}
|
|
|
|
func toModelError(e *system.SysError) *model.SysError {
|
|
return &model.SysError{
|
|
ID: e.ID,
|
|
Form: e.Form,
|
|
Info: e.Info,
|
|
Level: e.Level,
|
|
Solution: e.Solution,
|
|
Status: e.Status,
|
|
}
|
|
}
|
|
|
|
func toBizError(m *model.SysError) *system.SysError {
|
|
return &system.SysError{
|
|
ID: m.ID,
|
|
Form: m.Form,
|
|
Info: m.Info,
|
|
Level: m.Level,
|
|
Solution: m.Solution,
|
|
Status: m.Status,
|
|
CreatedAt: m.CreatedAt,
|
|
UpdatedAt: m.UpdatedAt,
|
|
}
|
|
}
|