package controller import ( "fmt" "github.com/gin-gonic/gin" "hepa-calc-api/api/dao" "hepa-calc-api/api/dto" "hepa-calc-api/api/model" "hepa-calc-api/api/requests" "hepa-calc-api/api/responses" "hepa-calc-api/api/service" "hepa-calc-api/extend/weChat" "hepa-calc-api/global" "hepa-calc-api/utils" "time" ) type Login struct{} // LoginPhone 手机号登录 func (r *Login) LoginPhone(c *gin.Context) { loginRequest := requests.LoginRequest{} req := loginRequest.LoginPhone if err := c.ShouldBind(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } // 检测用户信息 userDao := dao.UserDao{} maps := make(map[string]interface{}) maps["mobile"] = req.Mobile user, _ := userDao.GetUser(maps) // 新用户处理方式 if user == nil { // 开始事务 tx := global.Db.Begin() defer func() { if r := recover(); r != nil { fmt.Println(r) tx.Rollback() } }() avatar := "www.baidu.com" // 新增用户 user = &model.User{ UserName: "", Mobile: req.Mobile, RegisterSource: req.Source, OpenId: "", UnionId: "", Age: nil, Sex: 0, Avatar: avatar, IsMember: 0, MemberExpireDate: nil, LoginAt: model.LocalTime(time.Now()), LoginIp: req.LoginIp, } user, err := userDao.AddUser(tx, user) if err != nil { tx.Rollback() responses.FailWithMessage(err.Error(), c) return } fmt.Println(user) // 获取app用户信息 //var result *string //if result == nil { // // 新增app用户信息 //} tx.Commit() } // 下发token token := &utils.Token{ UserId: fmt.Sprintf("%d", user.UserId), } // 生成jwt jwt, err := token.NewJWT() if err != nil || jwt == "" { responses.FailWithMessage("登陆失败", c) return } // 处理返回值 g := dto.LoginMobileDto(user) // 加载token g.LoadToken(jwt) responses.OkWithData(g, c) } // LoginWx 微信授权登录 func (r *Login) LoginWx(c *gin.Context) { loginRequest := requests.LoginRequest{} req := loginRequest.LoginWx if err := c.ShouldBind(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } // 获取微信网页授权access_token webAccessToken, err := weChat.GetWebAccessToken(req.Code) if err != nil { responses.FailWithMessage(err.Error(), c) return } // 网页授权拉取用户信息 userInfo, err := weChat.GetUserInfo(webAccessToken.AccessToken, webAccessToken.OpenId) if err != nil { responses.FailWithMessage(err.Error(), c) return } fmt.Println(userInfo) // 检测用户信息 userDao := dao.UserDao{} maps := make(map[string]interface{}) maps["open_id"] = webAccessToken.OpenId user, _ := userDao.GetUser(maps) // 新用户处理方式 if user == nil { // 开始事务 tx := global.Db.Begin() defer func() { if r := recover(); r != nil { fmt.Println(r) tx.Rollback() } }() // 处理用户头像 userService := service.UserService{} avatar, err := userService.HandleUserAvatar(userInfo.HeadImgUrl) if err != nil { tx.Rollback() responses.FailWithMessage(err.Error(), c) return } // 新增用户 user = &model.User{ UserName: userInfo.Nickname, Mobile: "", RegisterSource: req.Source, OpenId: userInfo.OpenId, UnionId: userInfo.UnionId, Age: nil, Sex: userInfo.Sex, Avatar: avatar, IsMember: 0, MemberExpireDate: nil, LoginAt: model.LocalTime(time.Now()), LoginIp: req.LoginIp, } user, err = userDao.AddUser(tx, user) if err != nil { tx.Rollback() responses.FailWithMessage(err.Error(), c) return } // 获取app用户信息 //var result *string //if result == nil { // // 新增app用户信息 //} tx.Commit() } // 下发token token := &utils.Token{ UserId: fmt.Sprintf("%d", user.UserId), } // 生成jwt jwt, err := token.NewJWT() if err != nil || jwt == "" { responses.FailWithMessage("登陆失败", c) return } // 处理返回值 g := dto.LoginWxDto(user) // 加载token g.LoadToken(jwt) responses.OkWithData(g, c) }