mongodb父节点消息回复消息点赞及Redis标识是否重复点赞(springboot)

  //引入MongoDB依赖
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
     <version>2.0.1.RELEASE</version>
 </dependency>

//引入Redis依赖
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
     <version>2.0.1.RELEASE</version>
 </dependency>

Result类


public class Result {

    private boolean flag;//是否成功

    private Integer code;// 返回码

    private String message;//返回信息

    private Object data;// 返回数据

    public Result() {
    }

    public Result(boolean flag, Integer code, String message) {
        this.flag = flag;
        this.code = code;
        this.message = message;
    }

    public Result(boolean flag, Integer code, String message, Object data) {
        this.flag = flag;
        this.code = code;
        this.message = message;
        this.data = data;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}
StatusCode类
public class StatusCode {

    public static final int OK=20000;//成功

    public static final int ERROR =20001;//失败

    public static final int LOGINERROR =20002;//用户名或密码错误

    public static final int ACCESSERROR =20003;//权限不足

    public static final int REMOTEERROR =20004;//远程调用失败

    public static final int REPERROR =20005;//重复操作

}

 

 

SpitController层
  @Autowired
  private RedisTemplate redisTemplate;

 //回复消息   
 @RequestMapping(method = RequestMethod.POST)
 public Result save(@RequestBody Spit spit){
        spitService.save(spit);
        return new Result(true,StatusCode.OK,"保存成功");
    }
 //点赞
 @RequestMapping(value = "/thumbup/{spitid}",method = RequestMethod.PUT)
 public Result Thumbup(@PathVariable String spitid){
        //判斷用户是否已经点赞,用户ID暂且写死
        String userid="123";
              if (redisTemplate.opsForValue().get("thumbup_"+userid)!=null){
                  return new Result(false,StatusCode.REPERROR,"不能重复点赞");
              }
           spitService.thumbup(spitid);
           redisTemplate.opsForValue().set("thumbup_"+userid,1);
        return new Result(true,StatusCode.OK,"点赞成功");
    }

service层 

    @Autowired
    private MongoTemplate mongoTemplate;


    public void save(Spit spit){
        spit.set_id(idWorker.nextId()+"");
        spit.setPublishtime(new Date());//发布日期
        spit.setVisits(0);//浏览量
        spit.setShare(0);//分享数
        spit.setThumbup(0);//点赞数
        spit.setComment(0);//回复数
        spit.setState("1");//状态
        //如果当前添加的吐槽有父节点,那么回复的父节点的回复数+1
        if(spit.get_id()!=null && ! "".equals(spit.get_id())){
            Query query = new Query();
            query.addCriteria(Criteria.where("_id").is(spit.getParentid()));
            Update updata = new Update();
            updata.inc("comment",1);
            mongoTemplate.updateFirst(query,updata,"spit"); //spit mongodb吐槽表名
        }

        spitDao.save(spit);
    }

    public void thumbup(String spitid) {
        //方式一:效率低,点赞需要经过两次数据库
       /*  Spit spit = spitDao.findById(spitid).get();
           spit.setThumbup((spit.getThumbup() == null ? 0:spit.getThumbup())+1);
           spitDao.save(spit);*/

      //方式二:
        Update update = new Update();
        update.inc("thumbup",1);
        Query query = new Query();
        query.addCriteria(Criteria.where("_id").is(spitid));
        mongoTemplate.updateFirst(query,update,"spit");
      }

Guess you like

Origin blog.csdn.net/qq_39772439/article/details/121083502