20 changed files with 295 additions and 14 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,83 @@ |
|||||
package com.ccsens.mt.service; |
package com.ccsens.mt.service; |
||||
|
|
||||
|
import cn.hutool.core.lang.Snowflake; |
||||
import com.ccsens.mt.bean.dto.TopicDto; |
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.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.bean.dto.QueryDto; |
||||
|
import com.ccsens.util.exception.BaseException; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.stereotype.Service; |
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; |
import java.util.List; |
||||
|
|
||||
|
@Slf4j |
||||
@Service |
@Service |
||||
|
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) |
||||
public class VoteService implements IVoteService{ |
public class VoteService implements IVoteService{ |
||||
|
|
||||
|
@Resource |
||||
|
private VoteDao voteDao; |
||||
|
@Resource |
||||
|
private MtGroupMapper mtGroupMapper; |
||||
|
@Resource |
||||
|
private Snowflake snowflake; |
||||
|
|
||||
@Override |
@Override |
||||
public void saveVote(QueryDto<List<TopicDto.Group>> params) { |
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 |
@Override |
||||
public List<VoteVo.GroupInfo> queryVote(QueryDto<TopicDto.Project> params) { |
public List<VoteVo.GroupInfo> queryVote(TopicDto.Project params) { |
||||
return null; |
|
||||
|
|
||||
|
return voteDao.queryVote(params); |
||||
} |
} |
||||
} |
} |
||||
|
@ -1,4 +1,4 @@ |
|||||
spring: |
spring: |
||||
profiles: |
profiles: |
||||
active: dev |
active: test |
||||
include: common, util-dev |
include: common, util-test |
@ -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