19 changed files with 299 additions and 12 deletions
@ -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); |
|||
} |
@ -1,21 +1,86 @@ |
|||
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.po.MtVoteExample; |
|||
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 javax.validation.Valid; |
|||
import java.util.List; |
|||
import java.util.concurrent.atomic.AtomicLong; |
|||
|
|||
@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); |
|||
} |
|||
} |
|||
|
@ -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> |
Loading…
Reference in new issue