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 }