package com.example.caseData.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.example.caseData.common.Response; import com.example.caseData.dao.*; import com.example.caseData.exception.BusinessException; import com.example.caseData.model.*; import com.example.caseData.request.caseExchangeRequest.addCaseExchange; import com.example.caseData.request.caseExchangeRequest.addCaseExchangeComment; import com.example.caseData.request.caseExchangeRequest.updateCaseExchange; import com.example.caseData.utils.JwtUtil; import com.example.caseData.utils.RegularUtil; 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.time.LocalDateTime; import java.time.ZoneId; import java.util.*; @Service public class CaseExchangeService { @Resource private UserCollectExchangeDao userCollectExchangeDao; @Resource private BasicSensitiveWordService basicSensitiveWordService; @Resource private CaseExchangeDao caseExchangeDao; @Resource private CaseExchangeVoteDao caseExchangeVoteDao; @Resource private CaseExchangeVoteOptionDao caseExchangeVoteOptionDao; @Resource private StatsCaseExchangeDao statsCaseExchangeDao; @Resource private CaseExchangeLabelDao caseExchangeLabelDao; @Resource private StatsCaseExchangeUserDao statsCaseExchangeUserDao; @Resource private UserCommentExchangeDao userCommentExchangeDao; @Resource private UserDao userDao; @Resource private UserService userService; @Resource private RegularUtil regularUtil; @Resource private UserVoteExchangeDao userVoteExchangeDao; @Resource private StatsCaseClinicalLabelDao statsCaseClinicalLabelDao; /** * 新增-病例交流 * @param userId 用户id * @return bool */ @Transactional public boolean AddCaseExchange(String userId, addCaseExchange r){ // 验证入参数据 if (r.getCaseExchangeVote() != null){ if (r.getCaseExchangeVote().getCaseExchangeVoteOption() == null){ throw new BusinessException("缺少选项"); } if (r.getCaseExchangeVote().getCaseExchangeVoteOption().size() > 5){ throw new BusinessException("选项不可多余5项"); } if (r.getCaseExchangeVote().getCaseExchangeVoteOption().size() < 2){ throw new BusinessException("选项不可少于2项"); } if (r.getCaseExchangeVote().getVoteTitle() == null){ throw new BusinessException("请输入投票标题"); } if (r.getCaseExchangeVote().getValidDay() < 1 || r.getCaseExchangeVote().getValidDay() > 20){ throw new BusinessException("投票有效期在1-20天内"); } } if (r.getCaseExchangeLabel() != null && !r.getCaseExchangeLabel().isEmpty()){ for (addCaseExchange.CaseExchangeLabelRequest caseExchangeLabelRequest : r.getCaseExchangeLabel()){ if (caseExchangeLabelRequest.getAppIden() == null){ throw new BusinessException("操作失败"); } if (caseExchangeLabelRequest.getLabelName() == null){ throw new BusinessException("操作失败"); } } } // 处理违法内容 BasicSensitiveWordService.FilterResult result = basicSensitiveWordService.filter(r.getExchangeContent()); if (result.hasSensitive == 1){ throw new BusinessException("内容中存在敏感词,请修改后提交"); } if (r.getExchangeSummary() != null){ result = basicSensitiveWordService.filter(r.getExchangeSummary()); if (result.hasSensitive == 1){ throw new BusinessException("总结中存在敏感词,请修改后提交"); } } // 匹配预览视频 List videoUrls = regularUtil.extractOssVideosUrls(r.getExchangeContent()); videoUrls.replaceAll(Replace::removeOssDomain); String exchangeContentVideo = String.join(",", videoUrls); String exchangeContentImage = ""; if (exchangeContentVideo.isEmpty()){ // 匹配预览图片 List imageUrls = regularUtil.extractOssImageUrls(r.getExchangeContent()); imageUrls.replaceAll(Replace::removeOssDomain); exchangeContentImage = String.join(",", imageUrls); }else{ exchangeContentImage = ""; } // 新增病例交流 CaseExchangeModel caseExchangeData = new CaseExchangeModel(); caseExchangeData.setUserId(Long.valueOf(userId)); caseExchangeData.setExchangeTitle(r.getExchangeTitle()); caseExchangeData.setExchangeStatus(1); caseExchangeData.setPushDate(LocalDateTime.now(ZoneId.of("Asia/Shanghai"))); caseExchangeData.setExchangeContent(r.getExchangeContent()); caseExchangeData.setExchangeSummary(r.getExchangeSummary()); caseExchangeData.setExchangeContentVideo(exchangeContentVideo); caseExchangeData.setExchangeContentImage(exchangeContentImage); int res = caseExchangeDao.insert(caseExchangeData); if (res <= 0){ throw new BusinessException("操作失败"); } // 新增投票 if (r.getCaseExchangeVote() != null){ // 投票结束时间 LocalDateTime endTime = LocalDateTime.now().plusDays(r.getCaseExchangeVote().getValidDay()); CaseExchangeVoteModel caseExchangeVoteData = new CaseExchangeVoteModel(); caseExchangeVoteData.setExchangeId(caseExchangeData.getExchangeId()); caseExchangeVoteData.setVoteTitle(r.getCaseExchangeVote().getVoteTitle()); caseExchangeVoteData.setEndTime(endTime); res = caseExchangeVoteDao.insert(caseExchangeVoteData); if (res <= 0){ throw new BusinessException("操作失败"); } List caseExchangeVoteOption = r.getCaseExchangeVote().getCaseExchangeVoteOption(); for (addCaseExchange.CaseExchangeVoteOptionRequest option : caseExchangeVoteOption ){ CaseExchangeVoteOptionModel caseExchangeVoteOptionData = new CaseExchangeVoteOptionModel(); caseExchangeVoteOptionData.setVoteId(caseExchangeVoteData.getVoteId()); caseExchangeVoteOptionData.setOptionValue(option.getOptionValue()); caseExchangeVoteOptionData.setVoteNum(0); res = caseExchangeVoteOptionDao.insert(caseExchangeVoteOptionData); if (res <= 0){ throw new BusinessException("操作失败"); } } } // 新增标签 if (r.getCaseExchangeLabel() != null && !r.getCaseExchangeLabel().isEmpty()){ // 验证标签数据-暂时无法验证,病例库不存标签库 List caseExchangeLabel = r.getCaseExchangeLabel(); for (addCaseExchange.CaseExchangeLabelRequest label : caseExchangeLabel ){ CaseExchangeLabelModel caseExchangeLabelData = new CaseExchangeLabelModel(); caseExchangeLabelData.setExchangeId(caseExchangeData.getExchangeId()); caseExchangeLabelData.setAppIden(label.getAppIden()); caseExchangeLabelData.setLabelName(label.getLabelName()); res = caseExchangeLabelDao.insert(caseExchangeLabelData); if (res <= 0){ throw new BusinessException("操作失败"); } } } // 病例交流统计 if (!handleStatsCaseExchange()){ throw new BusinessException("操作失败"); } // 新增病例交流统计-用户 if (!handleStatsCaseExchangeUser(userId,"exchange_num")){ throw new BusinessException("操作失败"); } // 发放积分 // userService.ReportUserScore(String.valueOf(caseExchangeData.getExchangeId()),3,userId,50); return true; } /** * 修改-病例交流 * @param userId 用户id * @param exchangeId 病例交流id * @return bool */ @Transactional public boolean UpdateCaseExchange(String userId,String exchangeId, updateCaseExchange r){ // 获取病例交流数据 CaseExchangeModel caseExchange = caseExchangeDao.selectById(exchangeId); if (caseExchange == null){ throw new BusinessException("非法操作"); } if (!Objects.equals(caseExchange.getUserId(), Long.valueOf(userId))){ throw new BusinessException("非法操作"); } // 检测作品状态 if (!checkCaseExchangeStatus(caseExchange)){ throw new BusinessException("非法操作"); } // 标签 if (r.getCaseExchangeLabel() != null && !r.getCaseExchangeLabel().isEmpty()){ for (updateCaseExchange.CaseExchangeLabelRequest caseExchangeLabelRequest : r.getCaseExchangeLabel()){ if (caseExchangeLabelRequest.getAppIden() == null){ throw new BusinessException("操作失败"); } if (caseExchangeLabelRequest.getLabelName() == null){ throw new BusinessException("操作失败"); } } } // 处理违法内容 BasicSensitiveWordService.FilterResult result = basicSensitiveWordService.filter(r.getExchangeContent()); if (result.hasSensitive == 1){ throw new BusinessException("内容中存在敏感词,请修改后提交"); } if (r.getExchangeSummary() != null){ result = basicSensitiveWordService.filter(r.getExchangeSummary()); if (result.hasSensitive == 1){ throw new BusinessException("总结中存在敏感词,请修改后提交"); } } // 匹配预览视频 List videoUrls = regularUtil.extractOssVideosUrls(r.getExchangeContent()); videoUrls.replaceAll(Replace::removeOssDomain); String exchangeContentVideo = String.join(",", videoUrls); String exchangeContentImage = ""; if (exchangeContentVideo.isEmpty()){ // 匹配预览图片 List imageUrls = regularUtil.extractOssImageUrls(r.getExchangeContent()); imageUrls.replaceAll(Replace::removeOssDomain); exchangeContentImage = String.join(",", imageUrls); }else{ exchangeContentImage = ""; } // 修改病例交流 caseExchange.setExchangeTitle(r.getExchangeTitle()); caseExchange.setExchangeContent(r.getExchangeContent()); caseExchange.setExchangeSummary(r.getExchangeSummary()); caseExchange.setExchangeContentVideo(exchangeContentVideo); caseExchange.setExchangeContentImage(exchangeContentImage); caseExchangeDao.updateById(caseExchange); // 删除标签 LambdaQueryWrapper labelQueryWrapper = new LambdaQueryWrapper<>(); labelQueryWrapper.eq(CaseExchangeLabelModel::getExchangeId, exchangeId); caseExchangeLabelDao.delete(labelQueryWrapper); // 新增标签 if (r.getCaseExchangeLabel() != null && !r.getCaseExchangeLabel().isEmpty()){ // 验证标签数据-暂时无法验证,病例库不存标签库 List caseExchangeLabel = r.getCaseExchangeLabel(); for (updateCaseExchange.CaseExchangeLabelRequest label : caseExchangeLabel ){ CaseExchangeLabelModel caseExchangeLabelData = new CaseExchangeLabelModel(); caseExchangeLabelData.setExchangeId(caseExchange.getExchangeId()); caseExchangeLabelData.setAppIden(label.getAppIden()); caseExchangeLabelData.setLabelName(label.getLabelName()); int res = caseExchangeLabelDao.insert(caseExchangeLabelData); if (res <= 0){ throw new BusinessException("操作失败"); } } } return true; } /** * 删除-病例交流 * @param exchangeId 病例交流id * @param userId 用户id * @return bool */ @Transactional public boolean DeleteCaseExchange(String exchangeId, String userId){ // 获取病例交流数据 CaseExchangeModel caseExchange = caseExchangeDao.selectById(exchangeId); if (caseExchange == null) { return false; } if (!Objects.equals(caseExchange.getUserId(), Long.valueOf(userId))){ throw new BusinessException("非法操作"); } if (caseExchange.getDeleteStatus() == 1){ return true; } // 修改病例交流删除状态 caseExchange.setDeleteStatus(1); caseExchangeDao.updateById(caseExchange); // 处理统计数据 boolean r = DecCaseExchangeStats(exchangeId,4,1); if (!r){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return false; } r = DecCaseExchangeStats(exchangeId,1,caseExchange.getReadNum()); if (!r){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return false; } r = DecCaseExchangeStats(exchangeId,2,caseExchange.getCollectNum()); if (!r){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return false; } r = DecCaseExchangeStats(exchangeId,3,caseExchange.getCommentNum()); if (!r){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return false; } return true; } /** * 新增收藏-病例交流 * @param exchangeId 病例交流id * @param userId 用户id * @return bool */ @Transactional public boolean AddCaseExchangeCollect(String exchangeId,String userId){ // 获取病例交流数据 CaseExchangeModel article = caseExchangeDao.selectById(exchangeId); if (article == null) { return false; } // 检测用户是否已收藏过 UserCollectExchangeModel userCollectExchange = getUserCollectExchangeStatus(exchangeId,userId); if (userCollectExchange != null) { return true; } // 新增收藏 UserCollectExchangeModel userCollectExchangeData = new UserCollectExchangeModel(); userCollectExchangeData.setUserId(Long.valueOf(userId)); userCollectExchangeData.setExchangeId(Long.valueOf(exchangeId)); int res = userCollectExchangeDao.insert(userCollectExchangeData); if (res <= 0){ return false; } // 新增统计字段 boolean r = IncCaseExchangeStats(exchangeId,2); if (!r){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return false; } return true; } /** * 取消收藏-病例交流 * @param exchangeId 病例交流id * @param userId 用户id * @return bool */ @Transactional public boolean DeleteCaseExchangeCollect(String exchangeId,String userId){ // 检测用户是否已收藏过 UserCollectExchangeModel userCollectExchange = getUserCollectExchangeStatus(exchangeId,userId); if (userCollectExchange == null) { return true; } // 删除收藏 int res = userCollectExchangeDao.deleteById(userCollectExchange.getCollectId()); if (res <= 0){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return false; } // 减少文章的统计字段 boolean r = DecCaseExchangeStats(exchangeId,2,1); if (!r){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return false; } return true; } /** * 新增评论-病例交流 * @param exchangeId 病例交流id * @param userId 用户id * @return bool */ @Transactional public Map AddCaseExchangeComment(String exchangeId, String userId, addCaseExchangeComment request){ Map resultData = new HashMap<>(); resultData.put("status", 1); resultData.put("message", "成功"); // 获取病例交流数据 CaseExchangeModel article = caseExchangeDao.selectById(exchangeId); if (article == null) { throw new BusinessException("非法病例交流"); } if (article.getExchangeStatus() != 1){ throw new BusinessException("非法病例交流"); } // 处理评论内容 BasicSensitiveWordService.FilterResult result = basicSensitiveWordService.filter(request.getContent()); if (result.hasSensitive == 1){ throw new BusinessException("存在敏感词,请修改后提交"); } // 新增评论 UserCommentExchangeModel userCommentExchangeData = new UserCommentExchangeModel(); userCommentExchangeData.setUserId(Long.valueOf(userId)); userCommentExchangeData.setExchangeId(Long.valueOf(exchangeId)); userCommentExchangeData.setStatus(1); userCommentExchangeData.setIsSensitive(0); userCommentExchangeData.setContent(request.getContent()); userCommentExchangeData.setCommentImage(Replace.removeOssDomain(request.getCommentImage())); // 评论根id if (request.getRootId() != null) { userCommentExchangeData.setRootId(Long.valueOf(request.getRootId())); } // 评论父级id if (request.getParentId() != null) { userCommentExchangeData.setParentId(Long.valueOf(request.getParentId())); } int res = userCommentExchangeDao.insert(userCommentExchangeData); if (res <= 0){ throw new BusinessException("操作失败"); } // 新增统计字段 boolean r = IncCaseExchangeStats(exchangeId,3); if (!r){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); throw new BusinessException("操作失败"); } // 获取发放积分次数 Integer num = userService.GetReportUserScore(userId); if (num < 3){ // 发放积分 resultData.put("status", 2); userService.ReportUserScore(exchangeId,3,userId,5); } return resultData; } /** * 删除评论-病例交流 * @param commentId 评论id * @param userId 用户id * @return bool */ @Transactional public boolean DeleteCaseExchangeComment(String commentId, String userId){ // 获取评论数据 UserCommentExchangeModel comment = userCommentExchangeDao.selectById(commentId); if (comment == null) { return false; } // 获取病例交流数据 CaseExchangeModel article = caseExchangeDao.selectById(comment.getExchangeId()); if (article == null) { return false; } if (article.getExchangeStatus() != 1){ return false; } // 检测用户是否病例交流作者 if (!Objects.equals(comment.getUserId(), Long.valueOf(userId))){ return false; } // 获取下级评论 LambdaQueryWrapper exchangeQueryWrapper = new LambdaQueryWrapper<>(); exchangeQueryWrapper.eq(UserCommentExchangeModel::getRootId, comment.getCommentId()); List userCommentExchanges = userCommentExchangeDao.selectList(exchangeQueryWrapper); for (UserCommentExchangeModel m : userCommentExchanges){ // 删除评论 int res = userCommentExchangeDao.deleteById(m.getCommentId()); if (res <= 0){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return false; } // 减少文章的统计字段 boolean r = DecCaseExchangeStats(String.valueOf(comment.getCommentId()),2,1); if (!r){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return false; } } // 删除评论 int res = userCommentExchangeDao.deleteById(comment.getCommentId()); if (res <= 0){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return false; } // 减少统计字段 boolean r = DecCaseExchangeStats(String.valueOf(comment.getExchangeId()),3,1); if (!r){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return false; } return true; } /** * 置顶评论-病例交流 * @param commentId 评论id * @param userId 用户id * @return bool */ @Transactional public boolean AddTopCaseExchangeComment(String commentId, String userId){ // 获取评论数据 UserCommentExchangeModel comment = userCommentExchangeDao.selectById(commentId); if (comment == null) { return false; } // 获取病例交流数据 CaseExchangeModel article = caseExchangeDao.selectById(comment.getExchangeId()); if (article == null) { return false; } if (article.getExchangeStatus() != 1){ return false; } // 检测用户是否病例交流作者 if (!Objects.equals(comment.getUserId(), Long.valueOf(userId))){ return false; } if (comment.getIsTop() == 1){ return true; } // 置顶评论 comment.setIsTop(1); userCommentExchangeDao.updateById(comment); return true; } /** * 取消置顶评论-病例交流 * @param commentId 评论id * @param userId 用户id * @return bool */ @Transactional public boolean deleteTopCaseExchangeComment(String commentId, String userId){ // 获取评论数据 UserCommentExchangeModel comment = userCommentExchangeDao.selectById(commentId); if (comment == null) { return false; } // 获取病例交流数据 CaseExchangeModel article = caseExchangeDao.selectById(comment.getExchangeId()); if (article == null) { return false; } if (article.getExchangeStatus() != 1){ return false; } // 检测用户是否病例交流作者 if (!Objects.equals(comment.getUserId(), Long.valueOf(userId))){ return false; } // 取消置顶评论 if (comment.getIsTop() == 0){ return true; } // 置顶评论 comment.setIsTop(0); userCommentExchangeDao.updateById(comment); return true; } /** * 获取用户收藏数据 * @param exchangeId 病例交流id * @param userId 用户id * @return bool false:未收藏 true:已收藏 */ public UserCollectExchangeModel getUserCollectExchangeStatus(String exchangeId, String userId){ // 检测用户是否已收藏过 LambdaQueryWrapper mapQueryWrapper = new LambdaQueryWrapper<>(); mapQueryWrapper.eq(UserCollectExchangeModel::getUserId, userId); mapQueryWrapper.eq(UserCollectExchangeModel::getExchangeId, exchangeId); return userCollectExchangeDao.selectOne(mapQueryWrapper); } /** * 新增病例交流统计 * @return bool */ public boolean handleStatsCaseExchange(){ LambdaQueryWrapper mapQueryWrapper = new LambdaQueryWrapper<>(); StatsCaseExchangeModel statsCaseExchange = statsCaseExchangeDao.selectOne(mapQueryWrapper); if (statsCaseExchange == null){ // 新增 StatsCaseExchangeModel statsCaseExchangeData = new StatsCaseExchangeModel(); statsCaseExchangeData.setExchangeNum(1); int res = statsCaseExchangeDao.insert(statsCaseExchangeData); return res > 0; }else{ // 增加数量 statsCaseExchangeDao.inc(statsCaseExchange.getStatsId(),"exchange_num",1); } return true; } /** * 新增病例交流统计-用户 * @return bool */ public boolean handleStatsCaseExchangeUser(String userId,String field){ LambdaQueryWrapper mapQueryWrapper = new LambdaQueryWrapper<>(); mapQueryWrapper.eq(StatsCaseExchangeUserModel::getUserId, userId); StatsCaseExchangeUserModel statsCaseExchangeUser = statsCaseExchangeUserDao.selectOne(mapQueryWrapper); if (statsCaseExchangeUser == null){ // 新增 StatsCaseExchangeUserModel statsCaseExchangeUserData = new StatsCaseExchangeUserModel(); statsCaseExchangeUserData.setUserId(Long.valueOf(userId)); statsCaseExchangeUserData.setExchangeNum(1); int res = statsCaseExchangeUserDao.insert(statsCaseExchangeUserData); return res > 0; }else{ // 增加数量 statsCaseExchangeUserDao.inc(statsCaseExchangeUser.getStatsId(),field,1); } return true; } /** * 新增病例交流统计字段 * @param exchangeId 病例id * @param type 类型:1:阅读量 2:收藏量 3:评论数 */ @Transactional public boolean IncCaseExchangeStats(String exchangeId,Integer type){ try { // 获取病例数据 CaseExchangeModel caseExchange = caseExchangeDao.selectById(exchangeId); if (caseExchange == null){ throw new BusinessException("操作失败"); } LambdaQueryWrapper mapQueryWrapper = new LambdaQueryWrapper<>(); mapQueryWrapper.eq(StatsCaseExchangeUserModel::getUserId, caseExchange.getUserId()); StatsCaseExchangeUserModel statsCaseExchangeUser = statsCaseExchangeUserDao.selectOne(mapQueryWrapper); if (statsCaseExchangeUser == null){ throw new BusinessException("操作失败"); } // 阅读量 if (type == 1){ // 总 statsCaseExchangeDao.inc(1L,"exchange_read_num",1); // 单 caseExchangeDao.inc(Long.valueOf(exchangeId),"read_num",1); // 用户-此处无需担心stats_case_exchange_user无数据,发布病例时会新增 statsCaseExchangeUserDao.inc(statsCaseExchangeUser.getUserId(),"exchange_read_num",1); } // 收藏量 if (type == 2){ // 总 statsCaseExchangeDao.inc(1L,"exchange_collect_num",1); // 单 caseExchangeDao.inc(Long.valueOf(exchangeId),"collect_num",1); // 用户-此处无需担心stats_case_exchange_user无数据,发布病例时会新增 statsCaseExchangeUserDao.inc(statsCaseExchangeUser.getUserId(),"exchange_collect_num",1); } // 评论数 if (type == 3){ // 总 statsCaseExchangeDao.inc(1L,"exchange_comment_num",1); // 单 caseExchangeDao.inc(Long.valueOf(exchangeId),"comment_num",1); // 用户-此处无需担心stats_case_exchange_user无数据,发布病例时会新增 statsCaseExchangeUserDao.inc(statsCaseExchangeUser.getUserId(),"exchange_comment_num",1); } return true; } catch (Exception e) { return false; } } /** * 减少病例交流统计字段 * @param exchangeId 病例id * @param type 类型:1:阅读量 2:收藏量 3:评论数 4:数量 */ @Transactional public boolean DecCaseExchangeStats(String exchangeId,Integer type,Integer num){ try { // 获取病例数据 CaseExchangeModel caseExchange = caseExchangeDao.selectById(exchangeId); if (caseExchange == null){ throw new BusinessException("操作失败"); } LambdaQueryWrapper mapQueryWrapper = new LambdaQueryWrapper<>(); mapQueryWrapper.eq(StatsCaseExchangeUserModel::getUserId, caseExchange.getUserId()); StatsCaseExchangeUserModel statsCaseExchangeUser = statsCaseExchangeUserDao.selectOne(mapQueryWrapper); if (statsCaseExchangeUser == null){ throw new BusinessException("操作失败"); } // 阅读量 if (type == 1){ // 总 statsCaseExchangeDao.dec(1L,"exchange_read_num",num); // 单 caseExchangeDao.dec(Long.valueOf(exchangeId),"read_num",num); // 用户 statsCaseExchangeUserDao.dec(statsCaseExchangeUser.getUserId(),"exchange_read_num",num); } // 收藏量 if (type == 2){ // 总 statsCaseExchangeDao.dec(1L,"exchange_collect_num",num); // 单 caseExchangeDao.dec(Long.valueOf(exchangeId),"collect_num",num); // 用户 statsCaseExchangeUserDao.dec(statsCaseExchangeUser.getUserId(),"exchange_collect_num",num); } // 评论数 if (type == 3){ // 总 statsCaseExchangeDao.dec(1L,"exchange_comment_num",num); // 单 caseExchangeDao.dec(Long.valueOf(exchangeId),"comment_num",num); // 用户 statsCaseExchangeUserDao.dec(statsCaseExchangeUser.getUserId(),"exchange_comment_num",num); } // 数量 if (type == 4){ // 总 statsCaseExchangeDao.dec(1L,"exchange_num",num); // 用户 statsCaseExchangeUserDao.dec(statsCaseExchangeUser.getUserId(),"exchange_num",num); } return true; } catch (Exception e) { return false; } } /** * 新增投票-病例交流 * @param exchangeId 病例交流id * @param userId 用户id * @return bool */ @Transactional public boolean AddCaseExchangeVote(String exchangeId,String userId,String optionId){ // 获取病例交流数据 CaseExchangeModel article = caseExchangeDao.selectById(exchangeId); if (article == null) { return false; } // 检测用户是否已投票 LambdaQueryWrapper userVoteExchangeQueryWrapper = new LambdaQueryWrapper<>(); userVoteExchangeQueryWrapper.eq(UserVoteExchangeModel::getUserId, userId); userVoteExchangeQueryWrapper.eq(UserVoteExchangeModel::getExchangeId, exchangeId); UserVoteExchangeModel userVoteExchange = userVoteExchangeDao.selectOne(userVoteExchangeQueryWrapper); if (userVoteExchange != null) { return true; } // 获取病例交流对应投票数据 LambdaQueryWrapper caseExchangeVoteQueryWrapper = new LambdaQueryWrapper<>(); caseExchangeVoteQueryWrapper.eq(CaseExchangeVoteModel::getExchangeId, exchangeId); CaseExchangeVoteModel caseExchangeVote = caseExchangeVoteDao.selectOne(caseExchangeVoteQueryWrapper); if (caseExchangeVote == null) { return true; } // 获取对应投票选项 LambdaQueryWrapper caseExchangeVoteOptionQueryWrapper = new LambdaQueryWrapper<>(); caseExchangeVoteOptionQueryWrapper.eq(CaseExchangeVoteOptionModel::getOptionId, optionId); caseExchangeVoteOptionQueryWrapper.eq(CaseExchangeVoteOptionModel::getVoteId, caseExchangeVote.getVoteId()); CaseExchangeVoteOptionModel caseExchangeVoteOption = caseExchangeVoteOptionDao.selectOne(caseExchangeVoteOptionQueryWrapper); if (caseExchangeVoteOption == null) { return false; } // 新增投票 UserVoteExchangeModel userVoteExchangedata = new UserVoteExchangeModel(); userVoteExchangedata.setUserId(Long.valueOf(userId)); userVoteExchangedata.setExchangeId(Long.valueOf(exchangeId)); userVoteExchangedata.setVoteId(caseExchangeVote.getVoteId()); userVoteExchangedata.setOptionId(Long.valueOf(optionId)); userVoteExchangedata.setVoteTime(LocalDateTime.now()); int res = userVoteExchangeDao.insert(userVoteExchangedata); if (res <= 0){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return false; } // 处理投票数 caseExchangeVoteOptionDao.inc(Long.valueOf(optionId),"vote_num",1); return true; } // // /** // * 新增病例交流的统计字段 // * @param exchangeId id // * @param type 类型:1:阅读量 2:收藏量 3:评论数 // */ // @Transactional // public boolean IncCaseExchangeStats(String exchangeId,String userId,Integer type){ // try { // // 阅读量 // if (type == 1){ // // 单 // caseExchangeDao.inc(Long.valueOf(exchangeId),"read_num",1); // // // 总 // statsCaseExchangeDao.inc(1L,"exchange_read_num",1); // // // 此处无需担心stats_case_exchange_user无数据,发布病例时会新增 // statsCaseExchangeUserDao.inc(Long.valueOf(userId),"exchange_read_num",1); // } // // // 收藏量 // if (type == 2){ // // 单 // caseExchangeDao.inc(Long.valueOf(exchangeId),"collect_num",1); // // // 总 // statsCaseExchangeDao.inc(1L,"exchange_collect_num",1); // // // 此处无需担心stats_case_exchange_user无数据,发布病例时会新增 // statsCaseExchangeUserDao.inc(Long.valueOf(userId),"exchange_collect_num",1); // } // // // 评论数 // if (type == 3){ // // 单 // caseExchangeDao.inc(Long.valueOf(exchangeId),"comment_num",1); // // // 总 // statsCaseExchangeDao.inc(1L,"exchange_comment_num",1); // // // 此处无需担心stats_case_exchange_user无数据,发布病例时会新增 // statsCaseExchangeUserDao.inc(Long.valueOf(userId),"exchange_comment_num",1); // } // // return true; // } catch (Exception e) { // return false; // } // } // // /** // * 减少文章的统计字段 // * @param exchangeId id // * @param type 类型:1:阅读量 2:收藏量 3:评论数 // */ // @Transactional // public boolean DecCaseExchangeStats(String exchangeId,String userId,Integer type){ // try { // // 阅读量 // if (type == 1){ // caseExchangeDao.dec(Long.valueOf(exchangeId),"read_num",1); // statsCaseExchangeDao.dec(1L,"exchange_read_num",1); // // // 此处无需担心stats_case_exchange_user无数据,发布病例时会新增 // statsCaseExchangeUserDao.dec(Long.valueOf(userId),"exchange_read_num",1); // } // // // 收藏量 // if (type == 2){ // caseExchangeDao.inc(Long.valueOf(exchangeId),"collect_num",1); // statsCaseExchangeDao.dec(1L,"exchange_collect_num",1); // // // 此处无需担心stats_case_exchange_user无数据,发布病例时会新增 // statsCaseExchangeUserDao.dec(Long.valueOf(userId),"exchange_collect_num",1); // } // // // 评论数 // if (type == 3){ // caseExchangeDao.inc(Long.valueOf(exchangeId),"comment_num",1); // statsCaseExchangeDao.dec(1L,"exchange_comment_num",1); // // // 此处无需担心stats_case_exchange_user无数据,发布病例时会新增 // statsCaseExchangeUserDao.dec(Long.valueOf(userId),"exchange_comment_num",1); // } // // return true; // } catch (Exception e) { // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); // return false; // } // } /** * 检测作品状态 */ public boolean checkCaseExchangeStatus(CaseExchangeModel caseExchange){ // 删除状态 if (caseExchange.getDeleteStatus() == 1){ return false; } // 状态(1:正常 2:禁用) if (caseExchange.getExchangeStatus() == 2){ return false; } return true; } }