case-data-api/src/main/java/com/example/caseData/service/CaseExchangeService.java

1012 lines
37 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.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<String> videoUrls = regularUtil.extractOssVideosUrls(r.getExchangeContent());
videoUrls.replaceAll(Replace::removeOssDomain);
String exchangeContentVideo = String.join(",", videoUrls);
String exchangeContentImage = "";
if (exchangeContentVideo.isEmpty()){
// 匹配预览图片
List<String> 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<addCaseExchange.CaseExchangeVoteOptionRequest> 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<addCaseExchange.CaseExchangeLabelRequest> 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<String> videoUrls = regularUtil.extractOssVideosUrls(r.getExchangeContent());
videoUrls.replaceAll(Replace::removeOssDomain);
String exchangeContentVideo = String.join(",", videoUrls);
String exchangeContentImage = "";
if (exchangeContentVideo.isEmpty()){
// 匹配预览图片
List<String> 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<CaseExchangeLabelModel> labelQueryWrapper = new LambdaQueryWrapper<>();
labelQueryWrapper.eq(CaseExchangeLabelModel::getExchangeId, exchangeId);
caseExchangeLabelDao.delete(labelQueryWrapper);
// 新增标签
if (r.getCaseExchangeLabel() != null && !r.getCaseExchangeLabel().isEmpty()){
// 验证标签数据-暂时无法验证,病例库不存标签库
List<updateCaseExchange.CaseExchangeLabelRequest> 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<String, Object> AddCaseExchangeComment(String exchangeId, String userId, addCaseExchangeComment request){
Map<String, Object> 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<UserCommentExchangeModel> exchangeQueryWrapper = new LambdaQueryWrapper<>();
exchangeQueryWrapper.eq(UserCommentExchangeModel::getRootId, comment.getCommentId());
List<UserCommentExchangeModel> 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<UserCollectExchangeModel> mapQueryWrapper = new LambdaQueryWrapper<>();
mapQueryWrapper.eq(UserCollectExchangeModel::getUserId, userId);
mapQueryWrapper.eq(UserCollectExchangeModel::getExchangeId, exchangeId);
return userCollectExchangeDao.selectOne(mapQueryWrapper);
}
/**
* 新增病例交流统计
* @return bool
*/
public boolean handleStatsCaseExchange(){
LambdaQueryWrapper<StatsCaseExchangeModel> 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<StatsCaseExchangeUserModel> 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<StatsCaseExchangeUserModel> 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<StatsCaseExchangeUserModel> 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<UserVoteExchangeModel> userVoteExchangeQueryWrapper = new LambdaQueryWrapper<>();
userVoteExchangeQueryWrapper.eq(UserVoteExchangeModel::getUserId, userId);
userVoteExchangeQueryWrapper.eq(UserVoteExchangeModel::getExchangeId, exchangeId);
UserVoteExchangeModel userVoteExchange = userVoteExchangeDao.selectOne(userVoteExchangeQueryWrapper);
if (userVoteExchange != null) {
return true;
}
// 获取病例交流对应投票数据
LambdaQueryWrapper<CaseExchangeVoteModel> caseExchangeVoteQueryWrapper = new LambdaQueryWrapper<>();
caseExchangeVoteQueryWrapper.eq(CaseExchangeVoteModel::getExchangeId, exchangeId);
CaseExchangeVoteModel caseExchangeVote = caseExchangeVoteDao.selectOne(caseExchangeVoteQueryWrapper);
if (caseExchangeVote == null) {
return true;
}
// 获取对应投票选项
LambdaQueryWrapper<CaseExchangeVoteOptionModel> 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;
}
}