| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -4,9 +4,11 @@ import com.alibaba.fastjson.JSONArray; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.alibaba.fastjson.JSONObject; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.votesystem.ssl.dao.ActivityDAO; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.votesystem.ssl.dao.CandidateDAO; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.votesystem.ssl.dao.UserDAO; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.votesystem.ssl.dao.VoteRecordDAO; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.votesystem.ssl.pojo.Activity; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.votesystem.ssl.pojo.Candidate; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.votesystem.ssl.pojo.User; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.votesystem.ssl.pojo.VoteRecord; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.votesystem.ssl.utils.Constants; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.votesystem.ssl.utils.RedisUtils; | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -20,10 +22,9 @@ import com.votesystem.ssl.service.IVoteRecordService; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.votesystem.ssl.utils.IdWorker; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.votesystem.ssl.utils.TextUtils; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import javax.servlet.http.HttpServletRequest; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import javax.transaction.Transactional; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import java.util.Date; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import java.util.List; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import java.util.Map; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import java.util.*; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					@Slf4j | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					@Service | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -50,13 +51,49 @@ public class VoteRecordServiceImpl implements IVoteRecordService { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    @Autowired | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    RedisUtils redisUtils; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    @Autowired | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    UserDAO userDAO; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private boolean isInIpRestrictAddress(VoteRecord voteRecord,String ipAddress,long time){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<String,Object> aidMap = (Map<String, Object>) redisUtils.get(ipAddress); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					//        Map<String,Object> ipMap = (Map<String, Object>) redisUtils.get(ipAddress);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if (aidMap == null){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            aidMap = new HashMap<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					//        User user = userDAO.findOneById(voteRecord.getUid()); //获取用户
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if (aidMap.containsKey(voteRecord.getAid())){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return true; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            aidMap.put(voteRecord.getAid(),ipAddress); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            redisUtils.set(ipAddress,aidMap,time); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private boolean isInIpRestrictAddress(String aid,String ipAddress,long time){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<String,Object> aidMap = (Map<String, Object>) redisUtils.get(ipAddress); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					//        Map<String,Object> ipMap = (Map<String, Object>) redisUtils.get(ipAddress);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if (aidMap == null){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            aidMap = new HashMap<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					//        User user = userDAO.findOneById(voteRecord.getUid()); //获取用户
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if (aidMap.containsKey(aid)){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return true; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            aidMap.put(aid,ipAddress); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            redisUtils.set(ipAddress,aidMap,time); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * 单选 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param voteRecord | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @return | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    @Override | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public Result singleVote(String captcha, String captchaKey, VoteRecord voteRecord) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public Result singleVote(String captcha, String captchaKey, VoteRecord voteRecord, HttpServletRequest request) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        //1.根据aid 获取活动 ===》 根据活动获取类型
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Activity activity = activityDAO.findOneById(voteRecord.getAid());//获取活动
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -83,6 +120,15 @@ public class VoteRecordServiceImpl implements IVoteRecordService { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                redisUtils.del(Constants.User.KEY_CAPTCHA_CONTENT + captchaKey); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // ip验证
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if(activity.isIpRestrict()||true){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if(isInIpRestrictAddress( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    voteRecord.getAid(), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    request.getRemoteAddr(), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    24*60*60)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                return ResultFactory.buildFailResult("该IP已投过票"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        //4.如果是非周期性投票
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if(typeMap.get("cycleType").equals("false")){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            int userTotalVotes = voteRecordDAO.countByAidAndUid(activity.getId(),voteRecord.getUid()); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -126,7 +172,7 @@ public class VoteRecordServiceImpl implements IVoteRecordService { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    @Override | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public Result multipleVote(String captcha,String captchaKey,JSONObject voteData) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public Result multipleVote(String captcha,String captchaKey,JSONObject voteData ,HttpServletRequest request) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        log.info("voteData ==== > ",voteData); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        JSONObject jsonObject = voteData.getJSONObject("voteData"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        //根据活动id 获取活动
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -157,6 +203,15 @@ public class VoteRecordServiceImpl implements IVoteRecordService { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                redisUtils.del(Constants.User.KEY_CAPTCHA_CONTENT + captchaKey); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					//         ip验证
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					//        if(activity.isIpRestrict()){
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					//            if(isInIpRestrictAddress(
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					//                    aid,
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					//                    request.getRemoteAddr(),
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					//                    24*60*60)) {
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					//                return ResultFactory.buildFailResult("该IP已投过票");
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					//            }
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					//        }
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        //判断是否是周期性投票
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        //1.非周期性投票
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if(typeMap.get("cycleType").equals("false")){ | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |