case-data-api/src/main/java/com/example/caseData/controller/CaseClinicalArticleController.java
2025-06-18 10:56:40 +08:00

540 lines
20 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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("非法文章");
}
// 查找作者
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("操作失败");
}
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<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();
}
// 获取文章作者数据
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();
}
// 处理是否本人评论
for (UserCommentClinicalArticleDto dto : resultPage.getRecords()) {
if (Objects.equals(dto.getUserIden(), caseClinicalDoctor.getDoctorIden())){
dto.setIsAuthor(1);
}
}
}
// 处理返回值
for (UserCommentClinicalArticleDto dto : resultPage.getRecords()) {
// 去除用户唯一标识
dto.setUserIden(null);
// 图片
dto.setCommentImage(Replace.addOssDomain(dto.getCommentImage()));
// 获取次级评论
if (request.getIsHaveSubComment() == 1){
if (dto.getRootId() == null){
List<UserCommentClinicalArticleDto> 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);
}
/**
* 临床病例库-文章-评论-分页-用户
*/
@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);
}
/**
* 新增文章的统计字段
* @param articleId 文章id
* @param type 类型1:阅读量 2收藏量 3:评论数
*/
public void IncClinicalArticleStats(String articleId,Integer type){
// 获取文章作者
LambdaQueryWrapper<CaseClinicalArticleAuthorModel> authorQueryWrapper = new LambdaQueryWrapper<>();
authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, articleId);
List<CaseClinicalArticleAuthorModel> caseClinicalArticleAuthors = caseClinicalArticleAuthorDao.selectList(authorQueryWrapper);
// 阅读量
if (type == 1){
caseClinicalArticleDao.inc(Long.valueOf(articleId),"read_num",1);
statsCaseClinicalDao.inc(1L,"article_read_num",1);
for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) {
// 查询医生
CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId());
// 增加医院文章收藏数
statsCaseClinicalHospitalDao.inc(caseClinicalDoctor.getHospitalId(),"article_read_num",1);
// 增加医生文章收藏数
statsCaseClinicalDoctorDao.inc(caseClinicalDoctor.getDoctorId(),"article_read_num",1);
}
}
// 收藏量
if (type == 2){
caseClinicalArticleDao.inc(Long.valueOf(articleId),"collect_num",1);
statsCaseClinicalDao.inc(1L,"article_collect_num",1);
for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) {
// 查询医生
CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId());
// 增加医院文章收藏数
statsCaseClinicalHospitalDao.inc(caseClinicalDoctor.getHospitalId(),"article_collect_num",1);
// 增加医生文章收藏数
statsCaseClinicalDoctorDao.inc(caseClinicalDoctor.getDoctorId(),"article_collect_num",1);
}
}
// 评论数
if (type == 3){
caseClinicalArticleDao.inc(Long.valueOf(articleId),"comment_num",1);
statsCaseClinicalDao.inc(1L,"article_comment_num",1);
for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) {
// 查询医生
CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId());
// 增加医院文章收藏数
statsCaseClinicalHospitalDao.inc(caseClinicalDoctor.getHospitalId(),"article_comment_num",1);
// 增加医生文章收藏数
statsCaseClinicalDoctorDao.inc(caseClinicalDoctor.getDoctorId(),"article_comment_num",1);
}
}
}
/**
* 减少文章的统计字段
* @param articleId 文章id
* @param type 类型1:阅读量 2收藏量 3:评论数
*/
public void DecClinicalArticleStats(String articleId,Integer type){
// 获取文章作者
LambdaQueryWrapper<CaseClinicalArticleAuthorModel> authorQueryWrapper = new LambdaQueryWrapper<>();
authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, articleId);
List<CaseClinicalArticleAuthorModel> caseClinicalArticleAuthors = caseClinicalArticleAuthorDao.selectList(authorQueryWrapper);
// 阅读量
if (type == 1){
caseClinicalArticleDao.inc(Long.valueOf(articleId),"read_num",1);
statsCaseClinicalDao.inc(1L,"article_read_num",1);
for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) {
// 查询医生
CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId());
// 增加医院文章收藏数
statsCaseClinicalHospitalDao.inc(caseClinicalDoctor.getHospitalId(),"article_read_num",1);
// 增加医生文章收藏数
statsCaseClinicalDoctorDao.inc(caseClinicalDoctor.getDoctorId(),"article_read_num",1);
}
}
// 收藏量
if (type == 2){
caseClinicalArticleDao.inc(Long.valueOf(articleId),"collect_num",1);
statsCaseClinicalDao.inc(1L,"article_collect_num",1);
for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) {
// 查询医生
CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId());
// 增加医院文章收藏数
statsCaseClinicalHospitalDao.inc(caseClinicalDoctor.getHospitalId(),"article_collect_num",1);
// 增加医生文章收藏数
statsCaseClinicalDoctorDao.inc(caseClinicalDoctor.getDoctorId(),"article_collect_num",1);
}
}
// 评论数
if (type == 3){
caseClinicalArticleDao.inc(Long.valueOf(articleId),"comment_num",1);
statsCaseClinicalDao.inc(1L,"article_comment_num",1);
for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) {
// 查询医生
CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId());
// 增加医院文章收藏数
statsCaseClinicalHospitalDao.inc(caseClinicalDoctor.getHospitalId(),"article_comment_num",1);
// 增加医生文章收藏数
statsCaseClinicalDoctorDao.inc(caseClinicalDoctor.getDoctorId(),"article_comment_num",1);
}
}
}
}