|
|
@ -4,13 +4,12 @@ import cn.hutool.core.collection.CollectionUtil; |
|
|
|
import cn.hutool.core.lang.Snowflake; |
|
|
|
import cn.hutool.core.util.ObjectUtil; |
|
|
|
import com.ccsens.mt.bean.dto.TopicDto; |
|
|
|
import com.ccsens.mt.bean.po.MtGroup; |
|
|
|
import com.ccsens.mt.bean.po.MtGroupTopic; |
|
|
|
import com.ccsens.mt.bean.po.MtTopic; |
|
|
|
import com.ccsens.mt.bean.po.*; |
|
|
|
import com.ccsens.mt.bean.vo.TopicVo; |
|
|
|
import com.ccsens.mt.persist.dao.GroupDao; |
|
|
|
import com.ccsens.mt.persist.dao.GroupTopicDao; |
|
|
|
import com.ccsens.mt.persist.dao.TopicDao; |
|
|
|
import com.ccsens.mt.persist.mapper.MtResponderMapper; |
|
|
|
import com.ccsens.mt.util.Constant; |
|
|
|
import com.ccsens.util.CodeEnum; |
|
|
|
import com.ccsens.util.RedisUtil; |
|
|
@ -38,6 +37,8 @@ public class TopicService implements ITopicService{ |
|
|
|
private Snowflake snowflake; |
|
|
|
@Resource |
|
|
|
private GroupTopicDao groupTopicDao; |
|
|
|
@Resource |
|
|
|
private MtResponderMapper mtResponderMapper; |
|
|
|
|
|
|
|
@Override |
|
|
|
public TopicVo.TopicInfo getTopicByLink(TopicDto.GetTopic getTopic) { |
|
|
@ -91,18 +92,83 @@ public class TopicService implements ITopicService{ |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<TopicVo.QueryRanking> queryRanking(TopicDto.GetRankingByProjectId ranking) { |
|
|
|
log.info("查看排名:{}", ranking.toString()); |
|
|
|
List<TopicVo.QueryRanking> queryRankingList = topicDao.queryRanking(ranking.getProjectId(),ranking.getLinkType()); |
|
|
|
if(CollectionUtil.isNotEmpty(queryRankingList)){ |
|
|
|
if(ranking.getLinkType() == 1){ |
|
|
|
for(int i = 4; i < queryRankingList.size() - 1;i++){ |
|
|
|
if(queryRankingList.get(i).getScore() > queryRankingList.get(i + 1).getScore()){ |
|
|
|
break; |
|
|
|
} |
|
|
|
queryRankingList.get(i).setExtraTopic(1); |
|
|
|
queryRankingList.get(i + 1).setExtraTopic(1); |
|
|
|
} |
|
|
|
for(int i = 4; i > 0; i--){ |
|
|
|
if(queryRankingList.get(i).getScore() < queryRankingList.get(i - 1).getScore()){ |
|
|
|
break; |
|
|
|
} |
|
|
|
queryRankingList.get(i).setExtraTopic(1); |
|
|
|
queryRankingList.get(i - 1).setExtraTopic(1); |
|
|
|
} |
|
|
|
|
|
|
|
return null; |
|
|
|
} |
|
|
|
if(ranking.getLinkType() == 2){ |
|
|
|
for(int i = 2; i < queryRankingList.size() - 1;i++){ |
|
|
|
if(queryRankingList.get(i).getScore() > queryRankingList.get(i + 1).getScore()){ |
|
|
|
break; |
|
|
|
} |
|
|
|
queryRankingList.get(i).setExtraTopic(1); |
|
|
|
queryRankingList.get(i + 1).setExtraTopic(1); |
|
|
|
} |
|
|
|
for(int i = 2; i > 0; i--){ |
|
|
|
if(queryRankingList.get(i).getScore() < queryRankingList.get(i - 1).getScore()){ |
|
|
|
break; |
|
|
|
} |
|
|
|
queryRankingList.get(i).setExtraTopic(1); |
|
|
|
queryRankingList.get(i - 1).setExtraTopic(1); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
return queryRankingList; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void responderStart(TopicDto.Topic topic) { |
|
|
|
redisUtil.set(topic.getProjectId()+ Constant.Redis.START_QUESTION,topic.getProjectId(), Constant.Redis.TIME_OUT); |
|
|
|
redisUtil.set(topic.getProjectId()+ Constant.Redis.START_QUESTION,topic.getTopicId(), Constant.Redis.TIME_OUT); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void responderGroup(TopicDto.Group group) { |
|
|
|
|
|
|
|
//锁
|
|
|
|
synchronized (this){ |
|
|
|
log.info("抢答:{}", group); |
|
|
|
//在redis中查找当前项目下开始抢答的题
|
|
|
|
Object o = redisUtil.get(group.getProjectId()+ Constant.Redis.START_QUESTION); |
|
|
|
log.info("题目缓存:{}", o); |
|
|
|
if (o == null) { |
|
|
|
return; |
|
|
|
} |
|
|
|
//在redis中查找之前有没有人抢答
|
|
|
|
Object a = redisUtil.get(group.getProjectId() + Constant.Redis.RESPONDER + o); |
|
|
|
if (a != null) { |
|
|
|
return; |
|
|
|
} |
|
|
|
//将自己抢答的信息存进redis
|
|
|
|
redisUtil.set(group.getProjectId() + Constant.Redis.RESPONDER + o,group.getGroupId(),Constant.Redis.TIME_OUT); |
|
|
|
//储存数据库
|
|
|
|
MtResponderExample responderExample = new MtResponderExample(); |
|
|
|
responderExample.createCriteria().andTopicIdEqualTo((long)o).andGroupIdEqualTo(group.getGroupId()); |
|
|
|
List<MtResponder> mtResponderList = mtResponderMapper.selectByExample(responderExample); |
|
|
|
if(CollectionUtil.isNotEmpty(mtResponderList)){ |
|
|
|
return; |
|
|
|
} |
|
|
|
MtResponder mtResponder = new MtResponder(); |
|
|
|
mtResponder.setId(snowflake.nextId()); |
|
|
|
mtResponder.setGroupId(group.getGroupId()); |
|
|
|
mtResponder.setTopicId((long)o); |
|
|
|
mtResponderMapper.insertSelective(mtResponder); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|