From 85b01f9002d343497bcd9f4dc8fda16600b73d5b Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 19 Aug 2024 17:17:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=BA=86=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/controller/Login.go | 192 +++++++--------------------------------- api/controller/User.go | 119 +++++++++++++++++++++++++ api/dto/User.go | 7 ++ api/requests/Login.go | 18 ++-- api/requests/User.go | 15 +++- api/router/router.go | 12 ++- api/service/User.go | 8 +- 7 files changed, 190 insertions(+), 181 deletions(-) diff --git a/api/controller/Login.go b/api/controller/Login.go index 8dea3ce..4a47fcf 100644 --- a/api/controller/Login.go +++ b/api/controller/Login.go @@ -17,10 +17,10 @@ import ( type Login struct{} -// LoginPhone 手机号登录 -func (r *Login) LoginPhone(c *gin.Context) { +// Login 登录 +func (r *Login) Login(c *gin.Context) { loginRequest := requests.LoginRequest{} - req := loginRequest.LoginPhone + req := loginRequest.Login if err := c.ShouldBind(&req); err != nil { responses.FailWithMessage(err.Error(), c) return @@ -32,20 +32,6 @@ func (r *Login) LoginPhone(c *gin.Context) { return } - // 检测验证码 - if config.C.Env != "dev" { - code, _ := global.Redis.Get(c, "login_code_count_"+req.Mobile).Result() - if code == "" { - responses.FailWithMessage("验证码失效", c) - return - } - - if req.Code != code { - responses.FailWithMessage("验证码错误", c) - return - } - } - // 开始事务 tx := global.Db.Begin() defer func() { @@ -65,21 +51,44 @@ func (r *Login) LoginPhone(c *gin.Context) { user, _ := userDao.GetUser(maps) // 新用户处理方式 if user == nil { + // 检测验证码 + if config.C.Env != "dev" { + code, _ := global.Redis.Get(c, "login_code_count_"+req.Mobile).Result() + if code == "" { + responses.FailWithMessage("验证码失效", c) + return + } + + if req.Code != code { + responses.FailWithMessage("验证码错误", c) + return + } + } + // 登录ip publicService := service.PublicService{} loginIp := publicService.GetUserIP(c.Request) + // 处理用户头像 + userService := service.UserService{} + avatarOssPath, err := userService.HandleUserImage(req.HeadImgUrl) + if err != nil { + tx.Rollback() + responses.FailWithMessage(err.Error(), c) + return + } + // 新增用户 user = &model.User{ - UserName: "", + UserName: req.Nickname, AppIden: "", Mobile: req.Mobile, RegisterSource: req.Source, - OpenId: "", - UnionId: "", + OpenId: req.OpenId, + UnionId: req.UnionId, Age: nil, Sex: nil, - Avatar: "", + Avatar: avatarOssPath, IsMember: 0, MemberExpireDate: nil, LoginIp: loginIp, @@ -130,7 +139,7 @@ func (r *Login) LoginPhone(c *gin.Context) { // 处理app用户数据 userService := service.UserService{} - err = userService.HandleAppUserInfo(tx, user, userInfo) + err = userService.GetAppUserInfo(tx, user, userInfo) if err != nil { tx.Rollback() responses.FailWithMessage(err.Error(), c) @@ -138,7 +147,7 @@ func (r *Login) LoginPhone(c *gin.Context) { } // 处理app用户病例数据 - err = userService.HandleAppUserCase(tx, user) + err = userService.GetAppUserCase(tx, user) if err != nil { tx.Rollback() responses.FailWithMessage(err.Error(), c) @@ -167,140 +176,3 @@ func (r *Login) LoginPhone(c *gin.Context) { 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 - } - - // 开始事务 - tx := global.Db.Begin() - defer func() { - if r := recover(); r != nil { - fmt.Println(r) - tx.Rollback() - } - }() - - var userInfo *model.UserInfo - var err error - - // 检测用户信息 - userDao := dao.UserDao{} - maps := make(map[string]interface{}) - maps["mobile"] = req.Mobile - user, _ := userDao.GetUser(maps) - // 新用户处理方式 - if user == nil { - // 登录ip - publicService := service.PublicService{} - loginIp := publicService.GetUserIP(c.Request) - - // 处理用户头像 - userService := service.UserService{} - avatarOssPath, err := userService.HandleUserImage(req.HeadImgUrl) - if err != nil { - tx.Rollback() - responses.FailWithMessage(err.Error(), c) - return - } - - // 新增用户 - user = &model.User{ - UserName: "", - AppIden: "", - Mobile: req.Mobile, - RegisterSource: 2, - OpenId: req.OpenId, - UnionId: req.UnionId, - Age: nil, - Sex: nil, - Avatar: avatarOssPath, - IsMember: 0, - MemberExpireDate: nil, - LoginIp: loginIp, - } - loginAt := model.LocalTime(time.Now()) - user.LoginAt = &loginAt - - user, err = userDao.AddUser(tx, user) - if err != nil { - tx.Rollback() - responses.FailWithMessage(err.Error(), c) - return - } - - // 新增用户详情 - userInfo = &model.UserInfo{ - UserId: user.UserId, - Height: "", - Weight: "", - NationId: nil, - IsFamilyHistory: nil, - IsPregnant: nil, - ExpectedDate: nil, - ProvinceId: nil, - Province: "", - CityId: nil, - City: "", - CountyId: nil, - County: "", - } - userInfoDao := dao.UserInfoDao{} - userInfo, err = userInfoDao.AddUserInfo(tx, userInfo) - if err != nil { - tx.Rollback() - responses.FailWithMessage(err.Error(), c) - return - } - } - - // 处理app用户数据 - userService := service.UserService{} - err = userService.HandleAppUserInfo(tx, user, userInfo) - if err != nil { - tx.Rollback() - responses.FailWithMessage(err.Error(), c) - return - } - - // 处理app用户病例数据 - err = userService.HandleAppUserCase(tx, user) - if err != nil { - tx.Rollback() - responses.FailWithMessage(err.Error(), c) - return - } - - 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) -} diff --git a/api/controller/User.go b/api/controller/User.go index 262ae49..dd25cdb 100644 --- a/api/controller/User.go +++ b/api/controller/User.go @@ -85,3 +85,122 @@ func (r *User) PutUser(c *gin.Context) { responses.Ok(c) } + +// PutBindUserName 绑定用户数据-昵称 +func (r *User) PutBindUserName(c *gin.Context) { + userRequest := requests.UserRequest{} + req := userRequest.PutBindUserName + 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 + } + + if req.Nickname == "" { + responses.FailWithMessage("参数错误", c) + return + } + + userId := c.GetInt64("UserId") + + // 获取用户数据 + userDao := dao.UserDao{} + user, err := userDao.GetUserById(userId) + if err != nil { + responses.FailWithMessage("用户数据错误", c) + return + } + + if user.UserName != "" { + responses.Ok(c) + return + } + + userData := make(map[string]interface{}) + userData["user_name"] = req.Nickname + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + err = userDao.EditUserById(tx, user.UserId, userData) + if err != nil { + tx.Rollback() + responses.FailWithMessage(err.Error(), c) + return + } + + tx.Commit() + responses.Ok(c) +} + +// GetUserCheck 检测用户数据绑定状态 +func (r *User) GetUserCheck(c *gin.Context) { + userRequest := requests.UserRequest{} + req := userRequest.GetUserCheck + 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 + } + + if req.Mobile == "" && req.OpenId == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + g := &dto.UserCheckDto{} + + // 获取用户数据 + maps := make(map[string]interface{}) + if req.OpenId != "" { + maps["open_id"] = req.OpenId + } + + if req.Mobile != "" { + maps["mobile"] = req.Mobile + } + + userDao := dao.UserDao{} + user, err := userDao.GetUser(maps) + if err != nil || user == nil { + g.WxStatus = 0 + g.MobileStatus = 0 + g.NameStatus = 0 + responses.OkWithData(g, c) + return + } + + if user.UserStatus == 2 { + responses.FailWithMessage("用户已禁用", c) + return + } + + if user.UserName != "" { + g.NameStatus = 1 + } + + if user.Mobile != "" { + g.MobileStatus = 1 + } + + if user.OpenId != "" { + g.WxStatus = 1 + } + + responses.OkWithData(g, c) +} diff --git a/api/dto/User.go b/api/dto/User.go index b8dd5b3..664bf00 100644 --- a/api/dto/User.go +++ b/api/dto/User.go @@ -28,6 +28,13 @@ type UserDto struct { UpdatedAt model.LocalTime `json:"updated_at"` // 更新时间 } +// UserCheckDto 检测用户 +type UserCheckDto struct { + WxStatus int `json:"wx_status"` // 微信绑定状态(0:否 1:是) + MobileStatus int `json:"mobile_status"` // 手机号绑定状态(0:否 1:是) + NameStatus int `json:"name_status"` // 昵称填写状态(0:否 1:是) +} + // GetUserDto 详情-问题 func GetUserDto(m *model.User) *UserDto { return &UserDto{ diff --git a/api/requests/Login.go b/api/requests/Login.go index bb8a329..abf2ac3 100644 --- a/api/requests/Login.go +++ b/api/requests/Login.go @@ -1,22 +1,16 @@ package requests type LoginRequest struct { - LoginWx // 微信授权登录 - LoginPhone // 手机号登录 + Login // 登录 } -// LoginWx 微信授权登录 -type LoginWx struct { +// Login 登录 +type Login struct { Mobile string `json:"mobile" form:"mobile" label:"手机号" validate:"required"` - OpenId string `json:"openid" form:"openid" label:"openid"` + Code string `json:"code" form:"code" label:"验证码"` + Source int `json:"source" form:"source" label:"来源" validate:"required"` // (1:app 2:公众号 + OpenId string `json:"openid" form:"openid" label:"openid" validate:"required"` Nickname string `json:"nickname" form:"nickname" label:"用户昵称"` HeadImgUrl string `json:"headimgurl" form:"headimgurl" label:"头像"` UnionId string `json:"unionid" form:"unionid" label:"unionid"` } - -// LoginPhone 手机号登录 -type LoginPhone struct { - Mobile string `json:"mobile" form:"mobile" label:"手机号" validate:"required"` - Code string `json:"code" form:"code" label:"验证码" validate:"required"` - Source int `json:"source" form:"source" label:"来源" validate:"required"` // (1:app 2:公众号 -} diff --git a/api/requests/User.go b/api/requests/User.go index 57b5f17..75afa5d 100644 --- a/api/requests/User.go +++ b/api/requests/User.go @@ -1,7 +1,9 @@ package requests type UserRequest struct { - PutUser // 修改用户数据-基本信息 + PutUser // 修改用户数据-基本信息 + PutBindUserName // 绑定用户数据-昵称 + GetUserCheck // 检测用户数据绑定状态 } // PutUser 修改用户数据-基本信息 @@ -20,3 +22,14 @@ type PutUser struct { CityId string `json:"city_id" form:"city_id" label:"城市id" validate:"required"` // 从int转换为可选字符串 CountyId string `json:"county_id" form:"county_id" label:"区县id" validate:"required"` // 从int转换为可选字符串 } + +// PutBindUserName 绑定用户数据-昵称 +type PutBindUserName struct { + Nickname string `json:"nickname" form:"nickname" label:"用户昵称"` +} + +// GetUserCheck 检测用户数据绑定状态 +type GetUserCheck struct { + Mobile string `json:"mobile" form:"mobile" label:"mobile"` + OpenId string `json:"openid" form:"openid" label:"openid"` +} diff --git a/api/router/router.go b/api/router/router.go index 61aa336..b8fe930 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -75,11 +75,15 @@ func publicRouter(r *gin.Engine, api controller.Api) { // 登陆 loginGroup := r.Group("/login") { - // 手机号登录 - loginGroup.POST("/phone", api.Login.LoginPhone) + // 登录 + loginGroup.POST("", api.Login.Login) + } - // 微信授权登录 - loginGroup.POST("/wx", api.Login.LoginWx) + // 用户 + centerGroup := r.Group("/user") + { + // 检测用户数据绑定状态 + centerGroup.GET("/check", api.User.GetUserCheck) } // 验证码 diff --git a/api/service/User.go b/api/service/User.go index c52d543..b343e96 100644 --- a/api/service/User.go +++ b/api/service/User.go @@ -158,8 +158,8 @@ func (r *UserService) AddUserMemberBuyCount(tx *gorm.DB, userId int64) (bool, er return true, nil } -// HandleAppUserInfo 处理app用户数据 -func (r *UserService) HandleAppUserInfo(tx *gorm.DB, user *model.User, userInfo *model.UserInfo) error { +// GetAppUserInfo 查询app用户数据 +func (r *UserService) GetAppUserInfo(tx *gorm.DB, user *model.User, userInfo *model.UserInfo) error { appUserInfo, err := app.GetInfoByMobile(user.Mobile) if err != nil { return err @@ -424,8 +424,8 @@ func (r *UserService) HandleAppUserInfo(tx *gorm.DB, user *model.User, userInfo return nil } -// HandleAppUserCase 处理app用户病例数据 -func (r *UserService) HandleAppUserCase(tx *gorm.DB, user *model.User) error { +// GetAppUserCase 查询app用户病例数据 +func (r *UserService) GetAppUserCase(tx *gorm.DB, user *model.User) error { appUserCase, err := app.GetUserCaseByAppIden(user.AppIden) if err != nil { return err