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 authorQueryWrapper = new LambdaQueryWrapper<>(); authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, articleId); List 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 authorQueryWrapper = new LambdaQueryWrapper<>(); authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, articleId); List 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 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 authorQueryWrapper = new LambdaQueryWrapper<>(); authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, articleId); List 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; } }