case-data-api/src/main/java/com/example/caseData/controller/CaseExchangeController.java

745 lines
26 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.caseExchange.CaseExchangeDto;
import com.example.caseData.dto.caseExchangeLabel.CaseExchangeLabelDto;
import com.example.caseData.dto.caseExchangeVote.CaseExchangeVoteDto;
import com.example.caseData.dto.caseExchangeVoteOption.CaseExchangeVoteOptionDto;
import com.example.caseData.dto.userCommentCaseExchange.GetUserCaseExchangeCommentPageDto;
import com.example.caseData.dto.userCommentCaseExchange.UserCommentCaseExchangeDto;
import com.example.caseData.dto.userCommentClinicalVideo.UserCommentClinicalVideoDto;
import com.example.caseData.exception.BusinessException;
import com.example.caseData.model.*;
import com.example.caseData.request.caseExchangeRequest.*;
import com.example.caseData.service.CaseExchangeService;
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.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@RestController
@RequestMapping("/api")
public class CaseExchangeController {
@Resource
private HttpServletRequest httpServletRequest;
@Resource
private CaseExchangeDao caseExchangeDao;
@Resource
private UserDao userDao;
@Resource
private BasicHospitalDao basicHospitalDao;
@Resource
private CaseExchangeService caseExchangeService;
@Resource
private CaseExchangeVoteDao caseExchangeVoteDao;
@Resource
private CaseExchangeLabelDao caseExchangeLabelDao;
@Resource
private CaseExchangeVoteOptionDao caseExchangeVoteOptionDao;
@Resource
private UserVoteExchangeDao userVoteExchangeDao;
@Resource
private UserCommentExchangeDao userCommentExchangeDao;
@Resource
private CaseClinicalDoctorDao caseClinicalDoctorDao;
/**
* 临床病例库-病例交流-搜索
*/
@PostMapping("/exchange/search")
public Response<Map<String, Object>> getCaseExchangeSearchPage(
@Validated()
@RequestBody getCaseExchangeSearchPage request
) {
UserModel user = new UserModel();
BasicHospitalModel basicHospital = new BasicHospitalModel();
// 此步骤是为了在我的病例交流列表页面少查询
String userId = (String) httpServletRequest.getAttribute("userId");
request.validateForPage();
Map<String, Object> resultMap = new HashMap<>();
Page<CaseExchangeDto> page = new Page<>(request.getPage(), request.getPageSize());
// 获取数据
IPage<CaseExchangeDto> resultPage = caseExchangeDao.getCaseExchangeSearchPage(
page,
request.getKeyword(),
request.getUserId(),
request.getIsSelected(),
request.getLabelIden(),
request.handleOrder()
);
for (CaseExchangeDto dto : resultPage.getRecords()) {
// 处理预览视频
dto.setExchangeContentVideoString(dto.getExchangeContentVideoString());
// 处理预览图片
if (dto.getExchangeContentVideo() == null){
dto.setExchangeContentImageString(dto.getExchangeContentImageString());
}
dto.setExchangeContentImageString("");
dto.setExchangeContentVideoString("");
user = userDao.selectById(dto.getUserId());
if (user == null) {
return Response.error();
}
// 获取当前用户所属医院
basicHospital = basicHospitalDao.selectById(user.getHospitalId());
if (basicHospital == null) {
return Response.error();
}
dto.setAvatar(Replace.addOssDomain(user.getAvatar()));
dto.setUserName(user.getUserName());
dto.setHospitalName(basicHospital.getHospitalName());
// 获取用户收藏状态
UserCollectExchangeModel userCollectExchangeModel = caseExchangeService.getUserCollectExchangeStatus(dto.getExchangeId(),userId);
if (userCollectExchangeModel != null) {
dto.setCollect(true);
}
// 查找标签
LambdaQueryWrapper<CaseExchangeLabelModel> labelQueryWrapper = new LambdaQueryWrapper<>();
labelQueryWrapper.eq(CaseExchangeLabelModel::getExchangeId, dto.getExchangeId());
List<CaseExchangeLabelModel> caseExchangeLabels = caseExchangeLabelDao.selectList(labelQueryWrapper);
if (caseExchangeLabels != null && !caseExchangeLabels.isEmpty()) {
List<CaseExchangeLabelDto> caseExchangeLabelDto = CaseExchangeLabelDto.GetListDto(caseExchangeLabels);
dto.setLabel(caseExchangeLabelDto);
}
}
resultMap.put("page", resultPage.getCurrent());
resultMap.put("pageSize", resultPage.getSize());
resultMap.put("total", resultPage.getTotal());
resultMap.put("data", resultPage.getRecords());
return Response.success(resultMap);
}
/**
* 病例交流-详情
*/
@GetMapping("/exchange/{exchange_id}")
public Response<CaseExchangeDto> getExchange(
@PathVariable("exchange_id") String exchangeId
) {
String userId = (String) httpServletRequest.getAttribute("userId");
// 获取数据
CaseExchangeModel caseExchange = caseExchangeDao.selectById(exchangeId);
if (caseExchange == null) {
return Response.error();
}
// 检测作品状态
boolean result = caseExchangeService.checkCaseExchangeStatus(caseExchange);
if (!result){
return Response.error(201,null,"该作品已被删除");
}
// 查找用户
UserModel user = userDao.selectById(caseExchange.getUserId());
if (user == null) {
return Response.error();
}
// 获取当前用户所属医院
BasicHospitalModel basicHospital = basicHospitalDao.selectById(user.getHospitalId());
if (basicHospital == null) {
return Response.error();
}
// 获取投票数据
LambdaQueryWrapper<CaseExchangeVoteModel> caseExchangeVoteQueryWrapper = new LambdaQueryWrapper<>();
caseExchangeVoteQueryWrapper.eq(CaseExchangeVoteModel::getExchangeId, caseExchange.getExchangeId());
CaseExchangeVoteModel caseExchangeVote = caseExchangeVoteDao.selectOne(caseExchangeVoteQueryWrapper);
if (caseExchangeVote != null) {
// 检测是否过期
if (caseExchangeVote.getEndTime() == null) {
return Response.error();
}
// 获取选项
LambdaQueryWrapper<CaseExchangeVoteOptionModel> caseExchangeVoteOptionQueryWrapper = new LambdaQueryWrapper<>();
caseExchangeVoteOptionQueryWrapper.eq(CaseExchangeVoteOptionModel::getVoteId, caseExchangeVote.getVoteId());
List<CaseExchangeVoteOptionModel> caseExchangeVoteOptions = caseExchangeVoteOptionDao.selectList(caseExchangeVoteOptionQueryWrapper);
if (caseExchangeVoteOptions.isEmpty()) {
return Response.error();
}
caseExchangeVote.setCaseExchangeVoteOption(caseExchangeVoteOptions);
caseExchange.setCaseExchangeVote(caseExchangeVote);
}
// 获取标签数据
LambdaQueryWrapper<CaseExchangeLabelModel> caseExchangeLabelQueryWrapper = new LambdaQueryWrapper<>();
caseExchangeLabelQueryWrapper.eq(CaseExchangeLabelModel::getExchangeId, caseExchange.getExchangeId());
List<CaseExchangeLabelModel> caseExchangeLabels = caseExchangeLabelDao.selectList(caseExchangeLabelQueryWrapper);
if (caseExchangeLabels != null && !caseExchangeLabels.isEmpty()) {
caseExchange.setCaseExchangeLabel(caseExchangeLabels);
}
// 处理返回值
CaseExchangeDto g = CaseExchangeDto.GetDto(caseExchange);
g.setAvatar(Replace.addOssDomain(user.getAvatar()));
g.setUserName(user.getUserName());
g.setHospitalName(basicHospital.getHospitalName());
// 获取用户收藏状态
if (userId != null) {
// 检测用户是否已收藏过
UserCollectExchangeModel userCollectExchangeModel = caseExchangeService.getUserCollectExchangeStatus(String.valueOf(caseExchange.getExchangeId()),userId);
if (userCollectExchangeModel != null) {
g.setCollect(true);
}
}
// 处理投票数据
if (g.getCaseExchangeVote() != null){
if (g.getCaseExchangeVote().getEndTime().isAfter(LocalDateTime.now())) {
g.getCaseExchangeVote().setIsEnabled(1);
}else{
g.getCaseExchangeVote().setIsEnabled(0);
}
// 用户投票状态
if (userId != null) {
LambdaQueryWrapper<UserVoteExchangeModel> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(UserVoteExchangeModel::getUserId, userId);
queryWrapper.eq(UserVoteExchangeModel::getExchangeId, exchangeId);
queryWrapper.eq(UserVoteExchangeModel::getVoteId, g.getCaseExchangeVote().getVoteId());
UserVoteExchangeModel userVoteExchange = userVoteExchangeDao.selectOne(queryWrapper);
if (userVoteExchange != null) {
// 已投过票
g.getCaseExchangeVote().setIsHaveVoted(1);
}
}
// 处理投票数据
Integer voteNum = 0;
for (CaseExchangeVoteOptionDto dto : g.getCaseExchangeVote().getCaseExchangeVoteOption()){
voteNum += dto.getVoteNum();
}
for (CaseExchangeVoteOptionDto dto : g.getCaseExchangeVote().getCaseExchangeVoteOption()){
Integer proportion = (int) (Math.round((double) dto.getVoteNum() / voteNum * 10000) / 100.0);
dto.setProportion(proportion);
}
}
return Response.success(g);
}
/**
* 临床病例库-病例交流-列表
*/
@PostMapping("/exchange/list")
public Response<List<CaseExchangeDto>> getCaseExchangeSearchList(
@Validated()
@RequestBody getCaseExchangeSearchList request
) {
request.validateForLimit();
// 获取数据
List<CaseExchangeDto> caseExchanges = caseExchangeDao.getCaseExchangeSearchLimitList(
request.getLimit(),
request.getKeyword(),
null,
request.getIsSelected(),
request.handleOrder()
);
return Response.success(caseExchanges);
}
/**
* 病例交流-详情-投票数据
*/
@GetMapping("/exchange/vote/{exchange_id}")
public Response<CaseExchangeVoteDto> getExchangeVote(
@PathVariable("exchange_id") String exchangeId
) {
String userId = (String) httpServletRequest.getAttribute("userId");
// 获取投票数据
LambdaQueryWrapper<CaseExchangeVoteModel> caseExchangeVoteQueryWrapper = new LambdaQueryWrapper<>();
caseExchangeVoteQueryWrapper.eq(CaseExchangeVoteModel::getExchangeId, exchangeId);
CaseExchangeVoteModel caseExchangeVote = caseExchangeVoteDao.selectOne(caseExchangeVoteQueryWrapper);
if (caseExchangeVote == null) {
return Response.success();
}
// 检测是否过期
if (caseExchangeVote.getEndTime() == null) {
return Response.error();
}
// 获取选项
LambdaQueryWrapper<CaseExchangeVoteOptionModel> caseExchangeVoteOptionQueryWrapper = new LambdaQueryWrapper<>();
caseExchangeVoteOptionQueryWrapper.eq(CaseExchangeVoteOptionModel::getVoteId, caseExchangeVote.getVoteId());
List<CaseExchangeVoteOptionModel> caseExchangeVoteOptions = caseExchangeVoteOptionDao.selectList(caseExchangeVoteOptionQueryWrapper);
if (caseExchangeVoteOptions.isEmpty()) {
return Response.error();
}
caseExchangeVote.setCaseExchangeVoteOption(caseExchangeVoteOptions);
// 处理返回值
CaseExchangeVoteDto g = CaseExchangeVoteDto.GetDto(caseExchangeVote);
// 过期状态
if (g.getEndTime().isAfter(LocalDateTime.now())) {
g.setIsEnabled(1);
}else{
g.setIsEnabled(0);
}
// 用户投票状态
if (userId != null) {
LambdaQueryWrapper<UserVoteExchangeModel> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(UserVoteExchangeModel::getUserId, userId);
queryWrapper.eq(UserVoteExchangeModel::getExchangeId, exchangeId);
queryWrapper.eq(UserVoteExchangeModel::getVoteId, g.getVoteId());
UserVoteExchangeModel userVoteExchange = userVoteExchangeDao.selectOne(queryWrapper);
if (userVoteExchange != null) {
// 已投过票
g.setIsHaveVoted(1);
}
}
// 处理投票数据
Integer voteNum = 0;
for (CaseExchangeVoteOptionDto dto : g.getCaseExchangeVoteOption()){
voteNum += dto.getVoteNum();
}
for (CaseExchangeVoteOptionDto dto : g.getCaseExchangeVoteOption()){
Integer proportion = (int) (Math.round((double) dto.getVoteNum() / voteNum * 10000) / 100.0);
dto.setProportion(proportion);
}
return Response.success(g);
}
/**
* 病例交流-新增
*/
@PostMapping("/exchange")
public Response<T> AddCaseExchange(
@Validated()
@RequestBody addCaseExchange request
) {
String userId = (String) httpServletRequest.getAttribute("userId");
if (userId == null) {
return Response.error("操作失败");
}
try {
boolean res = caseExchangeService.AddCaseExchange(userId,request);
if (!res){
return Response.error("操作失败");
}
} catch (BusinessException e) {
return Response.error(e.getMessage());
}
return Response.success();
}
/**
* 病例交流-修改
*/
@PutMapping("/exchange/{exchange_id}")
public Response<T> UpdateCaseExchange(
@Validated()
@RequestBody updateCaseExchange request,
@PathVariable("exchange_id") String exchangeId
) {
String userId = (String) httpServletRequest.getAttribute("userId");
if (userId == null) {
return Response.error("操作失败");
}
try {
boolean res = caseExchangeService.UpdateCaseExchange(userId,exchangeId,request);
if (!res){
return Response.error("操作失败");
}
} catch (BusinessException e) {
return Response.error(e.getMessage());
}
return Response.success();
}
/**
* 病例交流-删除
*/
@DeleteMapping("/exchange/{exchange_id}")
public Response<T> DeleteCaseExchange(
@PathVariable("exchange_id") String exchangeId
) {
String userId = (String) httpServletRequest.getAttribute("userId");
if (userId == null) {
return Response.error("操作失败");
}
try {
boolean res = caseExchangeService.DeleteCaseExchange(exchangeId,userId);
if (!res){
return Response.error("操作失败");
}
} catch (BusinessException e) {
return Response.error(e.getMessage());
}
return Response.success();
}
/**
* 病例交流-收藏
*/
@PostMapping("/exchange/collect/{exchange_id}")
public Response<T> AddCaseExchangeCollect(
@PathVariable("exchange_id") String exchangeId
) {
String userId = (String) httpServletRequest.getAttribute("userId");
if (userId == null) {
return Response.error("操作失败");
}
boolean res = caseExchangeService.AddCaseExchangeCollect(exchangeId,userId);
if (!res){
return Response.error("操作失败");
}
return Response.success();
}
/**
* 病例交流-取消收藏
*/
@DeleteMapping("/exchange/collect/{exchange_id}")
public Response<T> DeleteCaseExchangeCollect(
@PathVariable("exchange_id") String exchangeId
) {
String userId = (String) httpServletRequest.getAttribute("userId");
if (userId == null) {
return Response.error("操作失败");
}
boolean res = caseExchangeService.DeleteCaseExchangeCollect(exchangeId,userId);
if (!res){
return Response.error("操作失败");
}
return Response.success();
}
/**
* 病例交流-新增评论
*/
@PostMapping("/exchange/comment/{exchange_id}")
public Response<Map<String, Object>> AddCaseExchangeComment(
@PathVariable("exchange_id") String exchangeId,
@Validated()
@RequestBody addCaseExchangeComment request
) {
String userId = (String) httpServletRequest.getAttribute("userId");
if (userId == null) {
return Response.error("操作失败");
}
Map<String, Object> resultData = new HashMap<>();
resultData.put("status", 1);
resultData.put("message", "成功");
try {
resultData = caseExchangeService.AddCaseExchangeComment(exchangeId,userId,request);
return Response.success(200,resultData,"");
} catch (BusinessException e) {
return Response.error(e.getMessage());
}
}
/**
* 病例交流-评论-删除
*/
@DeleteMapping("/exchange/comment/{comment_id}")
public Response<T> DeleteCaseExchangeComment(
@PathVariable("comment_id") String commentId
) {
String userId = (String) httpServletRequest.getAttribute("userId");
if (userId == null) {
return Response.error("操作失败");
}
try {
boolean res = caseExchangeService.DeleteCaseExchangeComment(commentId,userId);
if (!res){
return Response.error("操作失败");
}
} catch (BusinessException e) {
return Response.error(e.getMessage());
}
return Response.success();
}
/**
* 病例交流-评论-置顶
*/
@PutMapping("/exchange/comment/top/{comment_id}")
public Response<T> AddTopCaseExchangeComment(
@PathVariable("comment_id") String commentId
) {
String userId = (String) httpServletRequest.getAttribute("userId");
if (userId == null) {
return Response.error("操作失败");
}
try {
boolean res = caseExchangeService.AddTopCaseExchangeComment(commentId,userId);
if (!res){
return Response.error("操作失败");
}
} catch (BusinessException e) {
return Response.error(e.getMessage());
}
return Response.success();
}
/**
* 病例交流-评论-取消置顶
*/
@DeleteMapping("/exchange/comment/top/{comment_id}")
public Response<T> deleteTopCaseExchangeComment(
@PathVariable("comment_id") String commentId
) {
String userId = (String) httpServletRequest.getAttribute("userId");
if (userId == null) {
return Response.error("操作失败");
}
try {
boolean res = caseExchangeService.deleteTopCaseExchangeComment(commentId,userId);
if (!res){
return Response.error("操作失败");
}
} catch (BusinessException e) {
return Response.error(e.getMessage());
}
return Response.success();
}
/**
* 病例交流-评论-分页
*/
@PostMapping("/exchange/comment/page")
public Response<Map<String, Object>> getCaseExchangeCommentPage(
@Validated()
@RequestBody getCaseExchangeCommentPage 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<UserCommentCaseExchangeDto> page = new Page<>(request.getPage(), request.getPageSize());
// 获取评论数据
IPage<UserCommentCaseExchangeDto> resultPage = userCommentExchangeDao.getCaseExchangeCommentPage(
page,
request.getExchangeId(),
request.getRootId()
);
// 处理是否本人评论
for (UserCommentCaseExchangeDto dto : resultPage.getRecords()) {
if (Objects.equals(dto.getUserId(), userId)){
dto.setIsAuthor(1);
}
}
// 处理返回值
for (UserCommentCaseExchangeDto 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.setAvatar(Replace.addOssDomain(dto.getAvatar()));
// 去除用户唯一标识
dto.setUserIden(null);
// 图片
dto.setCommentImage(Replace.addOssDomain(dto.getCommentImage()));
// 获取次级评论
if (request.getIsHaveSubComment() == 1){
if (dto.getRootId() == null){
List<UserCommentCaseExchangeDto> subComments = userCommentExchangeDao.getCaseExchangeCommentList(
dto.getExchangeId(),
dto.getCommentId(),
5
);
for (UserCommentCaseExchangeDto 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()));
subComment.setCommentImage(Replace.addOssDomain(subComment.getCommentImage()));
}
dto.setSubComment(subComments);
}
}
}
// 获取全部评论数
LambdaQueryWrapper<UserCommentExchangeModel> aQueryWrapper = new LambdaQueryWrapper<>();
aQueryWrapper.eq(UserCommentExchangeModel::getExchangeId, request.getExchangeId());
aQueryWrapper.eq(UserCommentExchangeModel::getDeleteStatus, 0);
Long total = userCommentExchangeDao.selectCount(aQueryWrapper);
resultMap.put("page", resultPage.getCurrent());
resultMap.put("pageSize", resultPage.getSize());
resultMap.put("total", total);
resultMap.put("data", resultPage.getRecords());
return Response.success(resultMap);
}
/**
* 病例交流-评论-分页-用户
*/
@PostMapping("/exchange/user/comment/page")
public Response<Map<String, Object>> getUserCaseExchangeCommentPage(
@Validated()
@RequestBody getUserCaseExchangeCommentPage 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<UserCommentCaseExchangeDto> page = new Page<>(request.getPage(), request.getPageSize());
// 获取评论数据
IPage<GetUserCaseExchangeCommentPageDto> resultPage = userCommentExchangeDao.getUserCaseExchangeCommentPage(
page,
userId
);
// 处理返回值
for (GetUserCaseExchangeCommentPageDto dto : resultPage.getRecords()) {
if (dto.getAuthorTitleInt() != null) {
dto.setAuthorTitle(IntToString.DoctorTitleToString(dto.getAuthorTitleInt()));
}
}
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("/exchange/vote/{exchange_id}")
public Response<T> AddCaseExchangeVote(
@Validated()
@PathVariable("exchange_id") String exchangeId,
@RequestBody addCaseExchangeVote r
) {
String userId = (String) httpServletRequest.getAttribute("userId");
if (userId == null) {
return Response.error("操作失败");
}
boolean res = caseExchangeService.AddCaseExchangeVote(exchangeId,userId,r.getOptionId());
if (!res){
return Response.error("操作失败");
}
return Response.success();
}
}