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.userCommentCaseExchange.GetUserCaseExchangeCommentPageDto; import com.example.caseData.dto.userCommentCaseExchange.UserCommentCaseExchangeDto; import com.example.caseData.dto.userCommentClinicalArticle.GetUserClinicalArticleCommentPageDto; 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.CaseClinicalArticleRequest.getUserClinicalArticleCommentPage; import com.example.caseData.request.caseExchangeRequest.getUserCaseExchangeCommentPage; import com.example.caseData.request.clinicalRequest.getClinicalArticleSearchPage; import com.example.caseData.service.CaseClinicalArticleService; import com.example.caseData.utils.IntToString; import com.example.caseData.utils.Replace; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.*; @RestController @RequestMapping("/api") public class CaseClinicalArticleController { @Resource private CaseClinicalArticleDao caseClinicalArticleDao; @Resource private CaseClinicalArticleAuthorDao caseClinicalArticleAuthorDao; @Resource private StatsCaseClinicalDoctorDao statsCaseClinicalDoctorDao; @Resource private CaseClinicalDoctorDao caseClinicalDoctorDao; @Resource private BasicHospitalDao basicHospitalDao; @Resource private UserCommentClinicalArticleDao userCommentClinicalArticleDao; @Resource private HttpServletRequest httpServletRequest; @Resource private CaseClinicalArticleService caseClinicalArticleService; @Resource private UserDao userDao; @Resource private StatsCaseClinicalDao statsCaseClinicalDao; @Resource private StatsCaseClinicalHospitalDao statsCaseClinicalHospitalDao; /** * 临床病例库-文章-详情 */ @GetMapping("/clinical/article/{article_id}") public Response getClinicalArticle( @PathVariable("article_id") String articleId ) { // 获取文章数据 CaseClinicalArticleModel article = caseClinicalArticleDao.selectById(articleId); if (article == null) { return Response.error("非法文章"); } // 检测作品状态 boolean result = caseClinicalArticleService.checkClinicalArticleStatus(article); if (!result){ return Response.error(201,null,"该作品已被删除"); } // 查找作者 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()); // 查询医生所属医院 BasicHospitalModel basicHospital = basicHospitalDao.selectById(caseClinicalDoctor.getHospitalId()); caseClinicalDoctor.setBasicHospital(basicHospital); author.setCaseClinicalDoctor(caseClinicalDoctor); } article.setAuthor(caseClinicalArticleAuthors); // 处理返回值 CaseClinicalArticleDto g = CaseClinicalArticleDto.GetDto(article); // 是否已收藏 String userId = (String) httpServletRequest.getAttribute("userId"); if (userId != null) { // 检测用户是否已收藏过 UserCollectClinicalArticleModel userCollectClinicalArticle = caseClinicalArticleService.getUserCollectClinicalArticleStatus(articleId,userId); if (userCollectClinicalArticle != null) { g.setCollect(true); } } return Response.success(g); } /** * 临床病例库-文章-收藏 */ @PostMapping("/clinical/article/collect/{article_id}") public Response AddClinicalArticleCollect( @PathVariable("article_id") String articleId ) { String userId = (String) httpServletRequest.getAttribute("userId"); if (userId == null) { return Response.error("操作失败"); } boolean res = caseClinicalArticleService.AddClinicalArticleCollect(articleId,userId); if (!res){ return Response.error("操作失败"); } return Response.success(); } /** * 临床病例库-文章-取消收藏 */ @DeleteMapping("/clinical/article/collect/{article_id}") public Response DeleteClinicalArticleCollect( @PathVariable("article_id") String articleId ) { String userId = (String) httpServletRequest.getAttribute("userId"); if (userId == null) { return Response.error("操作失败"); } boolean res = caseClinicalArticleService.DeleteClinicalArticleCollect(articleId,userId); if (!res){ return Response.error("操作失败"); } 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("操作失败1"); } try { boolean res = caseClinicalArticleService.DeleteClinicalArticleComment(commentId,userId); if (!res){ return Response.error("操作失败2"); } } 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(); } // 是否作者 int isAuthor = 0; // 获取文章作者数据 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(); } // 处理是否本人评论 if (Objects.equals(user.getUserIden(), caseClinicalDoctor.getDoctorIden())){ isAuthor = 1; } } // 处理返回值 for (UserCommentClinicalArticleDto dto : resultPage.getRecords()) { // 查询医生 LambdaQueryWrapper doctorQueryWrapper = new LambdaQueryWrapper<>(); doctorQueryWrapper.eq(CaseClinicalDoctorModel::getDoctorIden, dto.getUserIden()); CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectOne(doctorQueryWrapper); if (caseClinicalDoctor != null) { dto.setDoctorId(String.valueOf(caseClinicalDoctor.getDoctorId())); } // 去除用户唯一标识 dto.setUserIden(null); dto.setAvatar(Replace.addOssDomain(dto.getAvatar())); // 图片 dto.setCommentImage(Replace.addOssDomain(dto.getCommentImage())); // 获取次级评论 if (request.getIsHaveSubComment() == 1){ if (dto.getRootId() == null){ List subComments = userCommentClinicalArticleDao.getClinicalArticleCommentList( dto.getArticleId(), dto.getCommentId(), 5 ); for (UserCommentClinicalArticleDto subComment : subComments) { // 查询医生 doctorQueryWrapper = new LambdaQueryWrapper<>(); doctorQueryWrapper.eq(CaseClinicalDoctorModel::getDoctorIden, subComment.getUserIden()); caseClinicalDoctor = caseClinicalDoctorDao.selectOne(doctorQueryWrapper); if (caseClinicalDoctor != null) { subComment.setDoctorId(String.valueOf(caseClinicalDoctor.getDoctorId())); } subComment.setAvatar(Replace.addOssDomain(subComment.getAvatar())); } dto.setSubComment(subComments); } } } // 获取全部评论数 LambdaQueryWrapper aQueryWrapper = new LambdaQueryWrapper<>(); aQueryWrapper.eq(UserCommentClinicalArticleModel::getArticleId, request.getArticleId()); Long total = userCommentClinicalArticleDao.selectCount(aQueryWrapper); resultMap.put("page", resultPage.getCurrent()); resultMap.put("pageSize", resultPage.getSize()); resultMap.put("total", total); resultMap.put("data", resultPage.getRecords()); resultMap.put("is_author", isAuthor); return Response.success(resultMap); } /** * 临床病例库-文章-评论-分页-用户 */ @PostMapping("/clinical/article/user/comment/page") public Response> getUserClinicalArticleCommentPage( @Validated() @RequestBody getUserClinicalArticleCommentPage 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.getUserClinicalArticleCommentPage( page, userId ); for (GetUserClinicalArticleCommentPageDto dto : resultPage.getRecords()){ dto.setAuthor(new ArrayList<>()); // 获取文章作者数据 LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, dto.getArticleId()); List caseClinicalArticleAuthors = caseClinicalArticleAuthorDao.selectList(authorQueryWrapper); for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) { GetUserClinicalArticleCommentPageDto.CaseClinicalArticleAuthorDto authorDto = new GetUserClinicalArticleCommentPageDto.CaseClinicalArticleAuthorDto(); // 查询医生 CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); if (caseClinicalDoctor == null) { return Response.error(); } authorDto.setDoctorName(caseClinicalDoctor.getDoctorName()); dto.getAuthor().add(authorDto); } } resultMap.put("page", resultPage.getCurrent()); resultMap.put("pageSize", resultPage.getSize()); resultMap.put("total", resultPage.getTotal()); resultMap.put("data", resultPage.getRecords()); return Response.success(resultMap); } }