From f719a1d347833ffad9d0a3c27f29219ce56cb73f Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 23 May 2025 13:18:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E8=AF=84=E8=AE=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CaseClinicalArticleCommentController.java | 127 ---------- .../CaseClinicalArticleController.java | 206 +++++++++++++++- .../CaseClinicalVideoController.java | 224 ++++++++++++++++- .../dao/UserCommentClinicalArticleDao.java | 26 ++ .../dao/UserCommentClinicalVideoDao.java | 25 ++ .../CaseClinicalArticleAuthorDto.java | 2 +- .../UserCommentClinicalArticleDto.java | 45 +++- .../UserCommentClinicalVideoDto.java | 40 +++- .../UserCommentClinicalArticleModel.java | 6 + .../addClinicalArticleComment.java | 2 +- .../getClinicalArticleCommentPage.java | 43 ++++ .../addClinicalVideoComment.java | 25 ++ .../getClinicalVideoCommentPage.java | 39 +++ .../CaseClinicalArticleCommentService.java | 160 ------------- .../service/CaseClinicalArticleService.java | 210 +++++++++++++++- .../service/CaseClinicalVideoService.java | 226 +++++++++++++++++- .../UserCommentClinicalArticleMapper.xml | 51 ++++ .../mapper/UserCommentClinicalVideoMapper.xml | 32 +++ 18 files changed, 1169 insertions(+), 320 deletions(-) delete mode 100644 src/main/java/com/example/caseData/controller/CaseClinicalArticleCommentController.java rename src/main/java/com/example/caseData/request/{CaseClinicalArticleCommentRequest => CaseClinicalArticleRequest}/addClinicalArticleComment.java (89%) create mode 100644 src/main/java/com/example/caseData/request/CaseClinicalArticleRequest/getClinicalArticleCommentPage.java create mode 100644 src/main/java/com/example/caseData/request/CaseClinicalVideoRequest/addClinicalVideoComment.java create mode 100644 src/main/java/com/example/caseData/request/CaseClinicalVideoRequest/getClinicalVideoCommentPage.java delete mode 100644 src/main/java/com/example/caseData/service/CaseClinicalArticleCommentService.java diff --git a/src/main/java/com/example/caseData/controller/CaseClinicalArticleCommentController.java b/src/main/java/com/example/caseData/controller/CaseClinicalArticleCommentController.java deleted file mode 100644 index 2da4da6..0000000 --- a/src/main/java/com/example/caseData/controller/CaseClinicalArticleCommentController.java +++ /dev/null @@ -1,127 +0,0 @@ -package com.example.caseData.controller; - -import com.example.caseData.common.Response; -import com.example.caseData.dao.*; -import com.example.caseData.dto.T; -import com.example.caseData.exception.BusinessException; -import com.example.caseData.request.CaseClinicalArticleCommentRequest.addClinicalArticleComment; -import com.example.caseData.service.CaseClinicalArticleCommentService; -import jakarta.annotation.Resource; -import jakarta.servlet.http.HttpServletRequest; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -@RestController -@RequestMapping("/api") -public class CaseClinicalArticleCommentController { - @Resource - private CaseClinicalArticleDao caseClinicalArticleDao; - - @Resource - private CaseClinicalArticleAuthorDao caseClinicalArticleAuthorDao; - - @Resource - private StatsCaseClinicalDoctorDao statsCaseClinicalDoctorDao; - - @Resource - private CaseClinicalDoctorDao caseClinicalDoctorDao; - - @Resource - private BasicHospitalDao basicHospitalDao; - - @Resource - private HttpServletRequest httpServletRequest; - - @Resource - private CaseClinicalArticleCommentService caseClinicalArticleCommentService; - - /** - * 临床病例库-文章-评论 - */ - @PostMapping("/clinical/article/comment/{article_id}") - public Response AddClinicalArticleComment( - @PathVariable("article_id") String articleId, - @Validated() - @RequestBody addClinicalArticleComment request - ) { - - String userId = (String) httpServletRequest.getAttribute("userId"); - - if (userId == null) { - return Response.error("操作失败"); - } - - try { - boolean res = caseClinicalArticleCommentService.AddClinicalArticleComment(articleId,userId,request); - if (!res){ - return Response.error("操作失败"); - } - } catch (BusinessException e) { - return Response.error(e.getMessage()); - } - - return Response.success(); - } - - /** - * 临床病例库-文章-评论-删除 - */ - @DeleteMapping("/clinical/article/comment/{comment_id}") - public Response DeleteClinicalArticleComment( - @PathVariable("comment_id") String commentId - ) { - - String userId = (String) httpServletRequest.getAttribute("userId"); - - if (userId == null) { - return Response.error("操作失败"); - } - - try { - boolean res = caseClinicalArticleCommentService.DeleteClinicalArticleComment(commentId,userId); - if (!res){ - return Response.error("操作失败"); - } - } catch (BusinessException e) { - return Response.error(e.getMessage()); - } - - return Response.success(); - } - - /** - * 临床病例库-文章-评论-置顶 - */ - @PutMapping("/clinical/article/comment/top/{article_id}") - public Response AddTopClinicalArticleComment( - @PathVariable("article_id") String articleId - ) { - - String userId = (String) httpServletRequest.getAttribute("userId"); - - if (userId == null) { - return Response.error("操作失败"); - } - - return Response.success(); - } - - /** - * 临床病例库-文章-评论-取消置顶 - */ - @DeleteMapping("/clinical/article/comment/top/{article_id}") - public Response deleteTopClinicalArticleComment( - @PathVariable("article_id") String articleId - ) { - - String userId = (String) httpServletRequest.getAttribute("userId"); - - if (userId == null) { - return Response.error("操作失败"); - } - - return Response.success(); - } - - // 临床病例库-文章-评论-列表 -} diff --git a/src/main/java/com/example/caseData/controller/CaseClinicalArticleController.java b/src/main/java/com/example/caseData/controller/CaseClinicalArticleController.java index 3335fc0..316acca 100644 --- a/src/main/java/com/example/caseData/controller/CaseClinicalArticleController.java +++ b/src/main/java/com/example/caseData/controller/CaseClinicalArticleController.java @@ -1,17 +1,29 @@ package com.example.caseData.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.example.caseData.common.Response; import com.example.caseData.dao.*; import com.example.caseData.dto.T; import com.example.caseData.dto.caseClinicalArticle.CaseClinicalArticleDto; +import com.example.caseData.dto.caseClinicalArticleAuthor.CaseClinicalArticleAuthorDto; +import com.example.caseData.dto.userCommentClinicalArticle.UserCommentClinicalArticleDto; +import com.example.caseData.exception.BusinessException; import com.example.caseData.model.*; +import com.example.caseData.request.CaseClinicalArticleRequest.addClinicalArticleComment; +import com.example.caseData.request.CaseClinicalArticleRequest.getClinicalArticleCommentPage; +import com.example.caseData.request.clinicalRequest.getClinicalArticleSearchPage; import com.example.caseData.service.CaseClinicalArticleService; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Objects; @RestController @RequestMapping("/api") @@ -32,7 +44,7 @@ public class CaseClinicalArticleController { private BasicHospitalDao basicHospitalDao; @Resource - private UserCollectClinicalArticleDao userCollectClinicalArticleDao; + private UserCommentClinicalArticleDao userCommentClinicalArticleDao; @Resource private HttpServletRequest httpServletRequest; @@ -40,6 +52,9 @@ public class CaseClinicalArticleController { @Resource private CaseClinicalArticleService caseClinicalArticleService; + @Resource + private UserDao userDao; + /** * 临床病例库-文章-详情 */ @@ -129,4 +144,193 @@ public class CaseClinicalArticleController { return Response.success(); } + + /** + * 临床病例库-文章-新增评论 + */ + @PostMapping("/clinical/article/comment/{article_id}") + public Response AddClinicalArticleComment( + @PathVariable("article_id") String articleId, + @Validated() + @RequestBody addClinicalArticleComment request + ) { + + String userId = (String) httpServletRequest.getAttribute("userId"); + + if (userId == null) { + return Response.error("操作失败"); + } + + try { + boolean res = caseClinicalArticleService.AddClinicalArticleComment(articleId,userId,request); + if (!res){ + return Response.error("操作失败"); + } + } catch (BusinessException e) { + return Response.error(e.getMessage()); + } + + return Response.success(); + } + + /** + * 临床病例库-文章-评论-删除 + */ + @DeleteMapping("/clinical/article/comment/{comment_id}") + public Response DeleteClinicalArticleComment( + @PathVariable("comment_id") String commentId + ) { + + String userId = (String) httpServletRequest.getAttribute("userId"); + + if (userId == null) { + return Response.error("操作失败"); + } + + try { + boolean res = caseClinicalArticleService.DeleteClinicalArticleComment(commentId,userId); + if (!res){ + return Response.error("操作失败"); + } + } catch (BusinessException e) { + return Response.error(e.getMessage()); + } + + return Response.success(); + } + + /** + * 临床病例库-文章-评论-置顶 + */ + @PutMapping("/clinical/article/comment/top/{comment_id}") + public Response AddTopClinicalArticleComment( + @PathVariable("comment_id") String commentId + ) { + + String userId = (String) httpServletRequest.getAttribute("userId"); + + if (userId == null) { + return Response.error("操作失败"); + } + + try { + boolean res = caseClinicalArticleService.AddTopClinicalArticleComment(commentId,userId); + if (!res){ + return Response.error("操作失败"); + } + } catch (BusinessException e) { + return Response.error(e.getMessage()); + } + + return Response.success(); + } + + /** + * 临床病例库-文章-评论-取消置顶 + */ + @DeleteMapping("/clinical/article/comment/top/{comment_id}") + public Response deleteTopClinicalArticleComment( + @PathVariable("comment_id") String commentId + ) { + + String userId = (String) httpServletRequest.getAttribute("userId"); + + if (userId == null) { + return Response.error("操作失败"); + } + + try { + boolean res = caseClinicalArticleService.deleteTopClinicalArticleComment(commentId,userId); + if (!res){ + return Response.error("操作失败"); + } + } catch (BusinessException e) { + return Response.error(e.getMessage()); + } + + return Response.success(); + } + + /** + * 临床病例库-文章-评论-列表 + */ + @PostMapping("/clinical/article/comment/page") + public Response> getClinicalArticleCommentPage( + @Validated() + @RequestBody getClinicalArticleCommentPage request + ) { + String userId = (String) httpServletRequest.getAttribute("userId"); + + // 获取当前登录用户数据 + UserModel user = userDao.selectById(Long.valueOf(userId)); + if (user == null) { + return Response.error(); + } + + request.validateForPage(); + + Map resultMap = new HashMap<>(); + + Page page = new Page<>(request.getPage(), request.getPageSize()); + + // 获取文章评论数据 + IPage resultPage = userCommentClinicalArticleDao.getClinicalArticleCommentPage( + page, + request.getArticleId(), + request.getRootId() + ); + + // 获取文章数据 + CaseClinicalArticleModel article = caseClinicalArticleDao.selectById(request.getArticleId()); + if (article == null) { + return Response.error(); + } + + if (article.getArticleStatus() != 1){ + return Response.error(); + } + + // 获取文章作者数据 + LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); + authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, request.getArticleId()); + List caseClinicalArticleAuthors = caseClinicalArticleAuthorDao.selectList(authorQueryWrapper); + for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) { + // 查询医生 + CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); + if (caseClinicalDoctor == null) { + return Response.error(); + } + + // 处理是否本人评论 + for (UserCommentClinicalArticleDto dto : resultPage.getRecords()) { + if (Objects.equals(dto.getUserIden(), caseClinicalDoctor.getDoctorIden())){ + dto.setIsAuthor(1); + } + } + } + + // 处理返回值 + for (UserCommentClinicalArticleDto dto : resultPage.getRecords()) { + // 去除用户唯一标识 + dto.setUserIden(null); + + // 获取次级评论 + if (dto.getRootId() == null){ + List subComments = userCommentClinicalArticleDao.getClinicalArticleCommentList( + dto.getArticleId(), + dto.getCommentId(), + 5 + ); + + dto.setSubComment(subComments); + } + } + + resultMap.put("page", resultPage.getCurrent()); + resultMap.put("pageSize", resultPage.getSize()); + resultMap.put("total", resultPage.getTotal()); + resultMap.put("data", resultPage.getRecords()); + return Response.success(resultMap); + } + } diff --git a/src/main/java/com/example/caseData/controller/CaseClinicalVideoController.java b/src/main/java/com/example/caseData/controller/CaseClinicalVideoController.java index 5d4cf1c..e3ce9f5 100644 --- a/src/main/java/com/example/caseData/controller/CaseClinicalVideoController.java +++ b/src/main/java/com/example/caseData/controller/CaseClinicalVideoController.java @@ -1,18 +1,28 @@ package com.example.caseData.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.example.caseData.common.Response; import com.example.caseData.dao.*; import com.example.caseData.dto.T; import com.example.caseData.dto.caseClinicalVideo.CaseClinicalVideoDto; +import com.example.caseData.dto.userCommentClinicalVideo.UserCommentClinicalVideoDto; +import com.example.caseData.exception.BusinessException; import com.example.caseData.model.*; -import com.example.caseData.service.CaseClinicalArticleService; +import com.example.caseData.request.CaseClinicalVideoRequest.addClinicalVideoComment; +import com.example.caseData.request.CaseClinicalVideoRequest.getClinicalVideoCommentPage; +import com.example.caseData.service.CaseClinicalVideoService; import com.example.caseData.service.CaseClinicalVideoService; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Objects; @RestController @RequestMapping("/api") @@ -38,6 +48,12 @@ public class CaseClinicalVideoController { @Resource private CaseClinicalVideoService caseClinicalVideoService; + @Resource + private UserDao userDao; + + @Resource + private UserCommentClinicalVideoDao userCommentClinicalVideoDao; + /** * 临床病例库-视频-详情 */ @@ -46,14 +62,14 @@ public class CaseClinicalVideoController { @PathVariable("video_id") String videoId ) { // 获取视频数据 - CaseClinicalVideoModel article = caseClinicalVideoDao.selectById(videoId); - if (article == null) { + CaseClinicalVideoModel video = caseClinicalVideoDao.selectById(videoId); + if (video == null) { return Response.error("非法视频"); } // 查找作者 LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); - authorQueryWrapper.eq(CaseClinicalVideoAuthorModel::getVideoId, article.getVideoId()); + authorQueryWrapper.eq(CaseClinicalVideoAuthorModel::getVideoId, video.getVideoId()); List caseClinicalVideoAuthors = caseClinicalVideoAuthorDao.selectList(authorQueryWrapper); for (CaseClinicalVideoAuthorModel author : caseClinicalVideoAuthors) { // 查询医生 @@ -66,9 +82,9 @@ public class CaseClinicalVideoController { author.setCaseClinicalDoctor(caseClinicalDoctor); } - article.setAuthor(caseClinicalVideoAuthors); + video.setAuthor(caseClinicalVideoAuthors); - CaseClinicalVideoDto g = CaseClinicalVideoDto.GetDto(article); + CaseClinicalVideoDto g = CaseClinicalVideoDto.GetDto(video); // 是否已收藏 String userId = (String) httpServletRequest.getAttribute("userId"); @@ -84,11 +100,11 @@ public class CaseClinicalVideoController { } /** - * 临床病例库-文章-收藏 + * 临床病例库-视频-收藏 */ @PostMapping("/clinical/video/collect/{video_id}") public Response AddClinicalVideoCollect( - @PathVariable("video_id") String articleId + @PathVariable("video_id") String videoId ) { String userId = (String) httpServletRequest.getAttribute("userId"); @@ -97,7 +113,7 @@ public class CaseClinicalVideoController { return Response.error("操作失败"); } - boolean res = caseClinicalVideoService.AddClinicalVideoCollect(articleId,userId); + boolean res = caseClinicalVideoService.AddClinicalVideoCollect(videoId,userId); if (!res){ return Response.error("操作失败"); } @@ -106,7 +122,7 @@ public class CaseClinicalVideoController { } /** - * 临床病例库-文章-取消收藏 + * 临床病例库-视频-取消收藏 */ @DeleteMapping("/clinical/video/collect/{video_id}") public Response DeleteClinicalVideoCollect( @@ -126,4 +142,192 @@ public class CaseClinicalVideoController { return Response.success(); } + + /** + * 临床病例库-视频-新增评论 + */ + @PostMapping("/clinical/video/comment/{video_id}") + public Response AddClinicalVideoComment( + @PathVariable("video_id") String videoId, + @Validated() + @RequestBody addClinicalVideoComment request + ) { + + String userId = (String) httpServletRequest.getAttribute("userId"); + + if (userId == null) { + return Response.error("操作失败"); + } + + try { + boolean res = caseClinicalVideoService.AddClinicalVideoComment(videoId,userId,request); + if (!res){ + return Response.error("操作失败"); + } + } catch (BusinessException e) { + return Response.error(e.getMessage()); + } + + return Response.success(); + } + + /** + * 临床病例库-视频-评论-删除 + */ + @DeleteMapping("/clinical/video/comment/{comment_id}") + public Response DeleteClinicalVideoComment( + @PathVariable("comment_id") String commentId + ) { + + String userId = (String) httpServletRequest.getAttribute("userId"); + + if (userId == null) { + return Response.error("操作失败"); + } + + try { + boolean res = caseClinicalVideoService.DeleteClinicalVideoComment(commentId,userId); + if (!res){ + return Response.error("操作失败"); + } + } catch (BusinessException e) { + return Response.error(e.getMessage()); + } + + return Response.success(); + } + + /** + * 临床病例库-视频-评论-置顶 + */ + @PutMapping("/clinical/video/comment/top/{comment_id}") + public Response AddTopClinicalVideoComment( + @PathVariable("comment_id") String commentId + ) { + + String userId = (String) httpServletRequest.getAttribute("userId"); + + if (userId == null) { + return Response.error("操作失败"); + } + + try { + boolean res = caseClinicalVideoService.AddTopClinicalVideoComment(commentId,userId); + if (!res){ + return Response.error("操作失败"); + } + } catch (BusinessException e) { + return Response.error(e.getMessage()); + } + + return Response.success(); + } + + /** + * 临床病例库-视频-评论-取消置顶 + */ + @DeleteMapping("/clinical/video/comment/top/{comment_id}") + public Response deleteTopClinicalVideoComment( + @PathVariable("comment_id") String commentId + ) { + + String userId = (String) httpServletRequest.getAttribute("userId"); + + if (userId == null) { + return Response.error("操作失败"); + } + + try { + boolean res = caseClinicalVideoService.deleteTopClinicalVideoComment(commentId,userId); + if (!res){ + return Response.error("操作失败"); + } + } catch (BusinessException e) { + return Response.error(e.getMessage()); + } + + return Response.success(); + } + + /** + * 临床病例库-视频-评论-列表 + */ + @PostMapping("/clinical/video/comment/page") + public Response> getClinicalVideoCommentPage( + @Validated() + @RequestBody getClinicalVideoCommentPage request + ) { + String userId = (String) httpServletRequest.getAttribute("userId"); + + // 获取当前登录用户数据 + UserModel user = userDao.selectById(Long.valueOf(userId)); + if (user == null) { + return Response.error(); + } + + request.validateForPage(); + + Map resultMap = new HashMap<>(); + + Page page = new Page<>(request.getPage(), request.getPageSize()); + + // 获取视频评论数据 + IPage resultPage = userCommentClinicalVideoDao.getClinicalVideoCommentPage( + page, + request.getVideoId(), + request.getRootId() + ); + + // 获取视频数据 + CaseClinicalVideoModel video = caseClinicalVideoDao.selectById(request.getVideoId()); + if (video == null) { + return Response.error(); + } + + if (video.getVideoStatus() != 1){ + return Response.error(); + } + + // 获取视频作者数据 + LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); + authorQueryWrapper.eq(CaseClinicalVideoAuthorModel::getVideoId, request.getVideoId()); + List caseClinicalVideoAuthors = caseClinicalVideoAuthorDao.selectList(authorQueryWrapper); + for (CaseClinicalVideoAuthorModel author : caseClinicalVideoAuthors) { + // 查询医生 + CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); + if (caseClinicalDoctor == null) { + return Response.error(); + } + + // 处理是否本人评论 + for (UserCommentClinicalVideoDto dto : resultPage.getRecords()) { + if (Objects.equals(dto.getUserIden(), caseClinicalDoctor.getDoctorIden())){ + dto.setIsAuthor(1); + } + } + } + + // 处理返回值 + for (UserCommentClinicalVideoDto dto : resultPage.getRecords()) { + // 去除用户唯一标识 + dto.setUserIden(null); + + // 获取次级评论 + if (dto.getRootId() == null){ + List subComments = userCommentClinicalVideoDao.getClinicalVideoCommentList( + dto.getVideoId(), + dto.getCommentId(), + 5 + ); + + dto.setSubComment(subComments); + } + } + + resultMap.put("page", resultPage.getCurrent()); + resultMap.put("pageSize", resultPage.getSize()); + resultMap.put("total", resultPage.getTotal()); + resultMap.put("data", resultPage.getRecords()); + return Response.success(resultMap); + } } diff --git a/src/main/java/com/example/caseData/dao/UserCommentClinicalArticleDao.java b/src/main/java/com/example/caseData/dao/UserCommentClinicalArticleDao.java index 9cc475e..23464ff 100644 --- a/src/main/java/com/example/caseData/dao/UserCommentClinicalArticleDao.java +++ b/src/main/java/com/example/caseData/dao/UserCommentClinicalArticleDao.java @@ -1,7 +1,33 @@ package com.example.caseData.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.example.caseData.dto.caseClinicalArticle.CaseClinicalArticleDto; +import com.example.caseData.dto.userCommentClinicalArticle.UserCommentClinicalArticleDto; import com.example.caseData.model.UserCommentClinicalArticleModel; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; public interface UserCommentClinicalArticleDao extends BaseMapper { + /** + * 临床病例库--评论-分页 + * @param page 分页数据 + */ + IPage getClinicalArticleCommentPage( + Page page, + @Param("articleId") String articleId, + @Param("rootId") String rootId + ); + + /** + * 临床病例库--评论-分页 + */ + List getClinicalArticleCommentList( + @Param("articleId") String articleId, + @Param("rootId") String rootId, + @Param("limit") int limit + ); } \ No newline at end of file diff --git a/src/main/java/com/example/caseData/dao/UserCommentClinicalVideoDao.java b/src/main/java/com/example/caseData/dao/UserCommentClinicalVideoDao.java index d4aef2f..2c28661 100644 --- a/src/main/java/com/example/caseData/dao/UserCommentClinicalVideoDao.java +++ b/src/main/java/com/example/caseData/dao/UserCommentClinicalVideoDao.java @@ -1,7 +1,32 @@ package com.example.caseData.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.example.caseData.dto.userCommentClinicalArticle.UserCommentClinicalArticleDto; +import com.example.caseData.dto.userCommentClinicalVideo.UserCommentClinicalVideoDto; import com.example.caseData.model.UserCommentClinicalVideoModel; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface UserCommentClinicalVideoDao extends BaseMapper { + /** + * 临床病例库--评论-分页 + * @param page 分页数据 + */ + IPage getClinicalVideoCommentPage( + Page page, + @Param("videoId") String videoId, + @Param("rootId") String rootId + ); + + /** + * 临床病例库--评论-分页 + */ + List getClinicalVideoCommentList( + @Param("videoId") String videoId, + @Param("rootId") String rootId, + @Param("limit") int limit + ); } \ No newline at end of file diff --git a/src/main/java/com/example/caseData/dto/caseClinicalArticleAuthor/CaseClinicalArticleAuthorDto.java b/src/main/java/com/example/caseData/dto/caseClinicalArticleAuthor/CaseClinicalArticleAuthorDto.java index b96854a..c006f8b 100644 --- a/src/main/java/com/example/caseData/dto/caseClinicalArticleAuthor/CaseClinicalArticleAuthorDto.java +++ b/src/main/java/com/example/caseData/dto/caseClinicalArticleAuthor/CaseClinicalArticleAuthorDto.java @@ -34,7 +34,7 @@ public class CaseClinicalArticleAuthorDto { private String doctorId; /** - * 医院名称 + * 医生名称 */ @JsonProperty("doctor_name") private String doctorName; diff --git a/src/main/java/com/example/caseData/dto/userCommentClinicalArticle/UserCommentClinicalArticleDto.java b/src/main/java/com/example/caseData/dto/userCommentClinicalArticle/UserCommentClinicalArticleDto.java index 75096af..1c7755c 100644 --- a/src/main/java/com/example/caseData/dto/userCommentClinicalArticle/UserCommentClinicalArticleDto.java +++ b/src/main/java/com/example/caseData/dto/userCommentClinicalArticle/UserCommentClinicalArticleDto.java @@ -1,8 +1,11 @@ package com.example.caseData.dto.userCommentClinicalArticle; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.time.LocalDateTime; +import java.util.List; @Data public class UserCommentClinicalArticleDto { @@ -10,31 +13,31 @@ public class UserCommentClinicalArticleDto { * 主键id */ @JsonProperty("comment_id") - private Long commentId; + private String commentId; /** * 用户id */ @JsonProperty("user_id") - private Long userId; + private String userId; /** * 临床文章id */ @JsonProperty("article_id") - private Long articleId; + private String articleId; /** * 父级id,一级评论为null */ @JsonProperty("parent_id") - private Long parentId; + private String parentId; /** * 根评论id,一级评论时为null。其余为一级评论id */ @JsonProperty("root_id") - private Long rootId; + private String rootId; /** * 评论状态(0:禁用 1:正常) @@ -49,10 +52,10 @@ public class UserCommentClinicalArticleDto { private Integer isSensitive; /** - * 是否优质留言(0:否 1:是) + * 是否置顶(0:否 1:是) */ - @JsonProperty("is_high_quality") - private Integer isHighQuality; + @JsonProperty("is_top") + private Integer isTop; /** * 点赞数量 @@ -76,11 +79,37 @@ public class UserCommentClinicalArticleDto { * 创建时间 */ @JsonProperty("created_at") + @TableField(fill = FieldFill.INSERT) private LocalDateTime createdAt; /** * 修改时间 */ @JsonProperty("updated_at") + @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updatedAt; + + /** + * 用户名称 + */ + @JsonProperty("user_name") + private String userName; + + /** + * 用户唯一标识 + */ + @JsonProperty("user_iden") + private String userIden; + + /** + * 是否作者(0:否 1:是) + */ + @JsonProperty("is_author") + private Integer isAuthor; + + /** + * 次级评论 + */ + @JsonProperty("sub_comment") + private List subComment; } \ No newline at end of file diff --git a/src/main/java/com/example/caseData/dto/userCommentClinicalVideo/UserCommentClinicalVideoDto.java b/src/main/java/com/example/caseData/dto/userCommentClinicalVideo/UserCommentClinicalVideoDto.java index 0398e68..b2fc9d4 100644 --- a/src/main/java/com/example/caseData/dto/userCommentClinicalVideo/UserCommentClinicalVideoDto.java +++ b/src/main/java/com/example/caseData/dto/userCommentClinicalVideo/UserCommentClinicalVideoDto.java @@ -1,8 +1,12 @@ package com.example.caseData.dto.userCommentClinicalVideo; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.example.caseData.dto.userCommentClinicalArticle.UserCommentClinicalArticleDto; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.time.LocalDateTime; +import java.util.List; @Data public class UserCommentClinicalVideoDto { @@ -10,31 +14,31 @@ public class UserCommentClinicalVideoDto { * 主键id */ @JsonProperty("comment_id") - private Long commentId; + private String commentId; /** * 用户id */ @JsonProperty("user_id") - private Long userId; + private String userId; /** * 临床视频id */ @JsonProperty("video_id") - private Long videoId; + private String videoId; /** * 父级id,一级评论为null */ @JsonProperty("parent_id") - private Long parentId; + private String parentId; /** * 根评论id,一级评论时为null。其余为一级评论id */ @JsonProperty("root_id") - private Long rootId; + private String rootId; /** * 评论状态(0:禁用 1:正常) @@ -76,11 +80,37 @@ public class UserCommentClinicalVideoDto { * 创建时间 */ @JsonProperty("created_at") + @TableField(fill = FieldFill.INSERT) private LocalDateTime createdAt; /** * 修改时间 */ @JsonProperty("updated_at") + @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updatedAt; + + /** + * 用户名称 + */ + @JsonProperty("user_name") + private String userName; + + /** + * 用户唯一标识 + */ + @JsonProperty("user_iden") + private String userIden; + + /** + * 是否作者(0:否 1:是) + */ + @JsonProperty("is_author") + private Integer isAuthor; + + /** + * 次级评论 + */ + @JsonProperty("sub_comment") + private List subComment; } \ No newline at end of file diff --git a/src/main/java/com/example/caseData/model/UserCommentClinicalArticleModel.java b/src/main/java/com/example/caseData/model/UserCommentClinicalArticleModel.java index 54c662a..d5b8b0f 100644 --- a/src/main/java/com/example/caseData/model/UserCommentClinicalArticleModel.java +++ b/src/main/java/com/example/caseData/model/UserCommentClinicalArticleModel.java @@ -62,6 +62,12 @@ public class UserCommentClinicalArticleModel { @TableField("like_num") private Integer likeNum; + /** + * 是否作者评论(0:否 1:是) + */ + @TableField("is_author") + private Integer isAuthor; + /** * 评论内容 */ diff --git a/src/main/java/com/example/caseData/request/CaseClinicalArticleCommentRequest/addClinicalArticleComment.java b/src/main/java/com/example/caseData/request/CaseClinicalArticleRequest/addClinicalArticleComment.java similarity index 89% rename from src/main/java/com/example/caseData/request/CaseClinicalArticleCommentRequest/addClinicalArticleComment.java rename to src/main/java/com/example/caseData/request/CaseClinicalArticleRequest/addClinicalArticleComment.java index 1d4a952..46254c8 100644 --- a/src/main/java/com/example/caseData/request/CaseClinicalArticleCommentRequest/addClinicalArticleComment.java +++ b/src/main/java/com/example/caseData/request/CaseClinicalArticleRequest/addClinicalArticleComment.java @@ -1,4 +1,4 @@ -package com.example.caseData.request.CaseClinicalArticleCommentRequest; +package com.example.caseData.request.CaseClinicalArticleRequest; import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.validation.constraints.NotEmpty; diff --git a/src/main/java/com/example/caseData/request/CaseClinicalArticleRequest/getClinicalArticleCommentPage.java b/src/main/java/com/example/caseData/request/CaseClinicalArticleRequest/getClinicalArticleCommentPage.java new file mode 100644 index 0000000..9afdf8f --- /dev/null +++ b/src/main/java/com/example/caseData/request/CaseClinicalArticleRequest/getClinicalArticleCommentPage.java @@ -0,0 +1,43 @@ +package com.example.caseData.request.CaseClinicalArticleRequest; + + +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; +import org.springframework.util.StringUtils; + +import java.util.HashMap; +import java.util.Map; + +@Data +public class getClinicalArticleCommentPage { + // ✅ 分页参数 + @Min(value = 1,message = "页码最小为 1") + private Integer page = 1; + + @JsonProperty("page_size") + @Min(value = 1, message = "每页个数最小为 1") + private Integer pageSize = 20; + + // 文章id + @NotEmpty(message = "错误") + @JsonProperty("article_id") + private String articleId; + + // 根评论id + @JsonProperty("root_id") + private String rootId; + + // ✅ 校验分页参数 + public void validateForPage() { + // 如果 page 为空,设为默认值 1 + if (page == null) { + page = 1; + } + + if (pageSize == null) { + pageSize = 20; + } + } +} diff --git a/src/main/java/com/example/caseData/request/CaseClinicalVideoRequest/addClinicalVideoComment.java b/src/main/java/com/example/caseData/request/CaseClinicalVideoRequest/addClinicalVideoComment.java new file mode 100644 index 0000000..81150ef --- /dev/null +++ b/src/main/java/com/example/caseData/request/CaseClinicalVideoRequest/addClinicalVideoComment.java @@ -0,0 +1,25 @@ +package com.example.caseData.request.CaseClinicalVideoRequest; + +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +@Data +public class addClinicalVideoComment { + // 父级 次级评论此字段必须存在 + @JsonProperty("parent_id") + private String parentId; + + // 根评论标识 次级评论此字段必须存在 + @JsonProperty("root_id") + private String rootId; + + // 评论内容 + @JsonProperty("content") + @NotEmpty(message = "请输入评论内容") + private String content; + + // 评论图片 + @JsonProperty("comment_image") + private String commentImage; +} diff --git a/src/main/java/com/example/caseData/request/CaseClinicalVideoRequest/getClinicalVideoCommentPage.java b/src/main/java/com/example/caseData/request/CaseClinicalVideoRequest/getClinicalVideoCommentPage.java new file mode 100644 index 0000000..d313edd --- /dev/null +++ b/src/main/java/com/example/caseData/request/CaseClinicalVideoRequest/getClinicalVideoCommentPage.java @@ -0,0 +1,39 @@ +package com.example.caseData.request.CaseClinicalVideoRequest; + + +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +@Data +public class getClinicalVideoCommentPage { + // ✅ 分页参数 + @Min(value = 1,message = "页码最小为 1") + private Integer page = 1; + + @JsonProperty("page_size") + @Min(value = 1, message = "每页个数最小为 1") + private Integer pageSize = 20; + + // 文章id + @NotEmpty(message = "错误") + @JsonProperty("video_id") + private String videoId; + + // 根评论id + @JsonProperty("root_id") + private String rootId; + + // ✅ 校验分页参数 + public void validateForPage() { + // 如果 page 为空,设为默认值 1 + if (page == null) { + page = 1; + } + + if (pageSize == null) { + pageSize = 20; + } + } +} diff --git a/src/main/java/com/example/caseData/service/CaseClinicalArticleCommentService.java b/src/main/java/com/example/caseData/service/CaseClinicalArticleCommentService.java deleted file mode 100644 index c7986f0..0000000 --- a/src/main/java/com/example/caseData/service/CaseClinicalArticleCommentService.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.example.caseData.service; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.example.caseData.dao.*; -import com.example.caseData.exception.BusinessException; -import com.example.caseData.model.*; -import com.example.caseData.request.CaseClinicalArticleCommentRequest.addClinicalArticleComment; -import com.example.caseData.utils.Replace; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.transaction.interceptor.TransactionAspectSupport; - -import java.util.List; -import java.util.Objects; - - -@Service -public class CaseClinicalArticleCommentService { - @Resource - private UserCollectClinicalArticleDao userCollectClinicalArticleDao; - - @Resource - private CaseClinicalArticleDao caseClinicalArticleDao; - - @Resource - private StatsCaseClinicalDao statsCaseClinicalDao; - - @Resource - private StatsCaseClinicalHospitalDao statsCaseClinicalHospitalDao; - - @Resource - private StatsCaseClinicalDoctorDao statsCaseClinicalDoctorDao; - - @Resource - private CaseClinicalArticleAuthorDao caseClinicalArticleAuthorDao; - - @Resource - private CaseClinicalDoctorDao caseClinicalDoctorDao; - - @Resource - private BasicSensitiveWordService basicSensitiveWordService; - - @Resource - private UserCommentClinicalArticleDao userCommentClinicalArticleDao; - - @Resource - private UserDao userDao; - - /** - * 新增评论-临床病例库-文章 - * @param articleId 文章id - * @param userId 用户id - * @return bool - */ - @Transactional - public boolean AddClinicalArticleComment(String articleId, String userId, addClinicalArticleComment request){ - // 获取文章数据 - CaseClinicalArticleModel article = caseClinicalArticleDao.selectById(articleId); - if (article == null) { - throw new BusinessException("非法文章"); - } - - if (article.getArticleStatus() != 1){ - throw new BusinessException("非法文章"); - } - - // 处理评论内容 - BasicSensitiveWordService.FilterResult result = basicSensitiveWordService.filter(request.getContent()); - - // 新增评论 - UserCommentClinicalArticleModel userCommentClinicalArticleData = new UserCommentClinicalArticleModel(); - userCommentClinicalArticleData.setUserId(Long.valueOf(userId)); - userCommentClinicalArticleData.setArticleId(Long.valueOf(articleId)); - userCommentClinicalArticleData.setStatus(1); - userCommentClinicalArticleData.setIsSensitive(result.hasSensitive); - userCommentClinicalArticleData.setContent(result.comment); - userCommentClinicalArticleData.setCommentImage(Replace.addOssDomain(request.getCommentImage())); - if (result.hasSensitive == 1){ - userCommentClinicalArticleData.setContentWord(request.getContent()); - } - - // 评论根id - if (request.getRootId() != null) { - userCommentClinicalArticleData.setRootId(Long.valueOf(request.getRootId())); - } - - // 评论父级id - if (request.getParentId() != null) { - userCommentClinicalArticleData.setParentId(Long.valueOf(request.getParentId())); - } - - int res = userCommentClinicalArticleDao.insert(userCommentClinicalArticleData); - return res > 0; - } - - /** - * 删除评论-临床病例库-文章 - * @param commentId 评论id - * @param userId 用户id - * @return bool - */ - @Transactional - public boolean DeleteClinicalArticleComment(String commentId, String userId){ - // 获取评论数据 - UserCommentClinicalArticleModel comment = userCommentClinicalArticleDao.selectById(commentId); - if (comment == null) { - return true; - } - - // 获取当前登录用户数据 - UserModel user = userDao.selectById(Long.valueOf(userId)); - if (user == null) { - throw new BusinessException("错误"); - } - - - // 获取文章数据 - CaseClinicalArticleModel article = caseClinicalArticleDao.selectById(comment.getArticleId()); - if (article == null) { - throw new BusinessException("删除失败"); - } - - if (article.getArticleStatus() != 1){ - throw new BusinessException("删除失败"); - } - - // 当前用户是否是作者之一 - boolean isAuthor = false; - - // 获取文章作者数据 - LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); - authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, article.getArticleId()); - List caseClinicalArticleAuthors = caseClinicalArticleAuthorDao.selectList(authorQueryWrapper); - for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) { - // 查询医生 - CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); - if (caseClinicalDoctor == null) { - throw new BusinessException("错误"); - } - - if (Objects.equals(caseClinicalDoctor.getDoctorIden(), user.getUserIden())){ - isAuthor = true; - } - } - - if (!isAuthor) { - throw new BusinessException("不可删除"); - } - - // 删除评论 - int res = userCommentClinicalArticleDao.deleteById(comment.getCommentId()); - if (res <= 0){ - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); - return false; - } - - return true; - } -} diff --git a/src/main/java/com/example/caseData/service/CaseClinicalArticleService.java b/src/main/java/com/example/caseData/service/CaseClinicalArticleService.java index 2268afd..3d16a25 100644 --- a/src/main/java/com/example/caseData/service/CaseClinicalArticleService.java +++ b/src/main/java/com/example/caseData/service/CaseClinicalArticleService.java @@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.example.caseData.dao.*; import com.example.caseData.exception.BusinessException; import com.example.caseData.model.*; -import com.example.caseData.request.CaseClinicalArticleCommentRequest.addClinicalArticleComment; +import com.example.caseData.request.CaseClinicalArticleRequest.addClinicalArticleComment; import com.example.caseData.utils.Replace; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; @@ -13,6 +13,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport; import java.util.List; +import java.util.Objects; //import static com.baomidou.mybatisplus.extension.toolkit.Db.removeById; //import static com.baomidou.mybatisplus.extension.toolkit.Db.save; @@ -46,6 +47,8 @@ public class CaseClinicalArticleService { @Resource private UserCommentClinicalArticleDao userCommentClinicalArticleDao; + @Resource + private UserDao userDao; /** * 新增收藏-临床病例库-文章 @@ -145,6 +148,176 @@ public class CaseClinicalArticleService { return true; } + /** + * 新增评论-临床病例库-文章 + * @param articleId 文章id + * @param userId 用户id + * @return bool + */ + @Transactional + public boolean AddClinicalArticleComment(String articleId, String userId, addClinicalArticleComment request){ + // 获取文章数据 + CaseClinicalArticleModel article = caseClinicalArticleDao.selectById(articleId); + if (article == null) { + throw new BusinessException("非法文章"); + } + + if (article.getArticleStatus() != 1){ + throw new BusinessException("非法文章"); + } + + // 处理评论内容 + BasicSensitiveWordService.FilterResult result = basicSensitiveWordService.filter(request.getContent()); + if (result.hasSensitive == 1){ + throw new BusinessException("存在敏感词,请修改后提交"); + } + + // 新增评论 + UserCommentClinicalArticleModel userCommentClinicalArticleData = new UserCommentClinicalArticleModel(); + userCommentClinicalArticleData.setUserId(Long.valueOf(userId)); + userCommentClinicalArticleData.setArticleId(Long.valueOf(articleId)); + userCommentClinicalArticleData.setStatus(1); + userCommentClinicalArticleData.setIsSensitive(0); + userCommentClinicalArticleData.setContent(request.getContent()); + userCommentClinicalArticleData.setCommentImage(Replace.addOssDomain(request.getCommentImage())); + + // 评论根id + if (request.getRootId() != null) { + userCommentClinicalArticleData.setRootId(Long.valueOf(request.getRootId())); + } + + // 评论父级id + if (request.getParentId() != null) { + userCommentClinicalArticleData.setParentId(Long.valueOf(request.getParentId())); + } + + int res = userCommentClinicalArticleDao.insert(userCommentClinicalArticleData); + return res > 0; + } + + /** + * 删除评论-临床病例库-文章 + * @param commentId 评论id + * @param userId 用户id + * @return bool + */ + @Transactional + public boolean DeleteClinicalArticleComment(String commentId, String userId){ + // 获取评论数据 + UserCommentClinicalArticleModel comment = userCommentClinicalArticleDao.selectById(commentId); + if (comment == null) { + return false; + } + + // 获取文章数据 + CaseClinicalArticleModel article = caseClinicalArticleDao.selectById(comment.getArticleId()); + if (article == null) { + return false; + } + + if (article.getArticleStatus() != 1){ + return false; + } + + // 检测用户是否文章作者 + boolean isAuthor = checkUserIsArticleAuthor(String.valueOf(article.getArticleId()),userId); + if (!isAuthor) { + return false; + } + + // 删除评论 + int res = userCommentClinicalArticleDao.deleteById(comment.getCommentId()); + if (res <= 0){ + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return false; + } + + return true; + } + + /** + * 置顶评论-临床病例库-文章 + * @param commentId 评论id + * @param userId 用户id + * @return bool + */ + @Transactional + public boolean AddTopClinicalArticleComment(String commentId, String userId){ + // 获取评论数据 + UserCommentClinicalArticleModel comment = userCommentClinicalArticleDao.selectById(commentId); + if (comment == null) { + return false; + } + + // 获取文章数据 + CaseClinicalArticleModel article = caseClinicalArticleDao.selectById(comment.getArticleId()); + if (article == null) { + return false; + } + + if (article.getArticleStatus() != 1){ + return false; + } + + // 检测用户是否文章作者 + boolean isAuthor = checkUserIsArticleAuthor(String.valueOf(comment.getArticleId()),userId); + if (!isAuthor) { + return false; + } + + if (comment.getIsTop() == 1){ + return true; + } + + // 置顶评论 + comment.setIsTop(1); + userCommentClinicalArticleDao.updateById(comment); + + return true; + } + + /** + * 取消置顶评论-临床病例库-文章 + * @param commentId 评论id + * @param userId 用户id + * @return bool + */ + @Transactional + public boolean deleteTopClinicalArticleComment(String commentId, String userId){ + // 获取评论数据 + UserCommentClinicalArticleModel comment = userCommentClinicalArticleDao.selectById(commentId); + if (comment == null) { + return false; + } + + // 获取文章数据 + CaseClinicalArticleModel article = caseClinicalArticleDao.selectById(comment.getArticleId()); + if (article == null) { + return false; + } + + if (article.getArticleStatus() != 1){ + return false; + } + + // 检测用户是否文章作者 + boolean isAuthor = checkUserIsArticleAuthor(String.valueOf(comment.getArticleId()),userId); + if (!isAuthor) { + return false; + } + + // 取消置顶评论 + if (comment.getIsTop() == 0){ + return true; + } + + // 置顶评论 + comment.setIsTop(0); + userCommentClinicalArticleDao.updateById(comment); + + return true; + } + /** * 获取用户收藏数据 * @param articleId 文章id @@ -159,4 +332,39 @@ public class CaseClinicalArticleService { return userCollectClinicalArticleDao.selectOne(mapQueryWrapper); } + + /** + * 检测用户是否文章作者 + * @param articleId 文章id + * @param userId 用户id + * @return bool 是否作者 + */ + public boolean checkUserIsArticleAuthor(String articleId,String userId){ + // 获取当前登录用户数据 + UserModel user = userDao.selectById(Long.valueOf(userId)); + if (user == null) { + return false; + } + + // 当前用户是否是作者之一 + boolean isAuthor = false; + + // 获取文章作者数据 + LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); + authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, articleId); + List caseClinicalArticleAuthors = caseClinicalArticleAuthorDao.selectList(authorQueryWrapper); + for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) { + // 查询医生 + CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); + if (caseClinicalDoctor == null) { + return false; + } + + if (Objects.equals(caseClinicalDoctor.getDoctorIden(), user.getUserIden())){ + isAuthor = true; + } + } + + return isAuthor; + } } diff --git a/src/main/java/com/example/caseData/service/CaseClinicalVideoService.java b/src/main/java/com/example/caseData/service/CaseClinicalVideoService.java index ad51042..4de1245 100644 --- a/src/main/java/com/example/caseData/service/CaseClinicalVideoService.java +++ b/src/main/java/com/example/caseData/service/CaseClinicalVideoService.java @@ -2,14 +2,18 @@ package com.example.caseData.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.example.caseData.dao.*; +import com.example.caseData.exception.BusinessException; import com.example.caseData.model.*; import com.example.caseData.model.UserCollectClinicalVideoModel; +import com.example.caseData.request.CaseClinicalVideoRequest.addClinicalVideoComment; +import com.example.caseData.utils.Replace; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import java.util.List; +import java.util.Objects; //import static com.baomidou.mybatisplus.extension.toolkit.Db.removeById; //import static com.baomidou.mybatisplus.extension.toolkit.Db.save; @@ -40,6 +44,11 @@ public class CaseClinicalVideoService { @Resource private CaseClinicalDoctorDao caseClinicalDoctorDao; + @Resource + private BasicSensitiveWordService basicSensitiveWordService; + + @Resource + private UserCommentClinicalVideoDao userCommentClinicalVideoDao; /** * 新增收藏-临床病例库-视频 @@ -68,7 +77,7 @@ public class CaseClinicalVideoService { caseClinicalVideoDao.inc(Long.valueOf(videoId),"collect_num",1); // 增加视频总收藏数 - statsCaseClinicalDao.inc(1L,"article_collect_num",1); + statsCaseClinicalDao.inc(1L,"video_collect_num",1); // 获取视频作者 LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); @@ -79,10 +88,10 @@ public class CaseClinicalVideoService { CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); // 增加医院视频收藏数 - statsCaseClinicalHospitalDao.inc(caseClinicalDoctor.getHospitalId(),"article_collect_num",1); + statsCaseClinicalHospitalDao.inc(caseClinicalDoctor.getHospitalId(),"video_collect_num",1); // 增加医生视频收藏数 - statsCaseClinicalDoctorDao.inc(caseClinicalDoctor.getDoctorId(),"article_collect_num",1); + statsCaseClinicalDoctorDao.inc(caseClinicalDoctor.getDoctorId(),"video_collect_num",1); } return true; @@ -113,7 +122,7 @@ public class CaseClinicalVideoService { caseClinicalVideoDao.dec(Long.valueOf(videoId),"collect_num",1); // 减少视频总收藏数 - statsCaseClinicalDao.dec(1L,"article_collect_num",1); + statsCaseClinicalDao.dec(1L,"video_collect_num",1); // 获取视频作者 LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); @@ -124,15 +133,220 @@ public class CaseClinicalVideoService { CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); // 减少医院视频收藏数 - statsCaseClinicalHospitalDao.dec(caseClinicalDoctor.getHospitalId(),"article_collect_num",1); + statsCaseClinicalHospitalDao.dec(caseClinicalDoctor.getHospitalId(),"video_collect_num",1); // 减少医生视频收藏数 - statsCaseClinicalDoctorDao.dec(caseClinicalDoctor.getDoctorId(),"article_collect_num",1); + statsCaseClinicalDoctorDao.dec(caseClinicalDoctor.getDoctorId(),"video_collect_num",1); } return true; } + /** + * 新增评论-临床病例库-视频 + * @param videoId 视频id + * @param userId 用户id + * @return bool + */ + @Transactional + public boolean AddClinicalVideoComment(String videoId, String userId, addClinicalVideoComment request){ + // 获取视频数据 + CaseClinicalVideoModel video = caseClinicalVideoDao.selectById(videoId); + if (video == null) { + throw new BusinessException("非法视频"); + } + + if (video.getVideoStatus() != 1){ + throw new BusinessException("非法视频"); + } + + // 处理评论内容 + BasicSensitiveWordService.FilterResult result = basicSensitiveWordService.filter(request.getContent()); + if (result.hasSensitive == 1){ + throw new BusinessException("存在敏感词,请修改后提交"); + } + + // 新增评论 + UserCommentClinicalVideoModel userCommentClinicalVideoData = new UserCommentClinicalVideoModel(); + userCommentClinicalVideoData.setUserId(Long.valueOf(userId)); + userCommentClinicalVideoData.setVideoId(Long.valueOf(videoId)); + userCommentClinicalVideoData.setStatus(1); + userCommentClinicalVideoData.setIsSensitive(0); + userCommentClinicalVideoData.setContent(request.getContent()); + userCommentClinicalVideoData.setCommentImage(Replace.addOssDomain(request.getCommentImage())); + + // 评论根id + if (request.getRootId() != null) { + userCommentClinicalVideoData.setRootId(Long.valueOf(request.getRootId())); + } + + // 评论父级id + if (request.getParentId() != null) { + userCommentClinicalVideoData.setParentId(Long.valueOf(request.getParentId())); + } + + int res = userCommentClinicalVideoDao.insert(userCommentClinicalVideoData); + return res > 0; + } + + /** + * 删除评论-临床病例库-视频 + * @param commentId 评论id + * @param userId 用户id + * @return bool + */ + @Transactional + public boolean DeleteClinicalVideoComment(String commentId, String userId){ + // 获取评论数据 + UserCommentClinicalVideoModel comment = userCommentClinicalVideoDao.selectById(commentId); + if (comment == null) { + return false; + } + + // 获取视频数据 + CaseClinicalVideoModel video = caseClinicalVideoDao.selectById(comment.getVideoId()); + if (video == null) { + return false; + } + + if (video.getVideoStatus() != 1){ + return false; + } + + // 检测用户是否视频作者 + boolean isAuthor = checkUserIsVideoAuthor(String.valueOf(video.getVideoId()),userId); + if (!isAuthor) { + return false; + } + + // 删除评论 + int res = userCommentClinicalVideoDao.deleteById(comment.getCommentId()); + if (res <= 0){ + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return false; + } + + return true; + } + + /** + * 置顶评论-临床病例库-视频 + * @param commentId 评论id + * @param userId 用户id + * @return bool + */ + @Transactional + public boolean AddTopClinicalVideoComment(String commentId, String userId){ + // 获取评论数据 + UserCommentClinicalVideoModel comment = userCommentClinicalVideoDao.selectById(commentId); + if (comment == null) { + return false; + } + + // 获取视频数据 + CaseClinicalVideoModel video = caseClinicalVideoDao.selectById(comment.getVideoId()); + if (video == null) { + return false; + } + + if (video.getVideoStatus() != 1){ + return false; + } + + // 检测用户是否视频作者 + boolean isAuthor = checkUserIsVideoAuthor(String.valueOf(comment.getVideoId()),userId); + if (!isAuthor) { + return false; + } + + if (comment.getIsTop() == 1){ + return true; + } + + // 置顶评论 + comment.setIsTop(1); + userCommentClinicalVideoDao.updateById(comment); + + return true; + } + + /** + * 取消置顶评论-临床病例库-视频 + * @param commentId 评论id + * @param userId 用户id + * @return bool + */ + @Transactional + public boolean deleteTopClinicalVideoComment(String commentId, String userId){ + // 获取评论数据 + UserCommentClinicalVideoModel comment = userCommentClinicalVideoDao.selectById(commentId); + if (comment == null) { + return false; + } + + // 获取视频数据 + CaseClinicalVideoModel video = caseClinicalVideoDao.selectById(comment.getVideoId()); + if (video == null) { + return false; + } + + if (video.getVideoStatus() != 1){ + return false; + } + + // 检测用户是否视频作者 + boolean isAuthor = checkUserIsVideoAuthor(String.valueOf(comment.getVideoId()),userId); + if (!isAuthor) { + return false; + } + + // 取消置顶评论 + if (comment.getIsTop() == 0){ + return true; + } + + // 置顶评论 + comment.setIsTop(0); + userCommentClinicalVideoDao.updateById(comment); + + return true; + } + + /** + * 检测用户是否视频作者 + * @param videoId 视频id + * @param userId 用户id + * @return bool 是否作者 + */ + public boolean checkUserIsVideoAuthor(String videoId,String userId){ + // 获取当前登录用户数据 + UserModel user = userDao.selectById(Long.valueOf(userId)); + if (user == null) { + return false; + } + + // 当前用户是否是作者之一 + boolean isAuthor = false; + + // 获取视频作者数据 + LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); + authorQueryWrapper.eq(CaseClinicalVideoAuthorModel::getVideoId, videoId); + List caseClinicalVideoAuthors = caseClinicalVideoAuthorDao.selectList(authorQueryWrapper); + for (CaseClinicalVideoAuthorModel author : caseClinicalVideoAuthors) { + // 查询医生 + CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); + if (caseClinicalDoctor == null) { + return false; + } + + if (Objects.equals(caseClinicalDoctor.getDoctorIden(), user.getUserIden())){ + isAuthor = true; + } + } + + return isAuthor; + } + /** * 获取用户收藏数据 * @param videoId 视频id diff --git a/src/main/resources/mapper/UserCommentClinicalArticleMapper.xml b/src/main/resources/mapper/UserCommentClinicalArticleMapper.xml index c461664..f0990a0 100644 --- a/src/main/resources/mapper/UserCommentClinicalArticleMapper.xml +++ b/src/main/resources/mapper/UserCommentClinicalArticleMapper.xml @@ -1,5 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/UserCommentClinicalVideoMapper.xml b/src/main/resources/mapper/UserCommentClinicalVideoMapper.xml index 8acd138..f3bddba 100644 --- a/src/main/resources/mapper/UserCommentClinicalVideoMapper.xml +++ b/src/main/resources/mapper/UserCommentClinicalVideoMapper.xml @@ -1,5 +1,37 @@ + + + \ No newline at end of file