package service
|
|
import (
|
"aps_crm/conf"
|
"aps_crm/constvar"
|
"aps_crm/model"
|
"aps_crm/pkg/ecode"
|
"aps_crm/pkg/encrypt"
|
"aps_crm/pkg/logx"
|
"aps_crm/proto/user"
|
"context"
|
"errors"
|
"google.golang.org/grpc"
|
"google.golang.org/grpc/credentials/insecure"
|
"gorm.io/gorm"
|
"time"
|
)
|
|
type UserService struct{}
|
|
func (userService *UserService) Login(u *model.User) (userInter *model.User, errCode int) {
|
userInter, err := model.NewUserSearch(nil).SetUserName(u.Username).First()
|
if err != nil {
|
return nil, ecode.UserNotExist
|
}
|
|
if ok := encrypt.BcryptCheck(u.Password, userInter.Password); !ok {
|
return nil, ecode.PasswordErr
|
}
|
|
return userInter, ecode.OK
|
}
|
|
func (userService *UserService) Register(u *model.User) (userInter *model.User, errCode int) {
|
_, err := model.NewUserSearch(nil).SetUserName(u.Username).First()
|
if err != gorm.ErrRecordNotFound {
|
return userInter, ecode.UserNameExistErr
|
}
|
|
err = model.NewUserSearch(nil).Create(u)
|
return u, ecode.OK
|
}
|
|
func (userService *UserService) ChangePassword(u *model.User, newPassword string) (userInter *model.User, errCode int) {
|
user, err := model.NewUserSearch(nil).SetId(u.UUID).First()
|
if err != nil {
|
return nil, ecode.UserNotExist
|
}
|
|
if ok := encrypt.BcryptCheck(u.Password, user.Password); !ok {
|
return nil, ecode.PasswordErr
|
}
|
|
user.Password = encrypt.BcryptHash(newPassword)
|
err = model.NewUserSearch(nil).SetId(u.UUID).UpdateByMap(map[string]interface{}{
|
"password": user.Password})
|
|
return user, ecode.OK
|
|
}
|
|
func (userService *UserService) DeleteUser(id string) (err error) {
|
user, err := model.NewUserSearch(nil).SetId(id).First()
|
if err != nil {
|
return err
|
}
|
|
if user.UserType != constvar.UserTypeSub {
|
return errors.New("该用户非子账户,无法删除")
|
}
|
|
err = model.NewUserSearch(nil).SetId(id).Delete()
|
if err != nil {
|
return err
|
}
|
|
return model.NewUserMenuSearch(nil).SetUserId(id).Delete()
|
}
|
|
func (userService *UserService) SetUserInfo(req model.User) error {
|
return model.NewUserSearch(nil).SetId(req.UUID).UpdateByMap(map[string]interface{}{
|
"nick_name": req.NickName,
|
"header_img": req.HeaderImg,
|
"phone": req.Phone,
|
"email": req.Email,
|
"pos": req.Pos,
|
})
|
}
|
|
func (userService *UserService) GetUserInfo(id string) (user *model.User, err error) {
|
return model.NewUserSearch(nil).SetId(id).First()
|
}
|
|
func (userService *UserService) ResetPassword(id string) (err error) {
|
return model.NewUserSearch(nil).SetId(id).UpdateByMap(map[string]interface{}{
|
"password": encrypt.BcryptHash("123456"),
|
})
|
}
|
|
func (userService *UserService) GetUserList() (userList []*model.User, err error) {
|
return model.NewUserSearch(nil).FindAll()
|
}
|
|
var (
|
userConn *grpc.ClientConn
|
)
|
|
func InitUserConn() {
|
var err error
|
userConn, err = grpc.Dial(conf.Conf.GrpcServiceAddr.Aps, grpc.WithTransportCredentials(insecure.NewCredentials()))
|
if err != nil {
|
logx.Errorf("grpc dial user service error: %v", err.Error())
|
return
|
}
|
defer userConn.Close()
|
}
|
|
func (userService *UserService) SyncUserInfo() (err error) {
|
cli := user.NewUserServiceClient(userConn)
|
|
users := []*user.User{
|
// ... fetched users
|
}
|
|
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
|
defer cancel()
|
r, err := cli.SyncUser(ctx, &user.UserRequest{Users: users})
|
if err != nil {
|
logx.Fatalf("could not sync users: %v", err)
|
}
|
|
logx.Infof("Synced: %v, Message: %s", r.List, r.Message)
|
|
return nil
|
}
|