case-data-api/src/main/java/com/example/caseData/controller/CaseClinicalArticleController.java
2025-07-30 18:48:21 +08:00

443 lines
16 KiB
Java

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<CaseClinicalArticleDto> 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<CaseClinicalArticleAuthorModel> authorQueryWrapper = new LambdaQueryWrapper<>();
authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, article.getArticleId());
List<CaseClinicalArticleAuthorModel> 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<T> 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<T> 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<T> 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<T> 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<T> 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<T> 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<Map<String, Object>> 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<String, Object> resultMap = new HashMap<>();
Page<UserCommentClinicalArticleDto> page = new Page<>(request.getPage(), request.getPageSize());
// 获取文章评论数据
IPage<UserCommentClinicalArticleDto> 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<CaseClinicalArticleAuthorModel> authorQueryWrapper = new LambdaQueryWrapper<>();
authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, request.getArticleId());
List<CaseClinicalArticleAuthorModel> 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<CaseClinicalDoctorModel> 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<UserCommentClinicalArticleDto> 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<UserCommentClinicalArticleModel> 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<Map<String, Object>> 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<String, Object> resultMap = new HashMap<>();
Page<UserCommentClinicalArticleDto> page = new Page<>(request.getPage(), request.getPageSize());
// 获取文章评论数据
IPage<GetUserClinicalArticleCommentPageDto> resultPage = userCommentClinicalArticleDao.getUserClinicalArticleCommentPage(
page,
userId
);
for (GetUserClinicalArticleCommentPageDto dto : resultPage.getRecords()){
dto.setAuthor(new ArrayList<>());
// 获取文章作者数据
LambdaQueryWrapper<CaseClinicalArticleAuthorModel> authorQueryWrapper = new LambdaQueryWrapper<>();
authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, dto.getArticleId());
List<CaseClinicalArticleAuthorModel> 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);
}
}