case-data-api/src/main/java/com/example/caseData/service/CaseClinicalArticleService.java
2025-05-23 13:18:54 +08:00

371 lines
13 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.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.example.caseData.dao.*;
import com.example.caseData.exception.BusinessException;
import com.example.caseData.model.*;
import com.example.caseData.request.CaseClinicalArticleRequest.addClinicalArticleComment;
import com.example.caseData.utils.Replace;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.util.List;
import java.util.Objects;
//import static com.baomidou.mybatisplus.extension.toolkit.Db.removeById;
//import static com.baomidou.mybatisplus.extension.toolkit.Db.save;
@Service
public class CaseClinicalArticleService {
@Resource
private UserCollectClinicalArticleDao userCollectClinicalArticleDao;
@Resource
private CaseClinicalArticleDao caseClinicalArticleDao;
@Resource
private StatsCaseClinicalDao statsCaseClinicalDao;
@Resource
private StatsCaseClinicalHospitalDao statsCaseClinicalHospitalDao;
@Resource
private StatsCaseClinicalDoctorDao statsCaseClinicalDoctorDao;
@Resource
private CaseClinicalArticleAuthorDao caseClinicalArticleAuthorDao;
@Resource
private CaseClinicalDoctorDao caseClinicalDoctorDao;
@Resource
private BasicSensitiveWordService basicSensitiveWordService;
@Resource
private UserCommentClinicalArticleDao userCommentClinicalArticleDao;
@Resource
private UserDao userDao;
/**
* 新增收藏-临床病例库-文章
* @param articleId 文章id
* @param userId 用户id
* @return bool
*/
@Transactional
public boolean AddClinicalArticleCollect(String articleId,String userId){
// 获取文章数据
CaseClinicalArticleModel article = caseClinicalArticleDao.selectById(articleId);
if (article == null) {
return false;
}
// 检测用户是否已收藏过
UserCollectClinicalArticleModel userCollectClinicalArticle = getUserCollectClinicalArticleStatus(articleId,userId);
if (userCollectClinicalArticle != null) {
return true;
}
// 新增收藏
UserCollectClinicalArticleModel userCollectClinicalArticleData = new UserCollectClinicalArticleModel();
userCollectClinicalArticleData.setUserId(Long.valueOf(userId));
userCollectClinicalArticleData.setArticleId(Long.valueOf(articleId));
int res = userCollectClinicalArticleDao.insert(userCollectClinicalArticleData);
if (res <= 0){
return false;
}
// 增加文章收藏数
caseClinicalArticleDao.inc(Long.valueOf(articleId),"collect_num",1);
// 增加文章总收藏数
statsCaseClinicalDao.inc(1L,"article_collect_num",1);
// 获取文章作者
LambdaQueryWrapper<CaseClinicalArticleAuthorModel> authorQueryWrapper = new LambdaQueryWrapper<>();
authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, articleId);
List<CaseClinicalArticleAuthorModel> caseClinicalArticleAuthors = caseClinicalArticleAuthorDao.selectList(authorQueryWrapper);
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);
}
return true;
}
/**
* 取消收藏-临床病例库-文章
* @param articleId 文章id
* @param userId 用户id
* @return bool
*/
@Transactional
public boolean DeleteClinicalArticleCollect(String articleId,String userId){
// 检测用户是否已收藏过
UserCollectClinicalArticleModel userCollectClinicalArticle = getUserCollectClinicalArticleStatus(articleId,userId);
if (userCollectClinicalArticle == null) {
return true;
}
// 删除收藏
int res = userCollectClinicalArticleDao.deleteById(userCollectClinicalArticle.getCollectId());
if (res <= 0){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
}
// 减少文章收藏数
caseClinicalArticleDao.dec(Long.valueOf(articleId),"collect_num",1);
// 减少文章总收藏数
statsCaseClinicalDao.dec(1L,"article_collect_num",1);
// 获取文章作者
LambdaQueryWrapper<CaseClinicalArticleAuthorModel> authorQueryWrapper = new LambdaQueryWrapper<>();
authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, articleId);
List<CaseClinicalArticleAuthorModel> caseClinicalArticleAuthors = caseClinicalArticleAuthorDao.selectList(authorQueryWrapper);
for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) {
// 查询医生
CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId());
// 减少医院文章收藏数
statsCaseClinicalHospitalDao.dec(caseClinicalDoctor.getHospitalId(),"article_collect_num",1);
// 减少医生文章收藏数
statsCaseClinicalDoctorDao.dec(caseClinicalDoctor.getDoctorId(),"article_collect_num",1);
}
return true;
}
/**
* 新增评论-临床病例库-文章
* @param articleId 文章id
* @param userId 用户id
* @return bool
*/
@Transactional
public boolean AddClinicalArticleComment(String articleId, String userId, addClinicalArticleComment request){
// 获取文章数据
CaseClinicalArticleModel article = caseClinicalArticleDao.selectById(articleId);
if (article == null) {
throw new BusinessException("非法文章");
}
if (article.getArticleStatus() != 1){
throw new BusinessException("非法文章");
}
// 处理评论内容
BasicSensitiveWordService.FilterResult result = basicSensitiveWordService.filter(request.getContent());
if (result.hasSensitive == 1){
throw new BusinessException("存在敏感词,请修改后提交");
}
// 新增评论
UserCommentClinicalArticleModel userCommentClinicalArticleData = new UserCommentClinicalArticleModel();
userCommentClinicalArticleData.setUserId(Long.valueOf(userId));
userCommentClinicalArticleData.setArticleId(Long.valueOf(articleId));
userCommentClinicalArticleData.setStatus(1);
userCommentClinicalArticleData.setIsSensitive(0);
userCommentClinicalArticleData.setContent(request.getContent());
userCommentClinicalArticleData.setCommentImage(Replace.addOssDomain(request.getCommentImage()));
// 评论根id
if (request.getRootId() != null) {
userCommentClinicalArticleData.setRootId(Long.valueOf(request.getRootId()));
}
// 评论父级id
if (request.getParentId() != null) {
userCommentClinicalArticleData.setParentId(Long.valueOf(request.getParentId()));
}
int res = userCommentClinicalArticleDao.insert(userCommentClinicalArticleData);
return res > 0;
}
/**
* 删除评论-临床病例库-文章
* @param commentId 评论id
* @param userId 用户id
* @return bool
*/
@Transactional
public boolean DeleteClinicalArticleComment(String commentId, String userId){
// 获取评论数据
UserCommentClinicalArticleModel comment = userCommentClinicalArticleDao.selectById(commentId);
if (comment == null) {
return false;
}
// 获取文章数据
CaseClinicalArticleModel article = caseClinicalArticleDao.selectById(comment.getArticleId());
if (article == null) {
return false;
}
if (article.getArticleStatus() != 1){
return false;
}
// 检测用户是否文章作者
boolean isAuthor = checkUserIsArticleAuthor(String.valueOf(article.getArticleId()),userId);
if (!isAuthor) {
return false;
}
// 删除评论
int res = userCommentClinicalArticleDao.deleteById(comment.getCommentId());
if (res <= 0){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
}
return true;
}
/**
* 置顶评论-临床病例库-文章
* @param commentId 评论id
* @param userId 用户id
* @return bool
*/
@Transactional
public boolean AddTopClinicalArticleComment(String commentId, String userId){
// 获取评论数据
UserCommentClinicalArticleModel comment = userCommentClinicalArticleDao.selectById(commentId);
if (comment == null) {
return false;
}
// 获取文章数据
CaseClinicalArticleModel article = caseClinicalArticleDao.selectById(comment.getArticleId());
if (article == null) {
return false;
}
if (article.getArticleStatus() != 1){
return false;
}
// 检测用户是否文章作者
boolean isAuthor = checkUserIsArticleAuthor(String.valueOf(comment.getArticleId()),userId);
if (!isAuthor) {
return false;
}
if (comment.getIsTop() == 1){
return true;
}
// 置顶评论
comment.setIsTop(1);
userCommentClinicalArticleDao.updateById(comment);
return true;
}
/**
* 取消置顶评论-临床病例库-文章
* @param commentId 评论id
* @param userId 用户id
* @return bool
*/
@Transactional
public boolean deleteTopClinicalArticleComment(String commentId, String userId){
// 获取评论数据
UserCommentClinicalArticleModel comment = userCommentClinicalArticleDao.selectById(commentId);
if (comment == null) {
return false;
}
// 获取文章数据
CaseClinicalArticleModel article = caseClinicalArticleDao.selectById(comment.getArticleId());
if (article == null) {
return false;
}
if (article.getArticleStatus() != 1){
return false;
}
// 检测用户是否文章作者
boolean isAuthor = checkUserIsArticleAuthor(String.valueOf(comment.getArticleId()),userId);
if (!isAuthor) {
return false;
}
// 取消置顶评论
if (comment.getIsTop() == 0){
return true;
}
// 置顶评论
comment.setIsTop(0);
userCommentClinicalArticleDao.updateById(comment);
return true;
}
/**
* 获取用户收藏数据
* @param articleId 文章id
* @param userId 用户id
* @return bool false:未收藏 true已收藏
*/
public UserCollectClinicalArticleModel getUserCollectClinicalArticleStatus(String articleId,String userId){
// 检测用户是否已收藏过
LambdaQueryWrapper<UserCollectClinicalArticleModel> mapQueryWrapper = new LambdaQueryWrapper<>();
mapQueryWrapper.eq(UserCollectClinicalArticleModel::getUserId, userId);
mapQueryWrapper.eq(UserCollectClinicalArticleModel::getArticleId, articleId);
return userCollectClinicalArticleDao.selectOne(mapQueryWrapper);
}
/**
* 检测用户是否文章作者
* @param articleId 文章id
* @param userId 用户id
* @return bool 是否作者
*/
public boolean checkUserIsArticleAuthor(String articleId,String userId){
// 获取当前登录用户数据
UserModel user = userDao.selectById(Long.valueOf(userId));
if (user == null) {
return false;
}
// 当前用户是否是作者之一
boolean isAuthor = false;
// 获取文章作者数据
LambdaQueryWrapper<CaseClinicalArticleAuthorModel> authorQueryWrapper = new LambdaQueryWrapper<>();
authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, articleId);
List<CaseClinicalArticleAuthorModel> caseClinicalArticleAuthors = caseClinicalArticleAuthorDao.selectList(authorQueryWrapper);
for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) {
// 查询医生
CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId());
if (caseClinicalDoctor == null) {
return false;
}
if (Objects.equals(caseClinicalDoctor.getDoctorIden(), user.getUserIden())){
isAuthor = true;
}
}
return isAuthor;
}
}