Roc 2 年之前
父節點
當前提交
33b5fd6bb5

+ 30 - 2
controller/community/question.go

@@ -5,11 +5,15 @@ import (
 	"github.com/gin-gonic/gin"
 	"hongze/hongze_yb/controller/response"
 	"hongze/hongze_yb/global"
+	"hongze/hongze_yb/logic/yb_community_question_like_roast"
 	"hongze/hongze_yb/models/request"
+
 	respond "hongze/hongze_yb/models/response"
+	responseModel "hongze/hongze_yb/models/response"
 	"hongze/hongze_yb/services"
 	"hongze/hongze_yb/services/community"
 	"hongze/hongze_yb/services/user"
+	userService "hongze/hongze_yb/services/user"
 	"hongze/hongze_yb/services/wx_app"
 	"hongze/hongze_yb/utils"
 	"io/ioutil"
@@ -285,7 +289,7 @@ func QuestionUnread(c *gin.Context) {
 // @Success 200 {int} int "获取成功"
 // @failure 400 {string} string "获取失败"
 // @Router /question/research_group [get]
-func ResearchGroupList(c *gin.Context)  {
+func ResearchGroupList(c *gin.Context) {
 	list, err := community.GetResearchGroupTree()
 	if err != nil {
 		fmt.Println(err.Error())
@@ -323,4 +327,28 @@ func AddAudioLog(c *gin.Context) {
 		return
 	}
 	response.Ok("操作成功", c)
-}
+}
+
+// SetLikeOrRoast 问答点赞/吐槽设置
+func SetLikeOrRoast(c *gin.Context) {
+	var req request.ReqCommunityQuestionLikeRoast
+	if c.ShouldBind(&req) != nil {
+		response.Fail("参数异常", c)
+		return
+	}
+	userinfo := userService.GetInfoByClaims(c)
+
+	communityQuestionLikeRoast, likeNum, roastNum, err, errMsg := yb_community_question_like_roast.SetLikeOrRoast(userinfo.UserID, req.CommunityQuestionId, req.OpType, req.Enable, req.SourceAgent)
+	if err != nil {
+		response.FailMsg(errMsg, err.Error(), c)
+		return
+	}
+
+	response.OkData("操作成功", responseModel.RespCommunityQuestionLikeRoast{
+		LikeNum:  likeNum,
+		RoastNum: roastNum,
+		Enabled:  communityQuestionLikeRoast.Enabled,
+	}, c)
+
+	return
+}

+ 2 - 2
controller/like/like.go

@@ -9,7 +9,7 @@ import (
 )
 
 // SetLike 点赞设置
-func SetLike(c *gin.Context)  {
+func SetLike(c *gin.Context) {
 	var req like.ReqLike
 	if c.ShouldBind(&req) != nil {
 		response.Fail("参数异常", c)
@@ -22,6 +22,6 @@ func SetLike(c *gin.Context)  {
 		response.Fail(err.Error(), c)
 		return
 	}
-	response.OkData("操作成功", data, c )
+	response.OkData("操作成功", data, c)
 	return
 }

+ 82 - 0
logic/yb_community_question_like_roast/yb_community_question_like_roast.go

@@ -0,0 +1,82 @@
+package yb_community_question_like_roast
+
+import (
+	"errors"
+	"fmt"
+	"hongze/hongze_yb/global"
+	"hongze/hongze_yb/models/tables/yb_community_question_like_roast"
+	"time"
+)
+
+// SetLikeOrRoast 用户对问答进行(取消)点赞或(取消)吐槽
+func SetLikeOrRoast(userId uint64, communityQuestionId uint32, opType, enable, sourceAgent int8) (ybCommunityQuestionLikeRoast *yb_community_question_like_roast.YbCommunityQuestionLikeRoast, likeNum, roastNum 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
+	//}
+
+	//查询用户对问答的点赞/吐槽状态
+	ybCommunityQuestionLikeRoast, err = yb_community_question_like_roast.GetByUserIdAndCommunityQuestionId(userId, communityQuestionId)
+	if err != nil {
+		errMsg = "查询点赞/吐槽记录出错"
+		return
+	}
+	//如果未点赞则新增点赞记录
+	now := time.Now()
+	if ybCommunityQuestionLikeRoast.CommunityQuestionLikeRoastID <= 0 {
+		ybCommunityQuestionLikeRoast = &yb_community_question_like_roast.YbCommunityQuestionLikeRoast{
+			//CommunityQuestionLikeRoastID: 0,
+			UserID:              userId,
+			OpType:              opType,
+			Enabled:             1,
+			CreateTime:          now,
+			ModifyTime:          now,
+			CommunityQuestionID: communityQuestionId,
+			SourceAgent:         sourceAgent,
+		}
+		err = ybCommunityQuestionLikeRoast.Create()
+		if err != nil {
+			errMsg = err.Error()
+			err = errors.New("新增点赞/吐槽记录出错")
+			return
+		}
+	} else {
+		ybCommunityQuestionLikeRoast.OpType = opType
+		ybCommunityQuestionLikeRoast.Enabled = enable
+		ybCommunityQuestionLikeRoast.ModifyTime = now
+		updates := []string{"op_type", "enabled", "modify_time"}
+		err = ybCommunityQuestionLikeRoast.Update(updates)
+		if err != nil {
+			errMsg = "更新点赞记录出错"
+			return
+		}
+	}
+	//查询总的点赞数
+	likeNum, err = yb_community_question_like_roast.GetLikeNumByCommunityQuestionId(communityQuestionId)
+	if err != nil {
+		errMsg = err.Error()
+		err = errors.New("查询点赞数出错")
+	}
+	roastNum, err = yb_community_question_like_roast.GetRoastNumByCommunityQuestionId(communityQuestionId)
+	if err != nil {
+		errMsg = err.Error()
+		err = errors.New("查询吐槽数出错")
+	}
+	return
+}

+ 9 - 1
models/request/community.go

@@ -40,4 +40,12 @@ type ReplyListTotalReq struct {
 type CommunityAudioListenLogReq struct {
 	CommunityQuestionAudioID int `json:"community_question_audio_id"` //音频ID
 	SourceAgent              int `json:"source_agent"`                //操作来源,1:小程序,2:小程序 pc 3:弘则研究公众号,4:web pc
-}
+}
+
+// ReqCommunityQuestionLikeRoast 问答点赞/吐槽请求
+type ReqCommunityQuestionLikeRoast struct {
+	CommunityQuestionId uint32 `description:"问答id" json:"community_question_id" `
+	OpType              int8   `description:"类型. 1-点赞 2-吐槽" json:"op_type"`
+	Enable              int8   `description:"状态. 0-无效数据(已取消点赞/吐槽) 1-有效数据(点赞/吐槽)" json:"enable"`
+	SourceAgent         int8   `description:"点赞入口来源,1:小程序,2:小程序pc" json:"source_agent"`
+}

+ 24 - 17
models/response/community.go

@@ -1,25 +1,25 @@
 package response
 
 type CommunityQuestionItem struct {
-	CommunityQuestionID     int                           `json:"community_question_id"`
-	UserId                  int                           `json:"user_id"`
-	QuestionContent         string                        `json:"question_content"`
-	ReplierRealName         string                        `json:"replier_real_name"`
-	ReplierRank             string                        `json:"replier_rank"`
-	ReplierAvatar           string                        `json:"replier_avatar"`
-	ChartPermissionID       int                           `json:"chart_permission_id"`
-	ChartPermissionName     string                        `json:"chart_permission_name"`
-	ResearchGroupSecondId   int                           `json:"research_group_second_id"`
-	ResearchGroupSecondName string                        `json:"research_group_second_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"`
-	ReplyStatus             int                           `json:"reply_status" description:"回复状态 1-待分配 2-待回答 3-已回答"`
+	CommunityQuestionID     int    `json:"community_question_id"`
+	UserId                  int    `json:"user_id"`
+	QuestionContent         string `json:"question_content"`
+	ReplierRealName         string `json:"replier_real_name"`
+	ReplierRank             string `json:"replier_rank"`
+	ReplierAvatar           string `json:"replier_avatar"`
+	ChartPermissionID       int    `json:"chart_permission_id"`
+	ChartPermissionName     string `json:"chart_permission_name"`
+	ResearchGroupSecondId   int    `json:"research_group_second_id"`
+	ResearchGroupSecondName string `json:"research_group_second_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"`
+	ReplyStatus             int    `json:"reply_status" description:"回复状态 1-待分配 2-待回答 3-已回答"`
 	//AuthOk                  bool                          `json:"auth_ok" description:"是否有权限"`
 	//PermissionInfo          PermissionCheckInfo           `json:"permission_info"`
-	AudioList               []*CommunityQuestionAudioItem `json:"audio_list"`
+	AudioList []*CommunityQuestionAudioItem `json:"audio_list"`
 }
 
 type CommunityQuestionAudioItem struct {
@@ -59,3 +59,10 @@ type ResearchGroupMember struct {
 	AdminId   int    `json:"admin_id"`
 	AdminName string `json:"admin_name"`
 }
+
+// RespCommunityQuestionLikeRoast
+type RespCommunityQuestionLikeRoast struct {
+	LikeNum  int64 `description:"点赞总数" json:"like_num"`
+	RoastNum int64 `description:"吐槽总数" json:"roast_num"`
+	Enabled  int8  `description:"本次点赞/吐槽结果: 0-已取消赞 1-有效赞" json:"like_enabled"`
+}

+ 8 - 0
models/tables/yb_community_question_like_roast/create.go

@@ -0,0 +1,8 @@
+package yb_community_question_like_roast
+
+import "hongze/hongze_yb/global"
+
+func (item *YbCommunityQuestionLikeRoast) Create() (err error) {
+	err = global.DEFAULT_MYSQL.Create(item).Error
+	return
+}

+ 33 - 0
models/tables/yb_community_question_like_roast/query.go

@@ -0,0 +1,33 @@
+package yb_community_question_like_roast
+
+import (
+	"hongze/hongze_yb/global"
+	"hongze/hongze_yb/utils"
+)
+
+// GetByUserIdAndCommunityQuestionId 根据用户和问答id获取点赞/吐槽记录
+func GetByUserIdAndCommunityQuestionId(userId uint64, communityQuestionId uint32) (item *YbCommunityQuestionLikeRoast, err error) {
+	err = global.DEFAULT_MYSQL.
+		Where("user_id = ? and community_question_id = ?", userId, communityQuestionId).
+		First(&item).Error
+	if err == utils.ErrNoRow {
+		err = nil
+	}
+	return
+}
+
+// GetLikeNumByCommunityQuestionId 获取某个问答的点赞数
+func GetLikeNumByCommunityQuestionId(communityQuestionId uint32) (num int64, err error) {
+	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestionLikeRoast{}).
+		Where(" community_question_id = ? AND enabled=1 AND op_type = 1 ", communityQuestionId).
+		Count(&num).Error
+	return
+}
+
+// GetRoastNumByCommunityQuestionId 获取某个问答的吐槽数
+func GetRoastNumByCommunityQuestionId(communityQuestionId uint32) (num int64, err error) {
+	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestionLikeRoast{}).
+		Where(" community_question_id = ? AND enabled=1 AND op_type = 2 ", communityQuestionId).
+		Count(&num).Error
+	return
+}

+ 9 - 0
models/tables/yb_community_question_like_roast/update.go

@@ -0,0 +1,9 @@
+package yb_community_question_like_roast
+
+import "hongze/hongze_yb/global"
+
+// Update 更新对应字段数据
+func (item *YbCommunityQuestionLikeRoast) Update(updateCols []string) (err error) {
+	err = global.DEFAULT_MYSQL.Model(item).Select(updateCols).Updates(*item).Error
+	return
+}

+ 43 - 0
models/tables/yb_community_question_like_roast/yb_community_question_like_roast.go

@@ -0,0 +1,43 @@
+package yb_community_question_like_roast
+
+import (
+	"time"
+)
+
+// YbCommunityQuestionLikeRoast 问答点赞/吐槽表
+type YbCommunityQuestionLikeRoast struct {
+	CommunityQuestionLikeRoastID uint64    `gorm:"primaryKey;column:community_question_like_roast_id;type:bigint(20) unsigned;not null" json:"-"`    // 点赞/吐槽自增id
+	UserID                       uint64    `gorm:"column:user_id;type:bigint(20) unsigned;not null;default:0" json:"userId"`                         // 用户id
+	OpType                       int8      `gorm:"column:op_type;type:tinyint(1);not null;default:1" json:"opType"`                                  // 类型. 1-点赞 2-吐槽
+	Enabled                      int8      `gorm:"column:enabled;type:tinyint(1);not null;default:1" json:"enabled"`                                 // 状态. 0-无效数据(已取消点赞/吐槽) 1-有效数据(点赞/吐槽)
+	CreateTime                   time.Time `gorm:"column:create_time;type:datetime;not null;default:CURRENT_TIMESTAMP" json:"createTime"`            // 创建时间
+	ModifyTime                   time.Time `gorm:"column:modify_time;type:datetime;not null;default:CURRENT_TIMESTAMP" json:"modifyTime"`            // 修改时间
+	CommunityQuestionID          uint32    `gorm:"column:community_question_id;type:int(10) unsigned;not null;default:0" json:"communityQuestionId"` // 问答ID
+	SourceAgent                  int8      `gorm:"column:source_agent;type:tinyint(1);not null;default:0" json:"sourceAgent"`                        // 点赞/吐槽入口来源,1:小程序,2:小程序pc, 4:web pc
+}
+
+// TableName get sql table name.获取数据库表名
+func (m *YbCommunityQuestionLikeRoast) TableName() string {
+	return "yb_community_question_like_roast"
+}
+
+// YbCommunityQuestionLikeRoastColumns get sql column name.获取数据库列名
+var YbCommunityQuestionLikeRoastColumns = struct {
+	CommunityQuestionLikeRoastID string
+	UserID                       string
+	OpType                       string
+	Enabled                      string
+	CreateTime                   string
+	ModifyTime                   string
+	CommunityQuestionID          string
+	SourceAgent                  string
+}{
+	CommunityQuestionLikeRoastID: "community_question_like_roast_id",
+	UserID:                       "user_id",
+	OpType:                       "op_type",
+	Enabled:                      "enabled",
+	CreateTime:                   "create_time",
+	ModifyTime:                   "modify_time",
+	CommunityQuestionID:          "community_question_id",
+	SourceAgent:                  "source_agent",
+}

+ 3 - 2
routers/community.go

@@ -6,7 +6,7 @@ import (
 	"hongze/hongze_yb/middleware"
 )
 
-func InitCommunity(r *gin.Engine)  {
+func InitCommunity(r *gin.Engine) {
 	rGroup := r.Group("api/community").Use(middleware.Token(), middleware.CheckBaseAuth())
 	rGroup.GET("/question/list", community.QuestionList)
 	rGroup.GET("/question/detail", community.QuestionDetail)
@@ -18,4 +18,5 @@ func InitCommunity(r *gin.Engine)  {
 	rGroup.GET("/question/unread", community.QuestionUnread)
 	rGroup.GET("/question/research_group", community.ResearchGroupList)
 	rGroup.POST("/question/audio/log", community.AddAudioLog)
-}
+	rGroup.POST("/set_like_or_roast", community.SetLikeOrRoast)
+}