From 9aded38adc596206f7ae895f23706c22c7f3c001 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 16 Aug 2024 15:39:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=8E=88=E6=9D=83=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 | 108 +++++++++++++++++++++++++--------------- api/requests/Login.go | 7 ++- api/service/User.go | 25 ++++++++-- extend/app/base.go | 33 ++++++++++-- 4 files changed, 124 insertions(+), 49 deletions(-) diff --git a/api/controller/Login.go b/api/controller/Login.go index 2065a7e..8dea3ce 100644 --- a/api/controller/Login.go +++ b/api/controller/Login.go @@ -10,7 +10,6 @@ import ( "hepa-calc-api/api/responses" "hepa-calc-api/api/service" "hepa-calc-api/config" - "hepa-calc-api/extend/weChat" "hepa-calc-api/global" "hepa-calc-api/utils" "time" @@ -66,9 +65,6 @@ func (r *Login) LoginPhone(c *gin.Context) { user, _ := userDao.GetUser(maps) // 新用户处理方式 if user == nil { - // 头像 - avatar := "www.baidu.com" - // 登录ip publicService := service.PublicService{} loginIp := publicService.GetUserIP(c.Request) @@ -83,7 +79,7 @@ func (r *Login) LoginPhone(c *gin.Context) { UnionId: "", Age: nil, Sex: nil, - Avatar: avatar, + Avatar: "", IsMember: 0, MemberExpireDate: nil, LoginIp: loginIp, @@ -187,65 +183,53 @@ func (r *Login) LoginWx(c *gin.Context) { return } - // 获取微信网页授权access_token - webAccessToken, err := weChat.GetWebAccessToken(req.Code) - if err != nil { - responses.FailWithMessage(err.Error(), c) - return - } + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + fmt.Println(r) + tx.Rollback() + } + }() - // 网页授权拉取用户信息 - userInfo, err := weChat.GetUserInfo(webAccessToken.AccessToken, webAccessToken.OpenId) - if err != nil { - responses.FailWithMessage(err.Error(), c) - return - } - fmt.Println(userInfo) + var userInfo *model.UserInfo + var err error // 检测用户信息 userDao := dao.UserDao{} maps := make(map[string]interface{}) - maps["open_id"] = webAccessToken.OpenId + 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() - } - }() + // 登录ip + publicService := service.PublicService{} + loginIp := publicService.GetUserIP(c.Request) // 处理用户头像 userService := service.UserService{} - avatar, err := userService.HandleUserAvatar(userInfo.HeadImgUrl) + avatarOssPath, err := userService.HandleUserImage(req.HeadImgUrl) if err != nil { tx.Rollback() responses.FailWithMessage(err.Error(), c) return } - // 登录ip - publicService := service.PublicService{} - loginIp := publicService.GetUserIP(c.Request) - // 新增用户 user = &model.User{ - UserName: userInfo.Nickname, - Mobile: "", - RegisterSource: req.Source, - OpenId: userInfo.OpenId, - UnionId: userInfo.UnionId, + UserName: "", + AppIden: "", + Mobile: req.Mobile, + RegisterSource: 2, + OpenId: req.OpenId, + UnionId: req.UnionId, Age: nil, - Sex: &userInfo.Sex, - Avatar: avatar, + Sex: nil, + Avatar: avatarOssPath, IsMember: 0, MemberExpireDate: nil, LoginIp: loginIp, } - loginAt := model.LocalTime(time.Now()) user.LoginAt = &loginAt @@ -255,9 +239,51 @@ func (r *Login) LoginWx(c *gin.Context) { responses.FailWithMessage(err.Error(), c) return } - tx.Commit() + + // 新增用户详情 + 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), diff --git a/api/requests/Login.go b/api/requests/Login.go index 2353fec..bb8a329 100644 --- a/api/requests/Login.go +++ b/api/requests/Login.go @@ -7,8 +7,11 @@ type LoginRequest struct { // LoginWx 微信授权登录 type LoginWx struct { - Code string `json:"code" form:"code" label:"授权码" validate:"required"` - Source int `json:"source" form:"source" label:"来源" validate:"required,oneof=1 2"` // (1:app 2:公众号 + Mobile string `json:"mobile" form:"mobile" label:"手机号" validate:"required"` + OpenId string `json:"openid" form:"openid" label:"openid"` + Nickname string `json:"nickname" form:"nickname" label:"用户昵称"` + HeadImgUrl string `json:"headimgurl" form:"headimgurl" label:"头像"` + UnionId string `json:"unionid" form:"unionid" label:"unionid"` } // LoginPhone 手机号登录 diff --git a/api/service/User.go b/api/service/User.go index 850f17a..38e37f7 100644 --- a/api/service/User.go +++ b/api/service/User.go @@ -18,8 +18,8 @@ import ( type UserService struct { } -// HandleUserAvatar 处理用户头像 -func (r *UserService) HandleUserAvatar(wxAvatar string) (avatar string, err error) { +// HandleUserImage 处理用户图片 +func (r *UserService) HandleUserImage(wxAvatar string) (ossPath string, err error) { if wxAvatar == "" { return "", nil } @@ -48,7 +48,7 @@ func (r *UserService) HandleUserAvatar(wxAvatar string) (avatar string, err erro now := time.Now() dateTimeString := now.Format("20060102150405") // 当前时间字符串 rand.New(rand.NewSource(time.Now().UnixNano())) // 设置随机数 - ossPath := "user/avatar/" + dateTimeString + fmt.Sprintf("%d", rand.Intn(9000)+1000) + ".png" + ossPath = "user/avatar/" + dateTimeString + fmt.Sprintf("%d", rand.Intn(9000)+1000) + ".png" // 上传oss _, err = aliyun.PutObjectByte(ossPath, respBody) @@ -375,6 +375,25 @@ func (r *UserService) HandleAppUserInfo(tx *gorm.DB, user *model.User, userInfo } } + // 头像 + if appUserInfo.Data.Photo != "" && user.Avatar == "" { + // 处理app图片前缀 + photo, err := app.HandleImagePrefix(appUserInfo.Data.Photo) + if err != nil { + return err + } + + if photo != "" { + // 处理用户图片,上传至oss + ossPath, err := r.HandleUserImage(appUserInfo.Data.Photo) + if err != nil { + return err + } + + userData["avatar"] = ossPath + } + } + // 修改用户数据 if len(userData) > 0 { userDao := dao.UserDao{} diff --git a/extend/app/base.go b/extend/app/base.go index 22c4053..68e6967 100644 --- a/extend/app/base.go +++ b/extend/app/base.go @@ -2,14 +2,18 @@ package app import ( "encoding/json" + "hepa-calc-api/config" "hepa-calc-api/utils" "sort" + "strings" ) const ( - apiUrl = "https://dev-wx.igandan.com" // 本机认证服务身份证实人认证在线检测接口地址 - secretKey = "RY8pcn04#TSdzHVX6YgWnyCue9!T&QP^" // 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 - platform = "suanyisuan" // 所属平台 + apiUrl = "https://dev-wx.igandan.com" // 本机认证服务身份证实人认证在线检测接口地址 + secretKey = "RY8pcn04#TSdzHVX6YgWnyCue9!T&QP^" // 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 + platform = "suanyisuan" // 所属平台 + devImagePrefix = "https://dev-doc.igandan.com/app" // 测试环境图片地址前缀 + prodImagePrefix = "https://dev-doc.igandan.com/app" // 正式环境图片地址前缀 ) // GenSignature 生成签名信息 @@ -63,3 +67,26 @@ func sortMapRecursively(data map[string]interface{}) map[string]interface{} { return sortedMap } + +// HandleImagePrefix 处理app图片前缀 +func HandleImagePrefix(u string) (string, error) { + if u == "" { + return "", nil + } + + // 去除oss前缀 + u = utils.RemoveOssDomain(u) + + var imgPath string + if config.C.Env == "prod" { + imgPath = strings.Replace(u, devImagePrefix, "", 1) + } else { + imgPath = strings.Replace(u, prodImagePrefix, "", 1) + } + + if imgPath == "/null" { + return "", nil + } + + return imgPath, nil +}