ai_scheduler/internal/data/impl/advice_admin_impl.go

131 lines
3.1 KiB
Go

package impl
import (
"context"
"ai_scheduler/internal/data/model"
"ai_scheduler/internal/entitys"
"ai_scheduler/tmpl/dataTemp"
"ai_scheduler/utils"
"gorm.io/gorm"
)
type AdviceAdminImpl struct {
dataTemp.DataTemp
}
func NewAdviceAdminImpl(db *utils.Db) *AdviceAdminImpl {
return &AdviceAdminImpl{
DataTemp: *dataTemp.NewDataTemp(db, new(model.AiAdviceAdmin)),
}
}
func (a *AdviceAdminImpl) PrimaryKey() string {
return "admin_id"
}
// GetByAccount 按账号查询(登录用)
func (a *AdviceAdminImpl) GetByAccount(ctx context.Context, account string) (*model.AiAdviceAdmin, error) {
var admin model.AiAdviceAdmin
err := a.Db.WithContext(ctx).
Model(&model.AiAdviceAdmin{}).
Where("account = ? and type=1", account).
First(&admin).Error
if err != nil {
return nil, err
}
return &admin, nil
}
// UpdateLastLogin 更新最后登录时间
func (a *AdviceAdminImpl) UpdateLastLogin(ctx context.Context, adminID int32) error {
return a.Db.WithContext(ctx).
Model(&model.AiAdviceAdmin{}).
Where("admin_id = ?", adminID).
Update("last_login_at", gorm.Expr("NOW()")).Error
}
// Add 新增管理员
func (a *AdviceAdminImpl) Add(ctx context.Context, req *entitys.AdvicerAdminAddReq) (int32, error) {
admin := &model.AiAdviceAdmin{
Type: req.Type,
Name: req.Name,
Account: req.Account,
Pwd: req.Pwd,
Status: req.Status,
}
if err := a.Db.WithContext(ctx).Create(admin).Error; err != nil {
return 0, err
}
return admin.AdminID, nil
}
// Update 更新管理员
func (a *AdviceAdminImpl) Update(ctx context.Context, req *entitys.AdvicerAdminUpdateReq) error {
updates := map[string]interface{}{
"type": req.Type,
"name": req.Name,
"account": req.Account,
"status": req.Status,
}
if req.Pwd != "" {
updates["pwd"] = req.Pwd
}
return a.Db.WithContext(ctx).
Model(&model.AiAdviceAdmin{}).
Where("admin_id = ?", req.AdminID).
Updates(updates).Error
}
// List 查询管理员列表
func (a *AdviceAdminImpl) List(ctx context.Context, req *entitys.AdvicerAdminListReq) (interface{}, error) {
var list []model.AiAdviceAdmin
query := a.Db.WithContext(ctx).Model(&model.AiAdviceAdmin{})
if req.AdminID > 0 {
query = query.Where("admin_id = ?", req.AdminID)
}
if req.Name != "" {
query = query.Where("name LIKE ?", "%"+req.Name+"%")
}
if req.Account != "" {
query = query.Where("account = ?", req.Account)
}
if req.Type > 0 {
query = query.Where("type = ?", req.Type)
}
if req.Status > 0 {
query = query.Where("status = ?", req.Status)
}
page, pageSize := req.Page, req.PageSize
if page <= 0 {
page = 1
}
if pageSize <= 0 {
pageSize = 10
}
var total int64
if err := query.Count(&total).Error; err != nil {
return nil, err
}
if err := query.Offset((page - 1) * pageSize).Limit(pageSize).
Order("admin_id desc").Find(&list).Error; err != nil {
return nil, err
}
return map[string]interface{}{
"list": list,
"total": total,
}, nil
}
// Del 删除管理员
func (a *AdviceAdminImpl) Del(ctx context.Context, req *entitys.AdvicerAdminDelReq) error {
return a.Db.WithContext(ctx).
Where("admin_id = ?", req.AdminID).
Delete(&model.AiAdviceAdmin{}).Error
}