package model import ( "bigdata_archives/app/e" "bigdata_archives/global" "bigdata_archives/unity" "bigdata_archives/utils" "database/sql/driver" "encoding/json" "fmt" "log" ) type User struct { utils.BaseModel Account string `json:"account" validate:"required"` Password string `json:"password" validate:"required"` State *int `json:"state"` Menu Menus `gorm:"type:json" json:"menu"` } type UserDto struct { User Token string `json:"token"` } func (*User) TableName() string { return "user" } type Menus []string func (lo Menus) Value() (driver.Value, error) { return json.Marshal(lo) } func (fn *Menus) Scan(src interface{}) error { if src == nil { *fn = make(Menus, 0) return nil } var u []byte switch v := src.(type) { case string: u = []byte(v) case []byte: u = v default: return fmt.Errorf("unsupported type: %T", src) } return json.Unmarshal(u, (*[]string)(fn)) } // Login 登录 func (u *User) Login(userName, password string) (UserDto, e.Rescode) { //TODO implement me md5 := utils.MD5(password) tx := global.DBLink.Where("account = ?", userName).Where("password = ?", md5).Where("state = ?", 1).First(&u) if tx.Error != nil { return UserDto{}, e.AccountAndPasswordIsWrong } if tx.RowsAffected > 0 { token, err := utils.CreateToken(u.ID, u.Account, "user") if err != nil { return UserDto{}, e.TheUserAlreadyExists } var userDto = UserDto{} userDto.Token = token return userDto, e.SUCCESS } return UserDto{}, e.LoginFailed } // CreateAdmin 创建管理员 func CreateAdmin() { var user = User{} var count int64 global.DBLink.Table("user").Where("account = ?", "admin").Count(&count) if count == 0 { user.Account = "admin" user.Menu = []string{"*"} if user.State == nil { user.State = new(int) *user.State = 1 } md5 := utils.MD5("123456") user.Password = md5 create := global.DBLink.Create(&user) if create.Error == nil && create.RowsAffected > 0 { log.Println("管理员创建成功") } } } // AddUser 添加用户 func (u *User) AddUser(user User) (User, e.Rescode) { //TODO implement me md5 := utils.MD5(user.Password) user.Password = md5 if user.State == nil { user.State = new(int) *user.State = 1 } tx := global.DBLink.Create(&user) if tx.Error != nil && tx.RowsAffected == 0 { return User{}, e.CreateFailed } else { return user, e.SUCCESS } } func (u *User) GetUser(params unity.QueryPageParams) ([]User, e.Rescode) { //TODO implement me panic("implement me") } func (u *User) GetUserById(id int) (User, e.Rescode) { //TODO implement me var user User tx := global.DBLink.Where("id = ?", id).First(&user) if tx.Error == nil && tx.RowsAffected > 0 { return user, e.SUCCESS } return User{}, e.TheUserIsEmpty }