Browse Source

0814_1.0

master
zy_Java 5 years ago
parent
commit
3a89d50ea0
  1. 13
      mt/src/main/java/com/ccsens/mt/api/TopicController.java
  2. 3
      mt/src/main/java/com/ccsens/mt/api/VoteController.java
  3. 14
      mt/src/main/java/com/ccsens/mt/bean/dto/TopicDto.java
  4. 26
      mt/src/main/java/com/ccsens/mt/bean/vo/TopicVo.java
  5. 15
      mt/src/main/java/com/ccsens/mt/persist/dao/TopicDao.java
  6. 30
      mt/src/main/java/com/ccsens/mt/persist/dao/VoteDao.java
  7. 17
      mt/src/main/java/com/ccsens/mt/service/ITopicService.java
  8. 4
      mt/src/main/java/com/ccsens/mt/service/IVoteService.java
  9. 4
      mt/src/main/java/com/ccsens/mt/service/MessageServicer.java
  10. 3
      mt/src/main/java/com/ccsens/mt/service/ScoreService.java
  11. 3
      mt/src/main/java/com/ccsens/mt/service/SigninService.java
  12. 39
      mt/src/main/java/com/ccsens/mt/service/TopicService.java
  13. 3
      mt/src/main/java/com/ccsens/mt/service/UserService.java
  14. 66
      mt/src/main/java/com/ccsens/mt/service/VoteService.java
  15. 2
      mt/src/main/java/com/ccsens/mt/util/Constant.java
  16. 4
      mt/src/main/resources/application.yml
  17. 1
      mt/src/main/resources/mapper_dao/GroupDao.xml
  18. 27
      mt/src/main/resources/mapper_dao/TopicDao.xml
  19. 34
      mt/src/main/resources/mapper_dao/VoteDao.xml
  20. 1
      util/src/main/java/com/ccsens/util/CodeEnum.java

13
mt/src/main/java/com/ccsens/mt/api/TopicController.java

