120 lines
3.0 KiB
Go
120 lines
3.0 KiB
Go
package print_server
|
|
|
|
import (
|
|
"crypto/md5"
|
|
"encoding/json"
|
|
"fmt"
|
|
"git.rosy.net.cn/baseapi/utils"
|
|
"git.rosy.net.cn/jx-print/dao"
|
|
"git.rosy.net.cn/jx-print/globals"
|
|
"git.rosy.net.cn/jx-print/model"
|
|
putils "git.rosy.net.cn/jx-print/putils"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/jmoiron/sqlx"
|
|
"time"
|
|
)
|
|
|
|
type UserService struct {
|
|
C *gin.Context
|
|
DB *sqlx.DB
|
|
}
|
|
|
|
type UserServiceInterface interface {
|
|
Login(name, password string) (loginResult *LoginResult, err error)
|
|
RegisterUser(c *gin.Context, name, password string) (err error)
|
|
}
|
|
|
|
var (
|
|
UserServiceHandler UserServiceInterface
|
|
)
|
|
|
|
func InitHandler(handler UserServiceInterface) {
|
|
UserServiceHandler = handler
|
|
}
|
|
|
|
func (c *UserService) GetUsers(name, mobile, userID string) (users []*model.User, err error) {
|
|
return dao.GetUsers(globals.GetDB(), userID, name, mobile, "")
|
|
}
|
|
|
|
func RegisterUser(c *gin.Context, name, password string) (err error) {
|
|
var (
|
|
db = globals.GetDB()
|
|
user = &model.User{}
|
|
now = time.Now()
|
|
)
|
|
if users, _ := dao.GetUsers(db, "", name, "", ""); len(users) > 0 {
|
|
return fmt.Errorf("用户名重复!")
|
|
}
|
|
user.UserID = utils.GetUUID()
|
|
user.Name = name
|
|
user.Password = fmt.Sprintf("%x", md5.Sum([]byte(model.RegisterKey+password)))
|
|
user.CreatedAt = &now
|
|
user.UpdatedAt = &now
|
|
user.DeletedAt = &utils.DefaultTimeValue
|
|
err = dao.Insert(db, user)
|
|
return err
|
|
}
|
|
|
|
type LoginResult struct {
|
|
model.User
|
|
Token string `json:"token"` //token
|
|
}
|
|
|
|
func Login(c *gin.Context, name, password string) (loginResult *LoginResult, err error) {
|
|
var (
|
|
db = globals.GetDB()
|
|
now = time.Now()
|
|
user = &model.User{}
|
|
)
|
|
loginResult = &LoginResult{}
|
|
if users, _ := dao.GetUsers(db, "", name, "", ""); len(users) == 0 {
|
|
return loginResult, fmt.Errorf("用户名不存在!")
|
|
}
|
|
if users, err := dao.GetUserForLogin(db, name, fmt.Sprintf("%x", md5.Sum([]byte(model.RegisterKey+password)))); err != nil {
|
|
return loginResult, err
|
|
} else if len(users) == 0 {
|
|
return loginResult, fmt.Errorf("密码错误或用户不存在!")
|
|
} else {
|
|
user = users[0]
|
|
}
|
|
loginResult.User = *user
|
|
//更新登录时间和ip
|
|
user.LastLoginAt = &now
|
|
user.LastLoginIP = c.ClientIP()
|
|
err = dao.Update(db, user, "last_login_at", "last_login_ip")
|
|
return loginResult, err
|
|
}
|
|
|
|
func Logout(c *gin.Context, token string) (err error) {
|
|
return putils.DelKey(token)
|
|
}
|
|
|
|
func UpdateUser(c *gin.Context, payload string) (err error) {
|
|
var (
|
|
db = globals.GetDB()
|
|
userp = &model.User{}
|
|
user = &model.User{}
|
|
)
|
|
if err = json.Unmarshal([]byte(payload), &userp); err != nil {
|
|
return err
|
|
}
|
|
if userp.ID == 0 || userp.UserID == "" {
|
|
return fmt.Errorf("id 和 user_id 必传!")
|
|
}
|
|
if users, err := dao.GetUsers(db, userp.UserID, "", "", ""); err != nil {
|
|
return err
|
|
} else {
|
|
user = users[0]
|
|
}
|
|
err = dao.UpdateDiff(db, userp, user)
|
|
return err
|
|
}
|
|
|
|
func GetMenus(c *gin.Context) (menus []*model.Menu, err error) {
|
|
return dao.GetMenus(globals.GetDB())
|
|
}
|
|
|
|
func GetMenuDetail(c *gin.Context, id int) (menu *model.MenuDetail, err error) {
|
|
return dao.GetMenuDetail(globals.GetDB(), id)
|
|
}
|