Browse Source

个人中心 设置头像和昵称

xiexiaoyuan 2 years ago
parent
commit
78c1c9d285

+ 29 - 0
controller/user/user.go

@@ -264,3 +264,32 @@ func GetTabBar(c *gin.Context) {
 
 	response.OkData("获取成功", tabBarList, c)
 }
+
+// SetUserInfo 设置用户个人信息(头像和昵称)
+func SetUserInfo(c *gin.Context) {
+	var req user.SetUserInfoReq
+	if c.ShouldBind(&req) != nil {
+		response.Fail("参数异常", c)
+		return
+	}
+	// 去掉首尾空格
+	req.NickName = strings.Trim(req.NickName, "")
+	req.HeadImgUrl = strings.Trim(req.HeadImgUrl, "")
+	if req.NickName == "" {
+		response.Fail("请输入昵称", c)
+		return
+	}
+
+	if req.HeadImgUrl == "" {
+		response.Fail("请上传头像", c)
+		return
+	}
+	userInfo := userService.GetInfoByClaims(c)
+
+	err := userLogic.SetUserInfo(userInfo, req)
+	if err != nil {
+		response.Fail(err.Error(), c)
+		return
+	}
+	response.Ok("更新成功", c)
+}

+ 25 - 1
logic/user/user.go

@@ -110,7 +110,9 @@ type Detail struct {
 	PermissionList []CompanyPermission `json:"permission_list" description:"权限列表"`
 	IsInner		   int				   `json:"is_inner" description:"是否为内部员工"`
 	AdminInfo      *admin2.Admin	   `json:"admin_info" description:"系统管理员信息"`
-	UnRead         int64                 `json:"un_read" description:"消息未读数"`
+	UnRead         int64               `json:"un_read" description:"消息未读数"`
+	NickName       string              `json:"nick_name" description:"用户昵称"`
+	HeadImgUrl     string              `json:"headImgUrl" description:"用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空"`
 }
 
 // GetUserInfo 获取用户我的页面详情数据
@@ -226,11 +228,33 @@ func GetUserInfo(userInfo user.UserInfo) (userDetail Detail, err error, errMsg s
 		IsInner: 		isInner,			// 是否为内部员工
 		AdminInfo: 		adminInfo,			// 系统管理员信息
 		UnRead:         unRead,
+		NickName:       userInfo.NickName,
+		HeadImgUrl:     userInfo.Headimgurl,
 	}
 
 	return
 }
 
+// SetUserInfo 设置用户的个人信息,头像和昵称
+func SetUserInfo(userInfo user.UserInfo, req userReq.SetUserInfoReq) (err error) {
+	// todo 用户如果没有设置头像,用默认头像也允许上传
+	// 校验昵称长度
+	// 校验头像地址是否正确
+	if !strings.Contains(req.HeadImgUrl, "http://") && !strings.Contains(req.HeadImgUrl, "https://")  {
+		err = errors.New("上传头像出错")
+		return
+	}
+	wxUser := userInfo.WxUser
+	wxUser.NickName = req.NickName
+	wxUser.Headimgurl = req.HeadImgUrl
+	err = wxUser.Update([]string{"nick_name","headimgurl"})
+	if err != nil {
+		err = errors.New("更新用户信息操作失败")
+		return
+	}
+	return
+}
+
 type Record struct {
 	BusinessCardURL string `json:"business_card_url" description:"名片"`
 	RealName        string `json:"real_name" description:"姓名"`

+ 5 - 0
models/request/user/user.go

@@ -17,3 +17,8 @@ type ApplyReq struct {
 	SourceAgent     int    `description:"申请入口来源,1:小程序,2:pc" json:"source_agent"`
 	FromPage        string `description:"申请来源页面" json:"from_page"`
 }
+
+type SetUserInfoReq struct {
+	NickName            string    `description:"用户昵称" json:"nick_name"`
+	HeadImgUrl          string    `description:"用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空" json:"head_img_url"`
+}

+ 2 - 2
models/response/comment.go

@@ -14,7 +14,7 @@ type RespCommentItem struct {
 	IsHot             int8 `description:"是否设置精选(0-未设置,1-已设置)json:"is_hot""`
 	HotTopTime        time.Time `description:"设置精选或者设置置顶的时间" json:"hot_top_time"`
 	UserName          string `description:"用户昵称" json:"user_name"`
-	UserImg           string `description:"用户头像" json:"user_img"`
+	UserImgUrl           string `description:"用户头像" json:"user_img_url"`
 	CreateTime        time.Time `description:"留言创建时间" json:"create_time"`
 	ReplyList        []*ReplyItem
 }
@@ -23,7 +23,7 @@ type ReplyItem struct {
 	CommentId         uint64 `description:"留言ID" json:"comment_id"`
 	AdminId           uint64 `description:"发布留言回复的管理员ID" json:"admin_id"`
 	AdminName         string `description:"系统昵称" json:"admin_name"`
-	AdminImg          string `description:"系统头像" json:"admin_img"`
+	AdminImgUrl          string `description:"系统头像" json:"admin_img_url"`
 	Content           string `description:"回复内容" json:"content"`
 	ReplyCommentId    uint64 `description:"回复的留言ID" json:"reply_comment_id"`
 	CreateTime        time.Time `description:"留言创建时间" json:"create_time"`

+ 6 - 0
models/tables/wx_user/query.go

@@ -34,3 +34,9 @@ func GetByUserId(userId int) (wxUser *WxUser, err error) {
 	err = global.DEFAULT_MYSQL.Where("user_id =  ? ", userId).First(&wxUser).Error
 	return
 }
+
+// GetByUserIds 根据user_id获取用户信息
+func GetByUserIds(userIds []uint64) (list []*WxUser, err error) {
+	err = global.DEFAULT_MYSQL.Model(WxUser{}).Where("user_id in  ? ", userIds).Scan(&list).Error
+	return
+}

+ 1 - 0
routers/user.go

@@ -41,6 +41,7 @@ func initUser(r *gin.Engine) {
 		rGroup2.GET("/get_last_apply_record", user.GetLastApplyRecord)
 		rGroup2.POST("/apply", user.Apply)
 		rGroup2.GET("/get_tab_bar", user.GetTabBar)
+		rGroup2.POST("/set", user.SetUserInfo)
 	}
 
 }

+ 35 - 4
services/comment/comment.go

@@ -8,8 +8,10 @@ import (
 	"hongze/hongze_yb/models/response"
 	report "hongze/hongze_yb/models/tables/rddp/report"
 	"hongze/hongze_yb/models/tables/rddp/report_chapter"
+	"hongze/hongze_yb/models/tables/wx_user"
 	"hongze/hongze_yb/models/tables/yb_comment"
 	"hongze/hongze_yb/services/user"
+	"hongze/hongze_yb/utils"
 	"time"
 )
 
@@ -181,8 +183,10 @@ func List(user user.UserInfo,  reportId, reportChapterId int, hotFlag bool, page
 	}
 
 	var commentIds []uint64
+	var userIds []uint64
 	for _, v := range commentList {
 		commentIds = append(commentIds, v.CommentId)
+		userIds = append(userIds, v.UserId)
 	}
 	// 查询所有的回复列表
 	replyListMap := make(map[uint64][]*response.ReplyItem)
@@ -199,18 +203,45 @@ func List(user user.UserInfo,  reportId, reportChapterId int, hotFlag bool, page
 			t.Content = v.Content
 			t.AdminId = v.AdminId
 			t.CreateTime = v.CreateTime
-			t.AdminName = ""
-			t.AdminImg = ""
+			t.AdminName = "弘则研究"
+			t.AdminImgUrl = utils.DEFAULT_HONGZE_SYS_LOGO
 			replyListMap[v.ReplyCommentId] = append(replyListMap[v.ReplyCommentId], t)
 		}
 	}
