PraiseController.java
//取消点赞文章 @RequestMapping(value = "cancel",method = RequestMethod.POST,consumes = MediaType.APPLICATION_JSON_UTF8_VALUE) public BaseResponse praiseCancel(@RequestBody @Validated PraiseDto dto, BindingResult result){ String checkRes= ValidatorUtil.checkResult(result); if (StringUtils.isNotBlank(checkRes)){ return new BaseResponse(StatusCode.InvalidParams.getCode(),checkRes); } BaseResponse response=new BaseResponse(StatusCode.Success); try { response.setData(praiseService.praiseCancel(dto)); }catch (Exception e){ response=new BaseResponse(StatusCode.Fail.getCode(),e.getMessage()); } return response; }PraiseService.java
//取消点赞 @Transactional(rollbackFor = Exception.class) public Boolean praiseCancel(PraiseDto dto) throws Exception{ final String recordKey=Constant.RedisArticlePraiseUser+dto.getArticleId()+dto.getUserId(); //查看当前用户是否点赞过当前文章:只有点过赞,才能取消点赞 Boolean hasPraise=redisTemplate.hasKey(recordKey); if (hasPraise){ //移除掉db中的记录 int res=praiseMapper.cancelPraise(dto.getArticleId(),dto.getUserId()); if (res>0){ //移除缓存中:是否点赞的key redisTemplate.delete(recordKey); //更新文章的总点赞量 articleMapper.updatePraiseTotal(dto.getArticleId(),-1); //缓存取消点赞的相关信息 this.cachePraiseCancel(dto); } } return true; } //缓存取消点赞时的相关信息 private void cachePraiseCancel(final PraiseDto dto) throws Exception{ HashOperations<String,String,Set<Integer>> praiseHash=redisTemplate.opsForHash(); //记录点赞的明细记录(文章的维度):文章id -> 移除掉特定的用户id(dto.getUserId()) Set<Integer> uIds=praiseHash.get(Constant.RedisArticlePraiseHashKey,dto.getArticleId().toString()); if (uIds!=null && !uIds.isEmpty() && uIds.contains(dto.getUserId())){ uIds.remove(dto.getUserId()); praiseHash.put(Constant.RedisArticlePraiseHashKey,dto.getArticleId().toString(),uIds); } }
