540 lines
20 KiB
Java
540 lines
20 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("非法文章");
|
||
}
|
||
|
||
// 查找作者
|
||
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);
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
}
|
||
}
|