打印机
This commit is contained in:
147
services/print_server/user.go
Normal file
147
services/print_server/user.go
Normal file
@@ -0,0 +1,147 @@
|
||||
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"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
TokenHeader = "TOKEN"
|
||||
TokenVer = "V2"
|
||||
TokenTypeSep = "."
|
||||
)
|
||||
|
||||
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{}
|
||||
token string
|
||||
)
|
||||
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
|
||||
//创建token
|
||||
token, err = setToken(user)
|
||||
loginResult.Token = token
|
||||
//更新登录时间和ip
|
||||
user.LastLoginAt = &now
|
||||
user.LastLoginIP = c.ClientIP()
|
||||
err = dao.Update(db, user, "last_login_at", "last_login_ip")
|
||||
return loginResult, err
|
||||
}
|
||||
|
||||
func setToken(user *model.User) (token string, err error) {
|
||||
token = createToken(user)
|
||||
err = putils.SetKey(token, user, putils.DefTokenDuration)
|
||||
return token, err
|
||||
}
|
||||
|
||||
func createToken(user *model.User) (token string) {
|
||||
return strings.Join([]string{
|
||||
TokenHeader,
|
||||
TokenVer,
|
||||
user.UserID,
|
||||
time.Now().Format("20060102-150405"),
|
||||
utils.GetUUID(),
|
||||
user.Name,
|
||||
}, TokenTypeSep)
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user