投票添加限制

上级 023fe1ec
流水线 #8282 已通过 于阶段
in 2 分 45 秒
......@@ -109,6 +109,7 @@ public class RedisConstant {
public final static String UAV_DUMMY_DATA="UAV_DUMMY_DATA_KEY";
public final static String VOTE = "VOTE";
/**
* tagInfoAllot表的缓存key
*/
......
......@@ -91,6 +91,8 @@ public class ForumDynamicDO extends BaseDO implements Serializable {
@ApiModelProperty("")
private Integer transpond;
@ApiModelProperty("话题id")
private Integer gambitId;
public ForumDynamicDO(DynamicVO dynamicVO) {
this.gambitIcon=dynamicVO.getGambitIcon();
this.gambitCover=dynamicVO.getGambitCover();
......
......@@ -10,8 +10,10 @@ import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import com.mmc.csf.common.util.redis.RedisConstant;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.alibaba.fastjson.JSON;
......@@ -67,6 +69,9 @@ public class DynamicServiceImpl implements DynamicService {
@Autowired
private RestTemplate restTemplate;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Value("${iuav.userapp.url}")
private String userApp;
......@@ -170,12 +175,19 @@ public class DynamicServiceImpl implements DynamicService {
public ResultBody likeDynamic(Integer userId, Integer dynamicId) {
// 获取动态信息
ForumDynamicDO forumDynamicDO = dynamicDao.getDynamicInfo(dynamicId);
Integer gambitId = forumDynamicDO.getGambitId();
if (!likeDAO.isLiked(userId, dynamicId)) {
if(!isVoted(gambitId, userId)){
return ResultBody.error("投票已经上上限");
}
likeDAO.insertLike(userId, dynamicId);
dynamicDao.updateDynamicLikeCount(dynamicId, forumDynamicDO.getVersion());
dynamicDao.forumCount(forumDynamicDO.getUserAccountId());
//评论
} else {
if(gambitId == 101 || gambitId == 1001 || gambitId == 103){
return ResultBody.error("不能重复投票");
}
likeDAO.deleteLike(userId, dynamicId);
dynamicDao.updateSubDynamicLikeCount(dynamicId, forumDynamicDO.getVersion());
dynamicDao.forumCountNO(forumDynamicDO.getUserAccountId());
......@@ -183,6 +195,25 @@ public class DynamicServiceImpl implements DynamicService {
return ResultBody.success();
}
private boolean isVoted(Integer gambitId, Integer userAccountId) {
if (gambitId == 101 || gambitId == 1001 || gambitId == 103) {
boolean keyExists = stringRedisTemplate.hasKey(RedisConstant.VOTE + gambitId + userAccountId);
if(keyExists){
String voteStr = stringRedisTemplate.opsForValue().get(RedisConstant.VOTE + gambitId +userAccountId);
int voteCount = Integer.parseInt(voteStr);
if(voteCount >= 5){
return false;
}
stringRedisTemplate.opsForValue().set(RedisConstant.VOTE + gambitId + userAccountId, String.valueOf(voteCount+1));
return true;
}
stringRedisTemplate.opsForValue().set(RedisConstant.VOTE + gambitId + userAccountId, "1");
return true;
}
return true;
}
@Override
@Transactional(rollbackFor = Exception.class)
public ResultBody commentDynamic(CommentVO commentVO, Integer userAccountId, HttpServletRequest request) {
......
......@@ -371,9 +371,9 @@
</where>
</delete>
<select id="getDynamicInfo" resultType="com.mmc.csf.release.entity.forum.ForumDynamicDO">
select id,
select fd.id,
version,
user_account_id,
fd.user_account_id,
root_path,
description,
location,
......@@ -381,9 +381,11 @@
lon,
likes_count,
comments_count,
create_time
from forum_dynamic
where id = #{dynamicId}
fd.create_time,
gambit_id
from forum_dynamic fd
left join forum_dynamic_gambit on forum_dynamic_gambit.dynamic_id = fd.id
where fd.id = #{dynamicId}
and is_deleted = 0
</select>
<select id="countDynamicList" resultType="java.lang.Integer">
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论