You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.6 KiB
74 lines
2.6 KiB
package com.lh.service;
|
|
|
|
import com.lh.bean.Candidate;
|
|
import com.lh.exception.MyException;
|
|
import com.lh.mapper.CandidatesMapper;
|
|
import com.lh.mapper.VoterMapper;
|
|
import org.apache.kafka.clients.consumer.ConsumerRecord;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
|
import org.springframework.kafka.annotation.EnableKafka;
|
|
import org.springframework.kafka.annotation.KafkaListener;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
@Service
|
|
@EnableKafka
|
|
public class VoteConsumer {
|
|
@Autowired
|
|
private VoterMapper voterMapper;
|
|
@Autowired
|
|
private CandidatesMapper candidatesMapper;
|
|
@Autowired
|
|
private StringRedisTemplate redisTemplate;
|
|
|
|
@KafkaListener(topics = "vote-topic", groupId = "vote-group")
|
|
public void handleVoteMessage(ConsumerRecord<String, String> record) throws MyException {
|
|
String message = record.value();
|
|
|
|
// 将消息分割为投票信息
|
|
String[] parts = message.split(",");
|
|
String voterJwcode = parts[0];
|
|
String candidateJwcode = parts[1];
|
|
String voterName = parts[2];
|
|
String voteTime = parts[3];
|
|
|
|
// 处理投票
|
|
processVote(voterJwcode, candidateJwcode, voterName, voteTime);
|
|
}
|
|
|
|
private boolean processVote(String voterJwcode, String candidateJwcode, String voterName, String voteTime) throws MyException {
|
|
// 获取候选人信息
|
|
Candidate candidate = candidatesMapper.getByCandidateJwcode(candidateJwcode);
|
|
|
|
// 2. 获取候选人信息
|
|
if (candidate == null) {
|
|
throw new MyException("候选人不存在!");
|
|
}
|
|
|
|
// 3. 检查用户是否已经为该候选人投过票
|
|
//List<Voter> hasVotes = voterMapper.countVotesToday(voterJwcode);
|
|
////遍历列表,判断是否有记录
|
|
//boolean flag = true;
|
|
//for (Voter vote : hasVotes) {
|
|
// if (vote.getCandidateJwCode().equals(candidateJwcode)) {
|
|
// flag = false;
|
|
// }
|
|
//}
|
|
//if (!flag){
|
|
// throw new MyException("已投票,可以选择其他人试试哦~");
|
|
//}
|
|
|
|
// 4. 增加候选人票数
|
|
if (!candidatesMapper.addVotes(candidateJwcode)) {
|
|
throw new MyException ("候选人票数更新失败,请联系管理员!");
|
|
}
|
|
|
|
// 5. 插入投票记录
|
|
voterMapper.insertVote(voterJwcode, candidateJwcode, voterName);
|
|
|
|
|
|
System.out.println("投票成功!用户:" + voterJwcode + " 投给了 " + candidateJwcode);
|
|
return true;
|
|
}
|
|
|
|
}
|