评论问题111

This commit is contained in:
wucongxing8150 2025-08-12 16:39:40 +08:00
parent 70b69c17a5
commit 7c91ce170f
8 changed files with 598 additions and 33 deletions

View File

@ -8,6 +8,7 @@ import net.lab1024.sa.admin.module.business.caseClinicalArticle.domain.form.User
import net.lab1024.sa.admin.module.business.caseClinicalArticle.domain.form.UserCommentStatusUpdateForm; import net.lab1024.sa.admin.module.business.caseClinicalArticle.domain.form.UserCommentStatusUpdateForm;
import net.lab1024.sa.admin.module.business.caseClinicalArticle.domain.form.UserCommentTopUpdateForm; import net.lab1024.sa.admin.module.business.caseClinicalArticle.domain.form.UserCommentTopUpdateForm;
import net.lab1024.sa.admin.module.business.caseClinicalArticle.domain.vo.UserCommentClinicalArticleVO; import net.lab1024.sa.admin.module.business.caseClinicalArticle.domain.vo.UserCommentClinicalArticleVO;
import net.lab1024.sa.base.common.exception.BusinessException;
import net.lab1024.sa.base.common.util.SmartBeanUtil; import net.lab1024.sa.base.common.util.SmartBeanUtil;
import net.lab1024.sa.base.common.util.SmartPageUtil; import net.lab1024.sa.base.common.util.SmartPageUtil;
import net.lab1024.sa.base.common.domain.ResponseDTO; import net.lab1024.sa.base.common.domain.ResponseDTO;
@ -17,8 +18,11 @@ import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* 用户评论-临床病例-文章 Service * 用户评论-临床病例-文章 Service
@ -34,6 +38,9 @@ public class UserCommentClinicalArticleService {
@Resource @Resource
private UserCommentClinicalArticleDao userCommentClinicalArticleDao; private UserCommentClinicalArticleDao userCommentClinicalArticleDao;
@Resource
private CaseClinicalArticleService caseClinicalArticleService;
/** /**
* 分页查询 * 分页查询
*/ */
@ -46,6 +53,7 @@ public class UserCommentClinicalArticleService {
/** /**
* 添加 * 添加
*/ */
@Transactional
public ResponseDTO<String> add(UserCommentClinicalArticleAddForm addForm) { public ResponseDTO<String> add(UserCommentClinicalArticleAddForm addForm) {
UserCommentClinicalArticleEntity userCommentClinicalArticleEntity = SmartBeanUtil.copy(addForm, UserCommentClinicalArticleEntity.class); UserCommentClinicalArticleEntity userCommentClinicalArticleEntity = SmartBeanUtil.copy(addForm, UserCommentClinicalArticleEntity.class);
userCommentClinicalArticleDao.insert(userCommentClinicalArticleEntity); userCommentClinicalArticleDao.insert(userCommentClinicalArticleEntity);
@ -56,6 +64,7 @@ public class UserCommentClinicalArticleService {
* 更新 * 更新
* *
*/ */
@Transactional
public ResponseDTO<String> update(UserCommentClinicalArticleUpdateForm updateForm) { public ResponseDTO<String> update(UserCommentClinicalArticleUpdateForm updateForm) {
UserCommentClinicalArticleEntity userCommentClinicalArticleEntity = SmartBeanUtil.copy(updateForm, UserCommentClinicalArticleEntity.class); UserCommentClinicalArticleEntity userCommentClinicalArticleEntity = SmartBeanUtil.copy(updateForm, UserCommentClinicalArticleEntity.class);
userCommentClinicalArticleDao.updateById(userCommentClinicalArticleEntity); userCommentClinicalArticleDao.updateById(userCommentClinicalArticleEntity);
@ -65,53 +74,145 @@ public class UserCommentClinicalArticleService {
/** /**
* 修改评论状态 * 修改评论状态
*/ */
@Transactional
public ResponseDTO<String> updateStatus(Long commentId, Integer status) { public ResponseDTO<String> updateStatus(Long commentId, Integer status) {
if (null == commentId || null == status) { if (null == commentId || null == status) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("参数不能为空"); return ResponseDTO.userErrorParam("参数不能为空");
} }
UserCommentClinicalArticleEntity entity = new UserCommentClinicalArticleEntity(); // 获取评论数据
entity.setCommentId(commentId); UserCommentClinicalArticleEntity userCommentClinicalArticle = userCommentClinicalArticleDao.selectById(commentId);
entity.setStatus(status); if (null == userCommentClinicalArticle) {
userCommentClinicalArticleDao.updateById(entity); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
if (Objects.equals(userCommentClinicalArticle.getStatus(), status)) {
return ResponseDTO.ok();
}
userCommentClinicalArticle.setStatus(status);
userCommentClinicalArticleDao.updateById(userCommentClinicalArticle);
// 正常
if (status == 1){
// 新增文章的统计字段
boolean r = caseClinicalArticleService.IncClinicalArticleStats(
String.valueOf(userCommentClinicalArticle.getArticleId()),
3,
1
);
if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
}
// 禁用
if (status == 2){
// 减少文章的统计字段
boolean r = caseClinicalArticleService.DecClinicalArticleStats(
String.valueOf(userCommentClinicalArticle.getArticleId()),
3,
1
);
if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
}
return ResponseDTO.ok(); return ResponseDTO.ok();
} }
/** /**
* 修改置顶状态 * 修改置顶状态
*/ */
@Transactional
public ResponseDTO<String> updateTopStatus(Long commentId, Integer isTop) { public ResponseDTO<String> updateTopStatus(Long commentId, Integer isTop) {
if (null == commentId || null == isTop) { if (null == commentId || null == isTop) {
return ResponseDTO.userErrorParam("参数不能为空"); return ResponseDTO.userErrorParam("参数不能为空");
} }
UserCommentClinicalArticleEntity entity = new UserCommentClinicalArticleEntity(); // 获取评论数据
entity.setCommentId(commentId); UserCommentClinicalArticleEntity userCommentClinicalArticle = userCommentClinicalArticleDao.selectById(commentId);
entity.setIsTop(isTop); if (null == userCommentClinicalArticle) {
userCommentClinicalArticleDao.updateById(entity); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
if (Objects.equals(userCommentClinicalArticle.getIsTop(), isTop)) {
return ResponseDTO.ok();
}
userCommentClinicalArticle.setIsTop(isTop);
userCommentClinicalArticleDao.updateById(userCommentClinicalArticle);
return ResponseDTO.ok(); return ResponseDTO.ok();
} }
/** /**
* 批量删除 * 批量删除
*/ */
@Transactional
public ResponseDTO<String> batchDelete(List<Long> idList) { public ResponseDTO<String> batchDelete(List<Long> idList) {
if (CollectionUtils.isEmpty(idList)){ if (CollectionUtils.isEmpty(idList)){
return ResponseDTO.ok(); return ResponseDTO.ok();
} }
userCommentClinicalArticleDao.deleteBatchIds(idList); for (Long id : idList){
// 获取评论数据
UserCommentClinicalArticleEntity userCommentClinicalArticle = userCommentClinicalArticleDao.selectById(id);
if (null == userCommentClinicalArticle) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
// 减少文章的统计字段
boolean r = caseClinicalArticleService.DecClinicalArticleStats(
String.valueOf(userCommentClinicalArticle.getArticleId()),
3,
1
);
if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
userCommentClinicalArticleDao.deleteById(id);
}
return ResponseDTO.ok(); return ResponseDTO.ok();
} }
/** /**
* 单个删除 * 单个删除
*/ */
@Transactional
public ResponseDTO<String> delete(Long commentId) { public ResponseDTO<String> delete(Long commentId) {
if (null == commentId){ if (null == commentId){
return ResponseDTO.ok(); return ResponseDTO.ok();
} }
// 获取评论数据
UserCommentClinicalArticleEntity userCommentClinicalArticle = userCommentClinicalArticleDao.selectById(commentId);
if (null == userCommentClinicalArticle) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
// 减少文章的统计字段
boolean r = caseClinicalArticleService.DecClinicalArticleStats(
String.valueOf(userCommentClinicalArticle.getArticleId()),
3,
1
);
if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
userCommentClinicalArticleDao.deleteById(commentId); userCommentClinicalArticleDao.deleteById(commentId);
return ResponseDTO.ok(); return ResponseDTO.ok();
} }

View File

@ -1,5 +1,7 @@
package net.lab1024.sa.admin.module.business.caseClinicalVideo.service; package net.lab1024.sa.admin.module.business.caseClinicalVideo.service;
import net.lab1024.sa.admin.module.business.caseClinicalVideo.domain.entity.UserCommentClinicalVideoEntity;
import net.lab1024.sa.admin.module.business.caseClinicalVideo.domain.entity.UserCommentClinicalVideoEntity;
import net.lab1024.sa.admin.module.business.caseClinicalVideo.dao.UserCommentClinicalVideoDao; import net.lab1024.sa.admin.module.business.caseClinicalVideo.dao.UserCommentClinicalVideoDao;
import net.lab1024.sa.admin.module.business.caseClinicalVideo.domain.entity.UserCommentClinicalVideoEntity; import net.lab1024.sa.admin.module.business.caseClinicalVideo.domain.entity.UserCommentClinicalVideoEntity;
import net.lab1024.sa.admin.module.business.caseClinicalVideo.domain.form.UserCommentClinicalVideoAddForm; import net.lab1024.sa.admin.module.business.caseClinicalVideo.domain.form.UserCommentClinicalVideoAddForm;
@ -17,8 +19,11 @@ import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* 用户评论-临床病例-视频 Service * 用户评论-临床病例-视频 Service
@ -34,6 +39,9 @@ public class UserCommentClinicalVideoService {
@Resource @Resource
private UserCommentClinicalVideoDao userCommentClinicalVideoDao; private UserCommentClinicalVideoDao userCommentClinicalVideoDao;
@Resource
private CaseClinicalVideoService caseClinicalVideoService;
/** /**
* 分页查询 * 分页查询
*/ */
@ -46,6 +54,7 @@ public class UserCommentClinicalVideoService {
/** /**
* 添加 * 添加
*/ */
@Transactional
public ResponseDTO<String> add(UserCommentClinicalVideoAddForm addForm) { public ResponseDTO<String> add(UserCommentClinicalVideoAddForm addForm) {
UserCommentClinicalVideoEntity userCommentClinicalVideoEntity = SmartBeanUtil.copy(addForm, UserCommentClinicalVideoEntity.class); UserCommentClinicalVideoEntity userCommentClinicalVideoEntity = SmartBeanUtil.copy(addForm, UserCommentClinicalVideoEntity.class);
userCommentClinicalVideoDao.insert(userCommentClinicalVideoEntity); userCommentClinicalVideoDao.insert(userCommentClinicalVideoEntity);
@ -56,6 +65,7 @@ public class UserCommentClinicalVideoService {
* 更新 * 更新
* *
*/ */
@Transactional
public ResponseDTO<String> update(UserCommentClinicalVideoUpdateForm updateForm) { public ResponseDTO<String> update(UserCommentClinicalVideoUpdateForm updateForm) {
UserCommentClinicalVideoEntity userCommentClinicalVideoEntity = SmartBeanUtil.copy(updateForm, UserCommentClinicalVideoEntity.class); UserCommentClinicalVideoEntity userCommentClinicalVideoEntity = SmartBeanUtil.copy(updateForm, UserCommentClinicalVideoEntity.class);
userCommentClinicalVideoDao.updateById(userCommentClinicalVideoEntity); userCommentClinicalVideoDao.updateById(userCommentClinicalVideoEntity);
@ -65,53 +75,142 @@ public class UserCommentClinicalVideoService {
/** /**
* 修改评论状态 * 修改评论状态
*/ */
@Transactional
public ResponseDTO<String> updateStatus(Long commentId, Integer status) { public ResponseDTO<String> updateStatus(Long commentId, Integer status) {
if (null == commentId || null == status) { if (null == commentId || null == status) {
return ResponseDTO.userErrorParam("参数不能为空"); return ResponseDTO.userErrorParam("参数不能为空");
} }
UserCommentClinicalVideoEntity entity = new UserCommentClinicalVideoEntity(); // 获取评论数据
entity.setCommentId(commentId); UserCommentClinicalVideoEntity userCommentClinicalVideo = userCommentClinicalVideoDao.selectById(commentId);
entity.setStatus(status); if (null == userCommentClinicalVideo) {
userCommentClinicalVideoDao.updateById(entity); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
if (Objects.equals(userCommentClinicalVideo.getStatus(), status)) {
return ResponseDTO.ok();
}
userCommentClinicalVideo.setStatus(status);
userCommentClinicalVideoDao.updateById(userCommentClinicalVideo);
// 正常
if (status == 1){
// 新增文章的统计字段
boolean r = caseClinicalVideoService.IncClinicalVideoStats(
String.valueOf(userCommentClinicalVideo.getVideoId()),
3,
1
);
if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
}
// 禁用
if (status == 2){
// 减少文章的统计字段
boolean r = caseClinicalVideoService.DecClinicalVideoStats(
String.valueOf(userCommentClinicalVideo.getVideoId()),
3,
1
);
if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
}
return ResponseDTO.ok(); return ResponseDTO.ok();
} }
/** /**
* 修改置顶状态 * 修改置顶状态
*/ */
@Transactional
public ResponseDTO<String> updateTopStatus(Long commentId, Integer isTop) { public ResponseDTO<String> updateTopStatus(Long commentId, Integer isTop) {
if (null == commentId || null == isTop) { if (null == commentId || null == isTop) {
return ResponseDTO.userErrorParam("参数不能为空"); return ResponseDTO.userErrorParam("参数不能为空");
} }
UserCommentClinicalVideoEntity entity = new UserCommentClinicalVideoEntity(); // 获取评论数据
entity.setCommentId(commentId); UserCommentClinicalVideoEntity userCommentClinicalVideo = userCommentClinicalVideoDao.selectById(commentId);
entity.setIsTop(isTop); if (null == userCommentClinicalVideo) {
userCommentClinicalVideoDao.updateById(entity); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
if (Objects.equals(userCommentClinicalVideo.getIsTop(), isTop)) {
return ResponseDTO.ok();
}
userCommentClinicalVideo.setIsTop(isTop);
userCommentClinicalVideoDao.updateById(userCommentClinicalVideo);
return ResponseDTO.ok(); return ResponseDTO.ok();
} }
/** /**
* 批量删除 * 批量删除
*/ */
@Transactional
public ResponseDTO<String> batchDelete(List<Long> idList) { public ResponseDTO<String> batchDelete(List<Long> idList) {
if (CollectionUtils.isEmpty(idList)){ if (CollectionUtils.isEmpty(idList)){
return ResponseDTO.ok(); return ResponseDTO.ok();
} }
userCommentClinicalVideoDao.deleteBatchIds(idList); for (Long id : idList){
// 获取评论数据
UserCommentClinicalVideoEntity userCommentClinicalVideo = userCommentClinicalVideoDao.selectById(id);
if (null == userCommentClinicalVideo) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
// 减少文章的统计字段
boolean r = caseClinicalVideoService.DecClinicalVideoStats(
String.valueOf(userCommentClinicalVideo.getVideoId()),
3,
1
);
if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
userCommentClinicalVideoDao.deleteById(id);
}
return ResponseDTO.ok(); return ResponseDTO.ok();
} }
/** /**
* 单个删除 * 单个删除
*/ */
@Transactional
public ResponseDTO<String> delete(Long commentId) { public ResponseDTO<String> delete(Long commentId) {
if (null == commentId){ if (null == commentId){
return ResponseDTO.ok(); return ResponseDTO.ok();
} }
// 获取评论数据
UserCommentClinicalVideoEntity userCommentClinicalVideo = userCommentClinicalVideoDao.selectById(commentId);
if (null == userCommentClinicalVideo) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
// 减少文章的统计字段
boolean r = caseClinicalVideoService.DecClinicalVideoStats(
String.valueOf(userCommentClinicalVideo.getVideoId()),
3,
1
);
if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
userCommentClinicalVideoDao.deleteById(commentId); userCommentClinicalVideoDao.deleteById(commentId);
return ResponseDTO.ok(); return ResponseDTO.ok();
} }

View File

@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/** /**
@ -30,4 +31,25 @@ public interface CaseExchangeDao extends BaseMapper<CaseExchangeEntity> {
*/ */
List<CaseExchangeVO> queryPage(Page page, @Param("queryForm") CaseExchangeQueryForm queryForm); List<CaseExchangeVO> queryPage(Page page, @Param("queryForm") CaseExchangeQueryForm queryForm);
/**
* Inc 自增
* @param exchangeId 文章 ID
* @param field 字段名称
* @param numeral 增加的数值
* @return 更新的行数
*/
@Update("UPDATE case_exchange SET ${field} = ${field} + #{numeral} WHERE exchange_id = #{exchangeId}")
int inc(@Param("exchangeId") Long exchangeId, @Param("field") String field, @Param("numeral") int numeral);
/**
* Dec 自减
*
* @param exchangeId 文章 ID
* @param field 字段名称
* @param numeral 减少的数值
* @return 更新的行数
*/
@Update("UPDATE case_exchange SET ${field} = ${field} - #{numeral} WHERE exchange_id = #{exchangeId}")
int dec(@Param("exchangeId") Long exchangeId, @Param("field") String field, @Param("numeral") int numeral);
} }

View File

@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/** /**
@ -30,4 +31,26 @@ public interface StatsCaseExchangeDao extends BaseMapper<StatsCaseExchangeEntity
*/ */
List<StatsCaseExchangeVO> queryPage(Page page, @Param("queryForm") StatsCaseExchangeQueryForm queryForm); List<StatsCaseExchangeVO> queryPage(Page page, @Param("queryForm") StatsCaseExchangeQueryForm queryForm);
/**
* Inc 自增
* @param statsId 文章 ID
* @param field 字段名称
* @param numeral 增加的数值
* @return 更新的行数
*/
@Update("UPDATE stats_case_exchange SET ${field} = ${field} + #{numeral} WHERE stats_id = #{statsId}")
int inc(@Param("statsId") Long statsId, @Param("field") String field, @Param("numeral") int numeral);
/**
* Dec 自减
*
* @param statsId 文章 ID
* @param field 字段名称
* @param numeral 减少的数值
* @return 更新的行数
*/
@Update("UPDATE stats_case_exchange " +
"SET ${field} = CASE WHEN ${field} >= #{numeral} THEN ${field} - #{numeral} ELSE 0 END " +
"WHERE stats_id = #{statsId}")
int dec(@Param("statsId") Long statsId, @Param("field") String field, @Param("numeral") int numeral);
} }

View File

@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/** /**
@ -30,4 +31,26 @@ public interface StatsCaseExchangeUserDao extends BaseMapper<StatsCaseExchangeUs
*/ */
List<StatsCaseExchangeUserVO> queryPage(Page page, @Param("queryForm") StatsCaseExchangeUserQueryForm queryForm); List<StatsCaseExchangeUserVO> queryPage(Page page, @Param("queryForm") StatsCaseExchangeUserQueryForm queryForm);
/**
* Inc 自增
* @param userId 文章 ID
* @param field 字段名称
* @param numeral 增加的数值
* @return 更新的行数
*/
@Update("UPDATE stats_case_exchange_user SET ${field} = ${field} + #{numeral} WHERE user_id = #{userId}")
int inc(@Param("userId") Long userId, @Param("field") String field, @Param("numeral") int numeral);
/**
* Dec 自减
*
* @param userId 文章 ID
* @param field 字段名称
* @param numeral 减少的数值
* @return 更新的行数
*/
@Update("UPDATE stats_case_exchange_user " +
"SET ${field} = CASE WHEN ${field} >= #{numeral} THEN ${field} - #{numeral} ELSE 0 END " +
"WHERE user_id = #{userId}")
int dec(@Param("userId") Long userId, @Param("field") String field, @Param("numeral") int numeral);
} }

View File

@ -19,8 +19,12 @@ import net.lab1024.sa.admin.module.business.caseClinicalRecordScore.dao.CaseClin
import net.lab1024.sa.admin.module.business.caseClinicalRecordScore.domain.entity.CaseClinicalRecordScoreEntity; import net.lab1024.sa.admin.module.business.caseClinicalRecordScore.domain.entity.CaseClinicalRecordScoreEntity;
import net.lab1024.sa.admin.module.business.caseExchange.dao.CaseExchangeDao; import net.lab1024.sa.admin.module.business.caseExchange.dao.CaseExchangeDao;
import net.lab1024.sa.admin.module.business.caseExchange.dao.CaseExchangeLabelDao; import net.lab1024.sa.admin.module.business.caseExchange.dao.CaseExchangeLabelDao;
import net.lab1024.sa.admin.module.business.caseExchange.dao.StatsCaseExchangeDao;
import net.lab1024.sa.admin.module.business.caseExchange.dao.StatsCaseExchangeUserDao;
import net.lab1024.sa.admin.module.business.caseExchange.domain.entity.CaseExchangeEntity; import net.lab1024.sa.admin.module.business.caseExchange.domain.entity.CaseExchangeEntity;
import net.lab1024.sa.admin.module.business.caseExchange.domain.entity.CaseExchangeLabelEntity; import net.lab1024.sa.admin.module.business.caseExchange.domain.entity.CaseExchangeLabelEntity;
import net.lab1024.sa.admin.module.business.caseExchange.domain.entity.StatsCaseExchangeEntity;
import net.lab1024.sa.admin.module.business.caseExchange.domain.entity.StatsCaseExchangeUserEntity;
import net.lab1024.sa.admin.module.business.caseExchange.domain.form.CaseExchangeAddForm; import net.lab1024.sa.admin.module.business.caseExchange.domain.form.CaseExchangeAddForm;
import net.lab1024.sa.admin.module.business.caseExchange.domain.form.CaseExchangeQueryForm; import net.lab1024.sa.admin.module.business.caseExchange.domain.form.CaseExchangeQueryForm;
import net.lab1024.sa.admin.module.business.caseExchange.domain.form.CaseExchangeUpdateForm; import net.lab1024.sa.admin.module.business.caseExchange.domain.form.CaseExchangeUpdateForm;
@ -41,6 +45,7 @@ import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.transaction.annotation.Transactional;
/** /**
* 病例库-病例交流 Service * 病例库-病例交流 Service
@ -71,6 +76,12 @@ public class CaseExchangeService {
@Resource @Resource
private CaseClinicalRecordScoreDao caseClinicalRecordScoreDao; private CaseClinicalRecordScoreDao caseClinicalRecordScoreDao;
@Resource
private StatsCaseExchangeUserDao statsCaseExchangeUserDao;
@Resource
private StatsCaseExchangeDao statsCaseExchangeDao;
/** /**
* 分页查询 * 分页查询
*/ */
@ -353,6 +364,16 @@ public class CaseExchangeService {
} }
} }
// 病例交流统计
if (!handleStatsCaseExchange()){
throw new BusinessException("操作失败");
}
// 新增病例交流统计-用户
if (!handleStatsCaseExchangeUser(String.valueOf(caseExchange.getUserId()),"exchange_num")){
throw new BusinessException("操作失败");
}
return ResponseDTO.ok(); return ResponseDTO.ok();
} }
@ -388,4 +409,184 @@ public class CaseExchangeService {
caseExchangeLabelDao.insert(labelEntity); caseExchangeLabelDao.insert(labelEntity);
} }
} }
/**
* 新增病例交流统计
* @return bool
*/
public boolean handleStatsCaseExchange(){
LambdaQueryWrapper<StatsCaseExchangeEntity> mapQueryWrapper = new LambdaQueryWrapper<>();
StatsCaseExchangeEntity statsCaseExchange = statsCaseExchangeDao.selectOne(mapQueryWrapper);
if (statsCaseExchange == null){
// 新增
StatsCaseExchangeEntity statsCaseExchangeData = new StatsCaseExchangeEntity();
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<StatsCaseExchangeUserEntity> mapQueryWrapper = new LambdaQueryWrapper<>();
mapQueryWrapper.eq(StatsCaseExchangeUserEntity::getUserId, userId);
StatsCaseExchangeUserEntity statsCaseExchangeUser = statsCaseExchangeUserDao.selectOne(mapQueryWrapper);
if (statsCaseExchangeUser == null){
// 新增
StatsCaseExchangeUserEntity statsCaseExchangeUserData = new StatsCaseExchangeUserEntity();
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 {
// 获取病例数据
CaseExchangeEntity caseExchange = caseExchangeDao.selectById(exchangeId);
if (caseExchange == null){
throw new BusinessException("操作失败");
}
LambdaQueryWrapper<StatsCaseExchangeUserEntity> mapQueryWrapper = new LambdaQueryWrapper<>();
mapQueryWrapper.eq(StatsCaseExchangeUserEntity::getUserId, caseExchange.getUserId());
StatsCaseExchangeUserEntity 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 {
// 获取病例数据
CaseExchangeEntity caseExchange = caseExchangeDao.selectById(exchangeId);
if (caseExchange == null){
throw new BusinessException("操作失败");
}
LambdaQueryWrapper<StatsCaseExchangeUserEntity> mapQueryWrapper = new LambdaQueryWrapper<>();
mapQueryWrapper.eq(StatsCaseExchangeUserEntity::getUserId, caseExchange.getUserId());
StatsCaseExchangeUserEntity 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;
}
}
} }

View File

@ -1,5 +1,6 @@
package net.lab1024.sa.admin.module.business.caseExchange.service; package net.lab1024.sa.admin.module.business.caseExchange.service;
import net.lab1024.sa.admin.module.business.caseExchange.domain.entity.UserCommentExchangeEntity;
import net.lab1024.sa.admin.module.business.caseExchange.dao.UserCommentExchangeDao; import net.lab1024.sa.admin.module.business.caseExchange.dao.UserCommentExchangeDao;
import net.lab1024.sa.admin.module.business.caseExchange.domain.entity.UserCommentExchangeEntity; import net.lab1024.sa.admin.module.business.caseExchange.domain.entity.UserCommentExchangeEntity;
import net.lab1024.sa.admin.module.business.caseExchange.domain.form.UserCommentExchangeAddForm; import net.lab1024.sa.admin.module.business.caseExchange.domain.form.UserCommentExchangeAddForm;
@ -17,8 +18,11 @@ import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* 用户评论-病例交流 Service * 用户评论-病例交流 Service
@ -34,6 +38,9 @@ public class UserCommentExchangeService {
@Resource @Resource
private UserCommentExchangeDao userCommentExchangeDao; private UserCommentExchangeDao userCommentExchangeDao;
@Resource
private CaseExchangeService caseExchangeService;
/** /**
* 分页查询 * 分页查询
*/ */
@ -46,6 +53,7 @@ public class UserCommentExchangeService {
/** /**
* 添加 * 添加
*/ */
@Transactional
public ResponseDTO<String> add(UserCommentExchangeAddForm addForm) { public ResponseDTO<String> add(UserCommentExchangeAddForm addForm) {
UserCommentExchangeEntity userCommentExchangeEntity = SmartBeanUtil.copy(addForm, UserCommentExchangeEntity.class); UserCommentExchangeEntity userCommentExchangeEntity = SmartBeanUtil.copy(addForm, UserCommentExchangeEntity.class);
userCommentExchangeDao.insert(userCommentExchangeEntity); userCommentExchangeDao.insert(userCommentExchangeEntity);
@ -56,6 +64,7 @@ public class UserCommentExchangeService {
* 更新 * 更新
* *
*/ */
@Transactional
public ResponseDTO<String> update(UserCommentExchangeUpdateForm updateForm) { public ResponseDTO<String> update(UserCommentExchangeUpdateForm updateForm) {
UserCommentExchangeEntity userCommentExchangeEntity = SmartBeanUtil.copy(updateForm, UserCommentExchangeEntity.class); UserCommentExchangeEntity userCommentExchangeEntity = SmartBeanUtil.copy(updateForm, UserCommentExchangeEntity.class);
userCommentExchangeDao.updateById(userCommentExchangeEntity); userCommentExchangeDao.updateById(userCommentExchangeEntity);
@ -65,53 +74,141 @@ public class UserCommentExchangeService {
/** /**
* 修改评论状态 * 修改评论状态
*/ */
@Transactional
public ResponseDTO<String> updateStatus(Long commentId, Integer status) { public ResponseDTO<String> updateStatus(Long commentId, Integer status) {
if (null == commentId || null == status) { if (null == commentId || null == status) {
return ResponseDTO.userErrorParam("参数不能为空"); return ResponseDTO.userErrorParam("参数不能为空");
} }
UserCommentExchangeEntity entity = new UserCommentExchangeEntity(); // 获取评论数据
entity.setCommentId(commentId); UserCommentExchangeEntity userCommentExchange = userCommentExchangeDao.selectById(commentId);
entity.setStatus(status); if (null == userCommentExchange) {
userCommentExchangeDao.updateById(entity); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
if (Objects.equals(userCommentExchange.getStatus(), status)) {
return ResponseDTO.ok();
}
userCommentExchange.setStatus(status);
userCommentExchangeDao.updateById(userCommentExchange);
// 正常
if (status == 1){
// 新增文章的统计字段
boolean r = caseExchangeService.IncCaseExchangeStats(
String.valueOf(userCommentExchange.getExchangeId()),
3
);
if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
}
// 禁用
if (status == 2){
// 减少文章的统计字段
boolean r = caseExchangeService.DecCaseExchangeStats(
String.valueOf(userCommentExchange.getExchangeId()),
3,
1
);
if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
}
return ResponseDTO.ok(); return ResponseDTO.ok();
} }
/** /**
* 修改置顶状态 * 修改置顶状态
*/ */
@Transactional
public ResponseDTO<String> updateTopStatus(Long commentId, Integer isTop) { public ResponseDTO<String> updateTopStatus(Long commentId, Integer isTop) {
if (null == commentId || null == isTop) { if (null == commentId || null == isTop) {
return ResponseDTO.userErrorParam("参数不能为空"); return ResponseDTO.userErrorParam("参数不能为空");
} }
UserCommentExchangeEntity entity = new UserCommentExchangeEntity(); // 获取评论数据
entity.setCommentId(commentId); UserCommentExchangeEntity userCommentExchange = userCommentExchangeDao.selectById(commentId);
entity.setIsTop(isTop); if (null == userCommentExchange) {
userCommentExchangeDao.updateById(entity); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
if (Objects.equals(userCommentExchange.getIsTop(), isTop)) {
return ResponseDTO.ok();
}
userCommentExchange.setIsTop(isTop);
userCommentExchangeDao.updateById(userCommentExchange);
return ResponseDTO.ok(); return ResponseDTO.ok();
} }
/** /**
* 批量删除 * 批量删除
*/ */
@Transactional
public ResponseDTO<String> batchDelete(List<Long> idList) { public ResponseDTO<String> batchDelete(List<Long> idList) {
if (CollectionUtils.isEmpty(idList)){ if (CollectionUtils.isEmpty(idList)){
return ResponseDTO.ok(); return ResponseDTO.ok();
} }
userCommentExchangeDao.deleteBatchIds(idList); for (Long id : idList){
// 获取评论数据
UserCommentExchangeEntity userCommentExchange = userCommentExchangeDao.selectById(id);
if (null == userCommentExchange) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
// 减少文章的统计字段
boolean r = caseExchangeService.DecCaseExchangeStats(
String.valueOf(userCommentExchange.getExchangeId()),
3,
1
);
if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
userCommentExchangeDao.deleteById(id);
}
return ResponseDTO.ok(); return ResponseDTO.ok();
} }
/** /**
* 单个删除 * 单个删除
*/ */
@Transactional
public ResponseDTO<String> delete(Long commentId) { public ResponseDTO<String> delete(Long commentId) {
if (null == commentId){ if (null == commentId){
return ResponseDTO.ok(); return ResponseDTO.ok();
} }
// 获取评论数据
UserCommentExchangeEntity userCommentExchange = userCommentExchangeDao.selectById(commentId);
if (null == userCommentExchange) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
// 减少文章的统计字段
boolean r = caseExchangeService.DecCaseExchangeStats(
String.valueOf(userCommentExchange.getExchangeId()),
3,
1
);
if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
userCommentExchangeDao.deleteById(commentId); userCommentExchangeDao.deleteById(commentId);
return ResponseDTO.ok(); return ResponseDTO.ok();
} }