case-admin-api/api/controller/CaseComment.go
2025-10-11 14:46:50 +08:00

315 lines
7.1 KiB
Go

package controller
import (
"case-admin-api/api/dao"
"case-admin-api/api/dto"
"case-admin-api/api/requests"
"case-admin-api/api/responses"
"case-admin-api/api/service"
"case-admin-api/global"
"case-admin-api/utils"
"github.com/gin-gonic/gin"
"strconv"
)
type CaseComment struct {
}
// GetCaseCommentPage 获取列表-分页
func (b *CaseComment) GetCaseCommentPage(c *gin.Context) {
caseCommentRequest := requests.CaseCommentRequest{}
req := caseCommentRequest.GetCaseCommentPage
if err := c.ShouldBind(&req); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(req); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
if req.Page == 0 {
req.Page = 1
}
if req.PageSize == 0 {
req.PageSize = 20
}
// 获取数据
caseCommentDao := dao.CaseCommentDao{}
caseComments, total, err := caseCommentDao.GetCaseCommentPageSearch(req, req.Page, req.PageSize)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 处理返回值
g := dto.GetCaseCommentListDto(caseComments)
result := make(map[string]interface{})
result["page"] = req.Page
result["page_size"] = req.PageSize
result["total"] = total
result["data"] = g
responses.OkWithData(result, c)
}
// PutCaseCommentStatus 操作状态
func (b *CaseComment) PutCaseCommentStatus(c *gin.Context) {
caseCommentRequest := requests.CaseCommentRequest{}
req := caseCommentRequest.PutCaseCommentStatus
if err := c.ShouldBind(&req); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(req); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
id := c.Param("comment_id")
if id == "" {
responses.FailWithMessage("缺少参数", c)
return
}
// 将 id 转换为 int64 类型
commentId, err := strconv.ParseInt(id, 10, 64)
if err != nil {
responses.Fail(c)
return
}
caseCommentDao := dao.CaseCommentDao{}
caseComment, err := caseCommentDao.GetCaseCommentById(commentId)
if err != nil {
responses.FailWithMessage("数据异常", c)
return
}
// 检测状态
if caseComment.Status == req.Status {
responses.Ok(c)
return
}
// 开始事务
tx := global.Db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
caseCommentData := make(map[string]interface{})
caseCommentData["status"] = req.Status
err = caseCommentDao.EditCaseCommentById(tx, commentId, caseCommentData)
if err != nil {
tx.Rollback()
responses.FailWithMessage("操作失败", c)
return
}
tx.Commit()
responses.Ok(c)
}
// PutCaseCommentContent 修改评论内容
func (b *CaseComment) PutCaseCommentContent(c *gin.Context) {
caseCommentRequest := requests.CaseCommentRequest{}
req := caseCommentRequest.PutCaseCommentContent
if err := c.ShouldBind(&req); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(req); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
id := c.Param("comment_id")
if id == "" {
responses.FailWithMessage("缺少参数", c)
return
}
// 将 id 转换为 int64 类型
commentId, err := strconv.ParseInt(id, 10, 64)
if err != nil {
responses.Fail(c)
return
}
caseCommentDao := dao.CaseCommentDao{}
caseComment, err := caseCommentDao.GetCaseCommentById(commentId)
if err != nil {
responses.FailWithMessage("数据异常", c)
return
}
if caseComment.Content == req.Content {
responses.Ok(c)
return
}
// 开始事务
tx := global.Db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
caseCommentData := make(map[string]interface{})
caseCommentData["content"] = req.Content
err = caseCommentDao.EditCaseCommentById(tx, commentId, caseCommentData)
if err != nil {
tx.Rollback()
responses.FailWithMessage("操作失败", c)
return
}
tx.Commit()
responses.Ok(c)
}
// AddCaseCommentHighQuality 设置优质评论
func (b *CaseComment) AddCaseCommentHighQuality(c *gin.Context) {
caseCommentRequest := requests.CaseCommentRequest{}
req := caseCommentRequest.AddCaseCommentHighQuality
if err := c.ShouldBind(&req); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(req); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
id := c.Param("comment_id")
if id == "" {
responses.FailWithMessage("缺少参数", c)
return
}
// 将 id 转换为 int64 类型
commentId, err := strconv.ParseInt(id, 10, 64)
if err != nil {
responses.Fail(c)
return
}
caseCommentDao := dao.CaseCommentDao{}
caseComment, err := caseCommentDao.GetCaseCommentById(commentId)
if err != nil {
responses.FailWithMessage("数据异常", c)
return
}
if caseComment.IsHighQuality == req.IsHighQuality {
responses.Ok(c)
return
}
// 获取病例数据
caseDao := dao.CaseDao{}
result, err := caseDao.GetCaseById(caseComment.CaseId)
if err != nil {
responses.Fail(c)
return
}
// 获取用户数据
userDao := dao.UserDao{}
user, err := userDao.GetUserById(caseComment.UserId)
if err != nil {
responses.Fail(c)
return
}
// 处理积分类型
scoreType := 3
// 检测是否已经获取过优质留言
recordScoreDao := dao.RecordScoreDao{}
maps := make(map[string]interface{})
maps["project_id"] = result.ProjectId
maps["case_id"] = result.CaseId
maps["platform_id"] = caseComment.PlatformId
maps["user_id"] = user.UserId
recordScores, _ := recordScoreDao.GetRecordScoreList(maps)
if len(recordScores) > 0 {
for _, score := range recordScores {
if score.Type == 3 {
scoreType = 4
}
if score.Type == 4 {
// 优质留言已经发放过
responses.Ok(c)
return
}
}
}
// 开始事务
tx := global.Db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
// println(user)
// str := fmt.Sprintf("%+v", user) // %+v 会带上字段名
// fmt.Println(str)
// fmt.Println(caseComment.PlatformId)
// println("========")
// 发放积分-优质留言-1010 修改
userService := service.UserService{}
reportPlatformId := caseComment.PlatformId
reportPlatformId,user,err = userService.ReportUserScore(tx, result.ProjectId, caseComment.CaseId, caseComment.PlatformId, scoreType, user)
if err != nil {
tx.Rollback()
responses.FailWithMessage(err.Error(), c)
return
}
// println(user)
// str2 := fmt.Sprintf("%+v", user) // %+v 会带上字段名
// fmt.Println(str2)
// fmt.Println(reportPlatformId)
// 上报用户参与情况-只上报优质留言-佳动力
if reportPlatformId == 2 {
err = userService.ReportCaseRecord(tx, result.ProjectId, caseComment.CaseId, user)
if err != nil {
tx.Rollback()
responses.FailWithMessage(err.Error(), c)
return
}
}
caseCommentData := make(map[string]interface{})
caseCommentData["is_high_quality"] = req.IsHighQuality
caseCommentData["is_grant_high_quality"] = 1
err = caseCommentDao.EditCaseCommentById(tx, commentId, caseCommentData)
if err != nil {
tx.Rollback()
responses.FailWithMessage("操作失败", c)
return
}
tx.Commit()
responses.Ok(c)
}