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() } }() // 发放积分-优质留言 userService := service.UserService{} err = userService.ReportUserScore(tx, result.ProjectId, caseComment.CaseId, caseComment.PlatformId, scoreType, 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) }