@ -3,6 +3,7 @@ package com.ccsens.mt.api;
import com.ccsens.mt.bean.dto.TopicDto;
import com.ccsens.mt.bean.vo.TopicVo;
import com.ccsens.mt.service.ITopicService;
import com.ccsens.util.CodeEnum;
import com.ccsens.util.JsonResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParams;
@ -69,6 +70,16 @@ public class TopicController {
return JsonResponse.newInstance().ok(queryRankings);
}
@ApiOperation(value = "晋级", notes = "")
@ApiImplicitParams({
})
@RequestMapping(value = "/promoted", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse promoted(@RequestBody @ApiParam @Validated TopicDto.Promoted promoted) throws Exception {
log.info("查排名:{}",promoted.toString());
CodeEnum codeEnum = topicService.promoted(promoted);
return JsonResponse.newInstance().ok(codeEnum);
}
@ApiOperation(value = "选手抢答", notes = "")
@ApiImplicitParams({
})
@ -80,7 +91,6 @@ public class TopicController {
}
/*=============================================================================*/
@ApiOperation(value = "主持人在大屏点击开始抢答(倒计时结束后)", notes = "")
@ApiImplicitParams({
})
@ -100,6 +110,7 @@ public class TopicController {
public JsonResponse<TopicVo.GroupInfo> getResponder(@RequestBody @ApiParam @Validated TopicDto.Topic topic) throws Exception {
log.info("查询抢答成功的组:{}",topic.toString());
TopicVo.GroupInfo group = topicService.getResponder(topic);
return JsonResponse.newInstance().ok(group);
}

3
mt/src/main/java/com/ccsens/mt/api/VoteController.java

@ -43,14 +43,13 @@ public class VoteController {
return JsonResponse.newInstance().ok();
}
@MustLogin
@ApiOperation(value = "查询投票结果", notes = "")
@ApiImplicitParams({
})
@RequestMapping(value = "/get", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<List<VoteVo.GroupInfo>> queryVote(@RequestBody @ApiParam @Validated QueryDto<TopicDto.Project> params) throws Exception {
log.info("查询投票结果:{}",params.toString());
List<VoteVo.GroupInfo> groupInfoList = voteService.queryVote(params);
List<VoteVo.GroupInfo> groupInfoList = voteService.queryVote(params.getParam());
return JsonResponse.newInstance().ok(groupInfoList);
}

14
mt/src/main/java/com/ccsens/mt/bean/dto/TopicDto.java

@ -24,6 +24,9 @@ public class TopicDto {
@NotNull
@ApiModelProperty("当前环节的题号")
private int topicNum;
@NotNull
@ApiModelProperty("项目ID")
private long projectId;
}
@Data
@ -69,6 +72,17 @@ public class TopicDto {
private int linkType;
}
@Data
@ApiModel("晋级")
public static class Promoted{
@ApiModelProperty("晋级 1志在必得 2以快制胜 3绝地反击 4你说我猜")
@Min(1)
@Max(4)
private Byte linkTypes;
@ApiModelProperty("分组ID")
private List<Long> groupIds;
}
@Data
@ApiModel("题目id")
public static class Topic{

26
mt/src/main/java/com/ccsens/mt/bean/vo/TopicVo.java

@ -24,6 +24,32 @@ public class TopicVo {
private List<String> options;
@ApiModelProperty("正确答案")
private String answersTrue;
@ApiModelProperty("题号")
private int sequence;
@ApiModelProperty("有无上一个:0:无 1:有")
private Byte prev;
@ApiModelProperty("有无下一个:0:无 1:有")
private Byte next;
@ApiModelProperty("答案")
private List<Answer> answers;
}
@Data
@ApiModel("最小和最大题号")
public static class TopicSequence{
@ApiModelProperty("最小题号")
private Integer min ;
@ApiModelProperty("最大题号")
private Integer max ;
}
public static class Answer{
@ApiModelProperty("分组ID")
private Long groupId;
@ApiModelProperty("分组的名字")
private String groupName;
@ApiModelProperty("答案")
private String answer;
}
@Data

15
mt/src/main/java/com/ccsens/mt/persist/dao/TopicDao.java

@ -29,6 +29,14 @@ public interface TopicDao extends MtTopicMapper {
* @return
*/
List<TopicVo.GroupInfo> queryGroupByProject(@Param("projectId")Long projectId, @Param("linkType")int linkType, @Param("type")int type);
/**
* 查询答案
* @param projectId
* @param topicId
* @return
*/
List<TopicVo.Answer> queryAnswer(@Param("projectId") Long projectId, @Param("topicId")Long topicId);
/**
* 查询所有绝地反击类型的题
* @param getTopicAll 请求类型
@ -44,10 +52,17 @@ public interface TopicDao extends MtTopicMapper {
List<String> queryOption(@Param("topicId") Long topicId);
/**
<<<<<<< HEAD
* 查询当前阶段的排名
* @param projectId 项目id
* @param linkType 阶段类型
* @return 返回排名按分数从大到小排列
*/
List<TopicVo.QueryRanking> queryRanking(@Param("projectId")Long projectId, @Param("linkType")int linkType);
/**
* 查询该类型下最小最大题号
* @param linkType 类型
* @return 最小 最大
*/
TopicVo.TopicSequence getMinAndMax(@Param("linkType") int linkType);
}

30
mt/src/main/java/com/ccsens/mt/persist/dao/VoteDao.java

@ -0,0 +1,30 @@
package com.ccsens.mt.persist.dao;
import com.ccsens.mt.bean.dto.TopicDto;
import com.ccsens.mt.bean.vo.VoteVo;
import com.ccsens.mt.persist.mapper.MtVoteMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @description: 投票
* @author: whj
* @time: 2020/8/13 18:52
*/
public interface VoteDao extends MtVoteMapper {
/**
* 查看投票结果
* @param params
* @return
*/
List<VoteVo.GroupInfo> queryVote(TopicDto.Project params);
/**
* 判断是否已经在当前项目中投票
* @param userId
* @param projectId
* @return
*/
long countUserVoteNums(@Param("userId") Long userId, @Param("projectId") Long projectId);
}

17
mt/src/main/java/com/ccsens/mt/service/ITopicService.java

@ -2,9 +2,13 @@ package com.ccsens.mt.service;
import com.ccsens.mt.bean.dto.TopicDto;
import com.ccsens.mt.bean.vo.TopicVo;
import com.ccsens.util.CodeEnum;
import java.util.List;
/**
* @author zy
*/
public interface ITopicService {
/**
* 通过比赛环节查询题目
@ -53,9 +57,16 @@ public interface ITopicService {
TopicVo.GroupInfo getResponder(TopicDto.Topic topic);
/**
* 查询所有绝地反击类型的
* @param getTopicAll
* @return
* 根据类型和数量查询试
* @param getTopicAll 类型
* @return 试题
*/
List<TopicVo.TopicByLink> queryTopicAllByLink(TopicDto.GetTopicAll getTopicAll);
/**
* 晋级
* @param promoted 晋级组信息
* @return 结果
*/
CodeEnum promoted(TopicDto.Promoted promoted);
}

4
mt/src/main/java/com/ccsens/mt/service/IVoteService.java

@ -15,8 +15,8 @@ public interface IVoteService {
/**
* 查看投票结果
* @param params
* @param project
* @return
*/
List<VoteVo.GroupInfo> queryVote(QueryDto<TopicDto.Project> params);
List<VoteVo.GroupInfo> queryVote(TopicDto.Project project);
}

4
mt/src/main/java/com/ccsens/mt/service/MessageServicer.java

@ -10,8 +10,12 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@Slf4j
@Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class MessageServicer implements IMessageService{
@Autowired
private AmqpTemplate rabbitTemplate;

3
mt/src/main/java/com/ccsens/mt/service/ScoreService.java

@ -30,6 +30,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.io.*;
import java.math.BigDecimal;
@ -38,6 +40,7 @@ import java.util.*;
import static java.math.BigDecimal.ROUND_HALF_UP;
@Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class ScoreService implements IScoreService {
@Autowired
private TallFeignClient tallFeignClient;

3
mt/src/main/java/com/ccsens/mt/service/SigninService.java

@ -15,11 +15,14 @@ import com.ccsens.util.CodeEnum;
import com.ccsens.util.exception.BaseException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class SigninService implements ISigninService{
@Autowired
private MtSigninDao mtSigninDao;

39
mt/src/main/java/com/ccsens/mt/service/TopicService.java

@ -5,11 +5,13 @@ 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.*;
import com.ccsens.mt.bean.po.MtGroup;
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.persist.mapper.MtGroupMapper;
import com.ccsens.mt.util.Constant;
import com.ccsens.util.CodeEnum;
import com.ccsens.util.RedisUtil;
@ -39,11 +41,25 @@ public class TopicService implements ITopicService{
private GroupTopicDao groupTopicDao;
@Resource
private MtResponderMapper mtResponderMapper;
@Resource
private MtGroupMapper mtGroupMapper;
@Override
public TopicVo.TopicInfo getTopicByLink(TopicDto.GetTopic getTopic) {
log.info("查询题目:{}",getTopic.toString());
return topicDao.getTopicByLink(getTopic.getLinkType(),getTopic.getTopicNum());
TopicVo.TopicInfo topicInfo = topicDao.getTopicByLink(getTopic.getLinkType(), getTopic.getTopicNum());
if (topicInfo == null) {
throw new BaseException(CodeEnum.PARAM_ERROR);
}
// 查询做题答案
List<TopicVo.Answer> answers = topicDao.queryAnswer(getTopic.getProjectId(), topicInfo.getTopicId());
// 查询是否有最小最大序号
TopicVo.TopicSequence sequence = topicDao.getMinAndMax(getTopic.getLinkType());
topicInfo.setAnswers(answers);
topicInfo.setPrev(topicInfo.getSequence() == sequence.getMin() ? (byte)0 : 1);
topicInfo.setNext(topicInfo.getSequence() == sequence.getMax() ? (byte)0 : 1);
return topicInfo;
}
@Override
@ -177,7 +193,14 @@ public class TopicService implements ITopicService{
Object o = redisUtil.get(topic.getProjectId() + Constant.Redis.RESPONDER + topic.getTopicId());
log.info("缓存:{}", o);
if (o!=null) {
return (TopicVo.GroupInfo)o;
MtGroup mtGroup = mtGroupMapper.selectByPrimaryKey((Long) o);
if (mtGroup == null) {
throw new BaseException(CodeEnum.PARAM_ERROR);
}
TopicVo.GroupInfo info = new TopicVo.GroupInfo();
info.setGroupId(mtGroup.getId());
info.setGroupName(mtGroup.getName());
return info;
}
TopicVo.GroupInfo info = groupDao.getResponder(topic);
log.info("查询抢答成功的组:{}", info);
@ -191,4 +214,16 @@ public class TopicService implements ITopicService{
log.info("所有绝地反击题:{}", list);
return list;
}
@Override
public CodeEnum promoted(TopicDto.Promoted promoted) {
promoted.getGroupIds().forEach(groupId -> {
MtGroup mtGroup = new MtGroup();
mtGroup.setId(groupId);
mtGroup.setAdvanceStatus(promoted.getLinkTypes());
mtGroupMapper.updateByPrimaryKeySelective(mtGroup);
});
return CodeEnum.SUCCESS;
}
}

3
mt/src/main/java/com/ccsens/mt/service/UserService.java

@ -10,11 +10,14 @@ import com.ccsens.util.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
@Slf4j
@Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class UserService implements IUserService{
@Autowired
private TallFeignClient tallFeignClient;

66
mt/src/main/java/com/ccsens/mt/service/VoteService.java

@ -1,21 +1,83 @@
package com.ccsens.mt.service;
import cn.hutool.core.lang.Snowflake;
import com.ccsens.mt.bean.dto.TopicDto;
import com.ccsens.mt.bean.po.MtGroup;
import com.ccsens.mt.bean.po.MtVote;
import com.ccsens.mt.bean.vo.VoteVo;
import com.ccsens.mt.persist.dao.VoteDao;
import com.ccsens.mt.persist.mapper.MtGroupMapper;
import com.ccsens.mt.util.Constant;
import com.ccsens.util.CodeEnum;
import com.ccsens.util.bean.dto.QueryDto;
import com.ccsens.util.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
@Slf4j
@Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class VoteService implements IVoteService{
@Resource
private VoteDao voteDao;
@Resource
private MtGroupMapper mtGroupMapper;
@Resource
private Snowflake snowflake;
@Override
public void saveVote(QueryDto<List<TopicDto.Group>> params) {
Long projectId = null;
List<TopicDto.Group> groups = params.getParam();
//获取项目ID,并校验参数
if (groups == null || groups.size() != Constant.VOTE_TOTAL) {
throw new BaseException(CodeEnum.PARAM_ERROR);
}
for (TopicDto.Group group: groups) {
if (group == null || group.getGroupId() == null) {
throw new BaseException(CodeEnum.PARAM_ERROR);
}
MtGroup mtGroup = mtGroupMapper.selectByPrimaryKey(group.getGroupId());
if (mtGroup == null) {
throw new BaseException(CodeEnum.PARAM_ERROR);
}
if (projectId == null) {
projectId = mtGroup.getProjectId();
} else {
if (projectId.longValue() != mtGroup.getId().longValue()) {
throw new BaseException(CodeEnum.PARAM_ERROR);
}
}
}
// 判断是否在当前项目中已投
long count = voteDao.countUserVoteNums(params.getUserId(), projectId);
log.info("{}-{}投票数:{}", params.getUserId(), projectId, count);
if (count > 0) {
throw new BaseException(CodeEnum.VOTED);
}
groups.forEach(group -> {
MtVote mtVote = new MtVote();
mtVote.setId(snowflake.nextId());
mtVote.setGroupId(group.getGroupId());
mtVote.setUserId(params.getUserId());
voteDao.insertSelective(mtVote);
});
}
@Override
public List<VoteVo.GroupInfo> queryVote(QueryDto<TopicDto.Project> params) {
return null;
public List<VoteVo.GroupInfo> queryVote(TopicDto.Project params) {
return voteDao.queryVote(params);
}
}

2
mt/src/main/java/com/ccsens/mt/util/Constant.java

@ -15,4 +15,6 @@ public class Constant {
public final static String RESPONDER = "_responder_";
}
public static final int VOTE_TOTAL = 2;
}

4
mt/src/main/resources/application.yml

@ -1,4 +1,4 @@
spring:
profiles:
active: dev
include: common, util-dev
active: test
include: common, util-test

1
mt/src/main/resources/mapper_dao/GroupDao.xml

@ -14,6 +14,7 @@
r.group_id = g.id
AND g.project_id = #{projectId}
AND r.topic_id = #{topicId}
AND g.type = 0
AND r.rec_status = 0
AND g.rec_status = 0
ORDER BY

27
mt/src/main/resources/mapper_dao/TopicDao.xml

@ -51,9 +51,11 @@
p.link_type = #{linkType}
and p.rec_status = 0
and (g.project_id = #{projectId} or g.id is null)
and (g.type = 0 or g.id is null)
and (gp.rec_status = 0 or gp.id is null)
and (g.rec_status = 0 or gp.id is null)
GROUP BY p.id
order by p.score
LIMIT ${nums}
</select>
<select id="queryOption" resultType="java.lang.String">
@ -64,6 +66,31 @@
WHERE
o.topic_id = #{topicId}
</select>
<select id="queryAnswer" resultType="com.ccsens.mt.bean.vo.TopicVo$Answer">
SELECT
g.id AS groupId,
g.NAME AS groupName,
t.answers AS answer
FROM
t_mt_group g,
t_mt_group_topic t
WHERE
g.id = t.group_id
AND g.project_id = #{projectId}
AND t.topic_id = #{topicId}
AND g.rec_status = 0
AND t.rec_status = 0
</select>
<select id="getMinAndMax" resultType="com.ccsens.mt.bean.vo.TopicVo$TopicSequence">
SELECT
min( sequence ) AS min,
max( sequence ) AS max
FROM
t_mt_topic
WHERE
link_type = #{linkType}
AND rec_status = 0
</select>
<select id="queryGroupByProject" parameterType="java.util.Map" resultType="com.ccsens.mt.bean.vo.TopicVo$GroupInfo">
SELECT

34
mt/src/main/resources/mapper_dao/VoteDao.xml

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ccsens.mt.persist.dao.VoteDao">
<select id="queryVote" resultType="com.ccsens.mt.bean.vo.VoteVo$GroupInfo">
SELECT
g.id as groupId,
g.name as groupName,
count(*) as voteNums
FROM
t_mt_group g
LEFT JOIN t_mt_vote v ON g.id = v.group_id
WHERE
g.project_id = #{projectId}
AND g.type = 1
AND g.rec_status = 0
AND ( v.rec_status = 0 OR v.id IS NULL )
GROUP BY g.id, g.name
</select>
<select id="countUserVoteNums" resultType="java.lang.Long">
SELECT
count( * )
FROM
t_mt_vote v,
t_mt_group g
WHERE
v.group_id = g.id
AND v.user_id = #{userId}
AND g.project_id = #{projectId}
AND v.rec_status = 0
AND g.rec_status = 0
</select>
</mapper>

1
util/src/main/java/com/ccsens/util/CodeEnum.java

@ -131,6 +131,7 @@ public enum CodeEnum {
VERIFICATION_CODE_PAST(110,"验证码失效,请刷新重试",true),
VERIFICATION_CODE_ERROR(111,"验证码错误",true),
NOT_ROW(112,"该行不存在",true),
VOTED(113,"对不起,您已经支持过看好的队伍了",true),
NOT_TOPIC(113,"找不到该题目",true),
NOT_GROUP(113,"找不到该组信息",true),

Loading…
Cancel
Save