package yb_community_question import ( "errors" "fmt" "hongze/hongze_yb/global" "hongze/hongze_yb/models/response" "hongze/hongze_yb/models/tables/yb_community_question_like_tease" "time" ) // SetLikeOrTease 用户对问答进行(取消)点赞或(取消)吐槽 func SetLikeOrTease(userId uint64, communityQuestionId uint32, opType, enable, sourceAgent, source int8) (ybCommunityQuestionLikeTease *yb_community_question_like_tease.YbCommunityQuestionLikeTease, likeNum, teaseNum int64, err error, errMsg string) { //user.UserID defer func() { if err != nil { global.LOG.Critical(fmt.Sprintf("SetLike: userId=%d, err:%s, errMsg:%s", userId, err.Error(), errMsg)) } }() if sourceAgent == 0 { err = errors.New("请输入来源") return } if communityQuestionId <= 0 { err = errors.New("请输入问答ID") return } // 判断是否有点赞权限(不需要权限校验,先保留,有需要后续再说) //err, errMsg = services.CheckSimpleCompanyProduct(user) //if err != nil { // return //} //查询用户对问答的点赞/吐槽状态 ybCommunityQuestionLikeTease, err = yb_community_question_like_tease.GetByUserIdAndCommunityQuestionId(userId, communityQuestionId, source) if err != nil { errMsg = "查询点赞/吐槽记录出错" return } //如果未点赞则新增点赞记录 now := time.Now() if ybCommunityQuestionLikeTease.CommunityQuestionLikeTeaseID <= 0 { ybCommunityQuestionLikeTease = &yb_community_question_like_tease.YbCommunityQuestionLikeTease{ //CommunityQuestionLikeTeaseID: 0, UserID: userId, OpType: opType, Enabled: 1, CreateTime: now, ModifyTime: now, CommunityQuestionID: communityQuestionId, SourceAgent: sourceAgent, Source: source, } err = ybCommunityQuestionLikeTease.Create() if err != nil { errMsg = err.Error() err = errors.New("新增点赞/吐槽记录出错") return } } else { ybCommunityQuestionLikeTease.OpType = opType ybCommunityQuestionLikeTease.Enabled = enable ybCommunityQuestionLikeTease.SourceAgent = sourceAgent ybCommunityQuestionLikeTease.ModifyTime = now updates := []string{"op_type", "enabled", "source_agent", "modify_time"} err = ybCommunityQuestionLikeTease.Update(updates) if err != nil { errMsg = "更新点赞记录出错" return } } //查询总的点赞数 likeNum, err = yb_community_question_like_tease.GetLikeNumByCommunityQuestionId(communityQuestionId, int(source)) if err != nil { errMsg = err.Error() err = errors.New("查询点赞数出错") } teaseNum, err = yb_community_question_like_tease.GetTeaseNumByCommunityQuestionId(communityQuestionId, int(source)) if err != nil { errMsg = err.Error() err = errors.New("查询吐槽数出错") } return } // HandleLikeOrTeaseByCommunityQuestionItemList 问答 点赞/吐槽 数据 func HandleLikeOrTeaseByCommunityQuestionItemList(userId uint64, questionList []*response.CommunityQuestionItem) (err error) { listLen := len(questionList) if listLen == 0 { return } idArr := make([]uint32, 0) for i := 0; i < listLen; i++ { idArr = append(idArr, uint32(questionList[i].CommunityQuestionID)) } // 获取点赞和吐槽数据 ybCommunityQuestionLikeTeaseMap := make(map[uint32]*yb_community_question_like_tease.YbCommunityQuestionLikeTease) ybCommunityQuestionLikeTeaseList, err := yb_community_question_like_tease.GetByUserIdAndCommunityQuestionIds(userId, idArr, yb_community_question_like_tease.SourceQuestion) if err != nil { return } for _, v := range ybCommunityQuestionLikeTeaseList { ybCommunityQuestionLikeTeaseMap[v.CommunityQuestionID] = v } // 获取点赞和吐槽汇总数 likeMap := make(map[uint32]int) teaseMap := make(map[uint32]int) likeList, err := yb_community_question_like_tease.GetLikeNumCommentByCommunityQuestionIds(idArr, yb_community_question_like_tease.SourceQuestion) if err != nil { return } for _, v := range likeList { likeMap[v.CommunityQuestionID] = v.Total } teaseList, err := yb_community_question_like_tease.GetTeaseNumCommentByCommunityQuestionIds(idArr, yb_community_question_like_tease.SourceQuestion) if err != nil { return } for _, v := range teaseList { teaseMap[v.CommunityQuestionID] = v.Total } for _, v := range questionList { if tmpTotal, ok := likeMap[uint32(v.CommunityQuestionID)]; ok { v.LikeTotal = tmpTotal } if tmpTotal, ok := teaseMap[uint32(v.CommunityQuestionID)]; ok { v.TeaseTotal = tmpTotal } if ybCommunityQuestionLikeTease, ok := ybCommunityQuestionLikeTeaseMap[uint32(v.CommunityQuestionID)]; ok { //类型. 1-点赞 2-吐槽 v.OpType = ybCommunityQuestionLikeTease.OpType } } return }