+
+	// 查询精选留言相关的用户
+	var userOthers []*wx_user.WxUser
+	if len(userIds) > 0 {
+		userOthers, err = wx_user.GetByUserIds(userIds)
+		if err != nil {
+			errMsg = err.Error()
+			err = errors.New("查询精选留言用户出错")
+			return
+		}
+	}
+	usersMap := make(map[uint64]*wx_user.WxUser)
+	for _, v := range userOthers {
+		usersMap[v.UserID] = v
+	}
 	var list []*response.RespCommentItem
 	for _, v := range commentList {
 		tmp := new(response.RespCommentItem)
 		tmp.CommentId = v.CommentId
 		tmp.UserId = v.UserId
-		tmp.UserName = ""
-		tmp.UserImg = ""
+		tmp.UserName = "匿名用户"
+		tmp.UserImgUrl = utils.DEFAULT_HONGZE_USER_LOGO
+		if info, ok := usersMap[v.UserId]; ok {
+			if v.IsShowName == 1 {   //是否匿名 0-匿名,1-不匿名
+				tmp.UserName = info.NickName
+				tmp.UserImgUrl = info.Headimgurl
+			}else{
+				if info.Mobile != "" {
+					tmp.UserName += info.Mobile[7:]
+				}else if info.OpenID != "" {
+					tmp.UserName += info.OpenID[3:8]
+				}
+			}
+		}
 		tmp.Content = v.Content
 		tmp.IsHot = v.IsHot
 		tmp.IsTop = v.IsTop

+ 2 - 2
services/user/user.go

@@ -232,10 +232,10 @@ func GetFirstWxUserItemByUnionId(unionId string) (userInfo UserInfo, err error)
 func formatWxUserAndUserRecord(wxUser *wx_user.WxUser, userRecord *user_record.UserRecord) (userInfo UserInfo) {
 	wxUser.OpenID = userRecord.OpenID
 	wxUser.UnionID = userRecord.UnionID
-	wxUser.NickName = userRecord.NickName
+	//wxUser.NickName = userRecord.NickName
 	//wxUser.RealName = userRecord.RealName
 	//wxUser.BindAccount = userRecord.BindAccount
-	wxUser.Headimgurl = userRecord.Headimgurl
+	//wxUser.Headimgurl = userRecord.Headimgurl
 
 	wxUserJson, _ := json.Marshal(wxUser)
 	_ = json.Unmarshal(wxUserJson, &userInfo)

+ 5 - 0
utils/constants.go

@@ -121,3 +121,8 @@ var (
 const ALIYUN_YBIMG_HOST = "https://hzstatic.hzinsights.com/static/yb_wx/"
 
 const HZPHONE = "057187186319"    //弘则电话
+
+const (
+	DEFAULT_HONGZE_USER_LOGO = "个人默认头像"    //个人中心默认头像、匿名用户留言默认头像
+	DEFAULT_HONGZE_SYS_LOGO = ""     //弘则官方默认头像
+)