hsun 2 жил өмнө
parent
commit
29c187fcd0

+ 3 - 3
controller/community/question.go

@@ -138,7 +138,7 @@ func QuestionReply(c *gin.Context) {
 // QuestionReplyRead 已读回复
 // @Tags 问答社区模块
 // @Description 已读回复
-// @Param question_id  query  int  true  "问答ID"
+// @Param question_ids  query  string  true  "问答IDs"
 // @Success 200 {string} string "操作成功"
 // @failure 400 {string} string "操作失败"
 // @Router /question/reply/read [post]
@@ -148,12 +148,12 @@ func QuestionReplyRead(c *gin.Context) {
 		response.Fail("参数有误", c)
 		return
 	}
-	if req.QuestionId == 0 {
+	if req.QuestionIds == "" {
 		response.Fail("参数有误", c)
 		return
 	}
 	userinfo := user.GetInfoByClaims(c)
-	if err := community.ReadQuestionReply(req.QuestionId, userinfo); err != nil {
+	if err := community.ReadQuestionReply(req.QuestionIds, userinfo); err != nil {
 		response.FailMsg("操作失败", "QuestionReplyRead ErrMsg:"+err.Error(), c)
 		return
 	}

+ 1 - 1
models/request/community.go

@@ -29,7 +29,7 @@ type ReplyReqAudioList struct {
 }
 
 type QuestionReadReq struct {
-	QuestionId int `json:"question_id" form:"question_id"`
+	QuestionIds string `json:"question_ids" form:"question_ids"`
 }
 
 type ReplyListTotalReq struct {

+ 1 - 0
models/response/community.go

@@ -10,6 +10,7 @@ type CommunityQuestionItem struct {
 	ChartPermissionID   int                           `json:"chart_permission_id"`
 	ChartPermissionName string                        `json:"chart_permission_name"`
 	IsRead              int                           `json:"is_read"`
+	ReplierIsRead       int                           `json:"replier_is_read"`
 	CreateTime          string                        `json:"create_time"`
 	ReplyTime           string                        `json:"reply_time"`
 	IsTop               int                           `json:"is_top"`

+ 23 - 0
models/tables/yb_community_question/model.go

@@ -5,6 +5,7 @@ import (
 	"hongze/hongze_yb/global"
 	"hongze/hongze_yb/models/tables/yb_community_question_audio"
 	"hongze/hongze_yb/utils"
+	"time"
 )
 
 func (item *YbCommunityQuestion) Create() (err error) {
@@ -90,3 +91,25 @@ func GetUnreadNum(where map[string]interface{}) (num int64, err error) {
 	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestion{}).Where(cond, vals...).Count(&num).Error
 	return
 }
+
+// UpdateReplierRead 更新回复人已读
+func UpdateReplierRead(replierUserId int, questionIds []int) (err error) {
+	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestion{}).
+		Where("replier_user_id = ? AND community_question_id IN (?)", replierUserId, questionIds).
+		Updates(YbCommunityQuestion{
+			ReplierIsRead: 1,
+			ModifyTime: time.Now().Local(),
+		}).Error
+	return
+}
+
+// UpdateUserRead 更新用户已读
+func UpdateUserRead(userId int, questionIds []int) (err error) {
+	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestion{}).
+		Where("user_id = ? AND community_question_id IN (?)", userId, questionIds).
+		Updates(YbCommunityQuestion{
+			IsRead: 1,
+			ModifyTime: time.Now().Local(),
+		}).Error
+	return
+}

+ 25 - 24
services/community/question.go

@@ -12,6 +12,8 @@ import (
 	"hongze/hongze_yb/services/user"
 	"hongze/hongze_yb/services/wechat"
 	"hongze/hongze_yb/utils"
+	"strconv"
+	"strings"
 	"time"
 )
 
@@ -98,6 +100,7 @@ func GetQuestionList(pageIndex, pageSize, onlyMine, chartPermissionId, replyStat
 			ChartPermissionID:   v.CommunityQuestionID,
 			ChartPermissionName: v.ChartPermissionName,
 			IsRead:              v.IsRead,
+			ReplierIsRead:       v.ReplierIsRead,
 			ReplyStatus:         v.ReplyStatus,
 			CreateTime:          v.CreateTime.Format(utils.FormatDateTime),
 			ReplyTime:           v.ReplyTime.Format(utils.FormatDateTime),
@@ -156,6 +159,7 @@ func GetQuestionDetail(questionId int, userInfo user.UserInfo) (item *response.C
 		ChartPermissionID:   detail.ChartPermissionID,
 		ChartPermissionName: detail.ChartPermissionName,
 		IsRead:              detail.IsRead,
+		ReplierIsRead:       detail.ReplierIsRead,
 		ReplyStatus:         detail.ReplyStatus,
 		CreateTime:          detail.CreateTime.Format(utils.FormatDateTime),
 		ReplyTime:           detail.ReplyTime.Format(utils.FormatDateTime),
@@ -236,34 +240,31 @@ func ReplyUserQuestion(replierId, questionId int, audios []*request.ReplyReqAudi
 }
 
 // ReadQuestionReply 回复已读
-func ReadQuestionReply(questionId int, userInfo user.UserInfo) (err error) {
-	item, e := yb_community_question.GetItemById(questionId)
-	if e != nil {
-		err = errors.New("获取提问信息失败 Err:" + e.Error())
+func ReadQuestionReply(questionIds string, userInfo user.UserInfo) (err error) {
+	if questionIds == "" {
 		return
 	}
-	if item.IsRead == 1 && item.ReplierIsRead == 1 {
+	questionIdArr := make([]int, 0)
+	questionIdStrArr := strings.Split(questionIds, ",")
+	for _, v := range questionIdStrArr {
+		i, _ := strconv.Atoi(v)
+		questionIdArr = append(questionIdArr, i)
+	}
+	if len(questionIdArr) == 0 {
 		return
 	}
-	if item.UserID == int(userInfo.UserID) {
-		isAdmin, _, e := user.GetAdminByUserInfo(userInfo)
-		if e != nil {
-			err = errors.New("获取用户身份失败 Err:" + e.Error())
-			return
-		}
-		updateCols := make([]string, 0)
-		updateCols = append(updateCols, "modify_time")
-		if isAdmin {
-			updateCols = append(updateCols, "replier_is_read")
-			item.ReplierIsRead = 1
-		} else {
-			updateCols = append(updateCols, "is_read")
-			item.IsRead = 1
-		}
-		item.ModifyTime = time.Now().Local()
-		if e = item.Update(updateCols); e != nil {
-			err = errors.New("更新问题已读失败 Err:" + e.Error())
-		}
+	isAdmin, _, e := user.GetAdminByUserInfo(userInfo)
+	if e != nil {
+		err = errors.New("获取用户身份失败 Err:" + e.Error())
+		return
+	}
+	if isAdmin {
+		e = yb_community_question.UpdateReplierRead(int(userInfo.UserID), questionIdArr)
+	} else {
+		e = yb_community_question.UpdateUserRead(int(userInfo.UserID), questionIdArr)
+	}
+	if e != nil {
+		err = errors.New("更新问答已读失败 Err:" + e.Error())
 	}
 	return
 }