From 5a9497222809304a3a1de9a87578372279cc4a20 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 29 Jul 2024 10:27:56 +0800 Subject: [PATCH] 3 --- api/controller/Question.go | 96 ++++++++++++++++++++++++++++++++++++++ api/dao/Question.go | 18 +++++++ api/dto/User.go | 4 +- api/requests/Question.go | 2 +- api/requests/UserCoupon.go | 4 +- api/router/router.go | 22 +++++++-- 6 files changed, 137 insertions(+), 9 deletions(-) diff --git a/api/controller/Question.go b/api/controller/Question.go index 7c51936..916e9aa 100644 --- a/api/controller/Question.go +++ b/api/controller/Question.go @@ -246,3 +246,99 @@ func (r *Question) GetQuestionBuyStatus(c *gin.Context) { responses.OkWithData(status, c) } + +// PutQuestionClickCount 增加问题点击次数 +func (r *Question) PutQuestionClickCount(c *gin.Context) { + id := c.Param("question_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + questionId, err := strconv.ParseInt(id, 10, 64) + if err != nil { + responses.Fail(c) + return + } + + // 获取题目数据 + questionDao := dao.QuestionDao{} + question, err := questionDao.GetQuestionById(questionId) + if err != nil { + responses.FailWithMessage("题目错误", c) + return + } + + if question.QuestionStatus != 1 { + responses.FailWithMessage("题目错误", c) + return + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + err = questionDao.Inc(tx, questionId, "click_count", 1) + if err != nil { + tx.Rollback() + responses.FailWithMessage("内部错误", c) + return + } + + tx.Commit() + + responses.Ok(c) +} + +// PutQuestionSubmitCount 增加问题提交次数 +func (r *Question) PutQuestionSubmitCount(c *gin.Context) { + id := c.Param("question_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + questionId, err := strconv.ParseInt(id, 10, 64) + if err != nil { + responses.Fail(c) + return + } + + // 获取题目数据 + questionDao := dao.QuestionDao{} + question, err := questionDao.GetQuestionById(questionId) + if err != nil { + responses.FailWithMessage("题目错误", c) + return + } + + if question.QuestionStatus != 1 { + responses.FailWithMessage("题目错误", c) + return + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + err = questionDao.Inc(tx, questionId, "submit_count", 1) + if err != nil { + tx.Rollback() + responses.FailWithMessage("内部错误", c) + return + } + + tx.Commit() + + responses.Ok(c) +} diff --git a/api/dao/Question.go b/api/dao/Question.go index 9a3fc33..bf4ce6e 100644 --- a/api/dao/Question.go +++ b/api/dao/Question.go @@ -251,3 +251,21 @@ func (r *QuestionDao) GetQuestionPageSearch(req requests.GetQuestionPage, page, } return m, totalRecords, nil } + +// Inc 自增 +func (r *QuestionDao) Inc(tx *gorm.DB, questionId int64, field string, numeral int) error { + err := tx.Model(&model.Question{}).Where("question_id = ?", questionId).UpdateColumn(field, gorm.Expr(field+" + ?", numeral)).Error + if err != nil { + return err + } + return nil +} + +// Dec 自减 +func (r *QuestionDao) Dec(tx *gorm.DB, questionId int64, field string, numeral int) error { + err := tx.Model(&model.Question{}).Where("question_id = ?", questionId).UpdateColumn(field, gorm.Expr(field+" - ?", numeral)).Error + if err != nil { + return err + } + return nil +} diff --git a/api/dto/User.go b/api/dto/User.go index 696a52a..d9f36a7 100644 --- a/api/dto/User.go +++ b/api/dto/User.go @@ -16,7 +16,7 @@ type UserDto struct { RegisterSource int `json:"register_source"` // 注册来源(1:app注册 2:公众号注册) OpenId string `json:"open_id"` // 用户微信标识 UnionId string `json:"union_id"` // 微信开放平台标识 - Age uint `json:"age"` // 年龄 + Age *uint `json:"age"` // 年龄 Sex uint `json:"sex"` // 性别(0:未知 1:男 2:女) Avatar string `json:"avatar"` // 头像 IsMember int `json:"is_member"` // 是否会员(0:否 1:是) @@ -35,7 +35,7 @@ func GetUserDto(m *model.User) *UserDto { Mobile: m.Mobile, UserStatus: m.UserStatus, RegisterSource: m.RegisterSource, - Age: *m.Age, + Age: m.Age, Sex: uint(m.Sex), Avatar: utils.AddOssDomain(m.Avatar), IsMember: m.IsMember, diff --git a/api/requests/Question.go b/api/requests/Question.go index 834c44e..f05d873 100644 --- a/api/requests/Question.go +++ b/api/requests/Question.go @@ -16,7 +16,7 @@ type GetQuestionPage struct { IsRecommend *int `json:"is_recommend" form:"is_recommend" label:"是否推荐"` QuestionBrief string `json:"question_brief" form:"question_brief" label:"问题介绍"` QuestionExplain string `json:"question_explain" form:"question_explain" label:"问题解释/科普"` - ClassId string `json:"class_id" form:"question_explain" label:"分类标识"` + ClassId string `json:"class_id" form:"class_id" label:"分类标识"` Order *GetQuestionPageOrder `json:"order" form:"order" label:"排序"` } diff --git a/api/requests/UserCoupon.go b/api/requests/UserCoupon.go index 3d00170..83503fa 100644 --- a/api/requests/UserCoupon.go +++ b/api/requests/UserCoupon.go @@ -22,11 +22,11 @@ type GetUserCouponPage struct { // GetUserUsableQuestionCoupon 获取患者可使用优惠卷-单项 type GetUserUsableQuestionCoupon struct { QuestionId string `json:"question_id" form:"question_id" label:"问题" validate:"required"` - AmountTotal float64 `json:"amount_total" form:"amount_total" label:"价格1" validate:"required"` + AmountTotal float64 `json:"amount_total" form:"amount_total" label:"价格" validate:"required"` } // GetUserUsableMemberCoupon 获取患者可使用优惠卷-会员 type GetUserUsableMemberCoupon struct { SystemMemberId string `json:"system_member_id" form:"system_member_id" label:"会员" validate:"required"` - AmountTotal float64 `json:"amount_total" form:"amount_total" label:"价格1" validate:"required"` + AmountTotal float64 `json:"amount_total" form:"amount_total" label:"价格" validate:"required"` } diff --git a/api/router/router.go b/api/router/router.go index 7b50c72..34429ca 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -143,6 +143,17 @@ func privateRouter(r *gin.Engine, api controller.Api) { // 获取问题购买状态 questionGroup.GET("/buy/status/:question_id", api.Question.GetQuestionBuyStatus) + + // 点击次数 + clickGroup := questionGroup.Group("/click") + { + // 增加问题点击次数(点击进入详情页的人次) + clickGroup.PUT("/:question_id", api.Question.PutQuestionClickCount) + + // 增加问题提交次数(提交个人信息进行了算算的人次) + clickGroup.PUT("/submit/:question_id", api.Question.PutQuestionSubmitCount) + } + } // 用户 @@ -161,11 +172,14 @@ func privateRouter(r *gin.Engine, api controller.Api) { // 获取还未弹窗的优惠卷 couponGroup.GET("/unnotified", api.UserCoupon.GetUserCouponUnnotified) - // 获取患者可使用优惠卷-单项 - couponGroup.GET("/question", api.UserCoupon.GetUserUsableQuestionCoupon) + usableGroup := couponGroup.Group("/usable") + { + // 获取患者可使用优惠卷-单项 + usableGroup.GET("/question", api.UserCoupon.GetUserUsableQuestionCoupon) - // 获取患者可使用优惠卷-会员 - couponGroup.GET("/member", api.UserCoupon.GetUserUsableMemberCoupon) + // 获取患者可使用优惠卷-会员 + usableGroup.GET("/member", api.UserCoupon.GetUserUsableMemberCoupon) + } } // 收藏