如何阻止自己的通知

时间:2020-09-02 04:14:34

标签: java spring

我正在尝试学习如何从可用资源中建立论坛。但是,我的问题是回复评论和回答问题的功能。当我回答我的问题或评论时,通知我“ vkhacbao回答了vkhacbao的问题”(vkhacbao是我登录的帐户)。如何阻止或设置条件,以便在我发表评论时不会发送给自己。请帮助我,我尝试了3天,但都没有成功。非常感谢 代码:

CommentController.java

@Controller
public class CommentController {
@Resource
private UserMapper userMapper;
@Resource
private CommentMapper commentMapper;
@Resource
private QuestionMapper questionMapper;
@Resource
private NotificationMapper notificationMapper;

@ResponseBody
@RequestMapping(value = "/comment",method = RequestMethod.POST)
public Object post(@RequestBody CommentCreateDto commentCreateDto,
                   HttpServletRequest request){
    //把User写进session
    Cookie[] cookies = request.getCookies();
    if (cookies == null) {
        return "login";
    }
    User user = null;
    for (Cookie cookie : cookies) {
        if (cookie.getName().equals("token")) {
            String token = cookie.getValue();
            user = userMapper.findBytoken(token);
            if (user != null) {
                request.getSession().setAttribute("user", user);
                //获取未读的消息数量
                int unreadnum=notificationMapper.getunreadcount(user.getId());
                request.getSession().setAttribute("unreadnum",unreadnum);
            }
            break;
        }
    }
    //把评论插入数据库
    Comment comment=new Comment();
    comment.setParent_id(commentCreateDto.getParent_id());
    comment.setContent(commentCreateDto.getContent());
    comment.setType(commentCreateDto.getType());
    comment.setCreatetime(System.currentTimeMillis());
    comment.setCommentor(user.getId());
    commentMapper.insert(comment);

    if (commentCreateDto.getType()==2){
        //把回复评论的通知插入数据库
        Notification notification=new Notification();

        notification.setNotifier(comment.getCommentor());

        Comment comment2=commentMapper.getparentbyid(commentCreateDto.getParent_id());
        notification.setReceiver(comment2.getCommentor());
        notification.setOuterid(commentCreateDto.getParent_id());
        notification.setType(notificationEnum.NOTIFICATION_COMMENT.getType());
        notification.setCreatetime(System.currentTimeMillis());
        notification.setStatus(NotificationStatusEnum.UNREAD.getStatus());
        notificationMapper.inserts(notification);

        //增加评论数
        commentMapper.updatecommentcount(commentCreateDto.getParent_id());
        
    }
        else {
        //把回复问题的通知插入数据库
        Question question=questionMapper.getbyId(commentCreateDto.getParent_id());
        Notification notification=new Notification();
        notification.setNotifier(user.getId());
        notification.setReceiver(question.getCreateid());
        notification.setOuterid(commentCreateDto.getParent_id());
        notification.setType(notificationEnum.NOTIFICATION_QUESTION.getType());
        notification.setCreatetime(System.currentTimeMillis());
        notification.setStatus(NotificationStatusEnum.UNREAD.getStatus());
        notificationMapper.inserts(notification);
        //增加问题回复量
        questionMapper.updatecomment(commentCreateDto.getParent_id());
    }
    ResultDto resultDto=new ResultDto();
    return resultDto.success();
}

@ResponseBody
@RequestMapping(value = "/comment/{id}",method = RequestMethod.GET)
public ResultDto<List<CommentDto>> comments(@PathVariable(name = "id") int id,
                                            HttpServletRequest request){
    //查找type=2,即是回复评论的评论
    List<Comment> comments = commentMapper.getCommentByid(id,2);
    List<CommentDto> commentDto=new ArrayList<>();
    //找到User
    Cookie[] cookies = request.getCookies();
    User user = null;
    for (Cookie cookie : cookies) {
        if (cookie.getName().equals("token")) {
            String token = cookie.getValue();
            user = userMapper.findBytoken(token);
            break;
        }
    }
    //把二级评论和对应的User写进每个CommentDto集合中
    for (Comment comment:comments){
        CommentDto dto=new CommentDto();
        BeanUtils.copyProperties(comment,dto);
        dto.setUser(user);
        commentDto.add(dto);
    }
    ResultDto resultDto=new ResultDto();
    //返回数据给前端
    return resultDto.success(commentDto);
}

 }

NotificationController.java

@Controller
 public class NotificationController {

@Resource
private NotificationMapper notificationMapper;
@Resource
private CommentMapper commentMapper;

@GetMapping("/notification/{action}")
public String notification(@PathVariable("action")int id,
                           HttpServletRequest request){
    //将通知设置为已读
    notificationMapper.updatestatus(id);
    //获取type,检验是回复评论还是回复问题
    int type=notificationMapper.gettypebyid(id);
    int outerid=notificationMapper.getouteridbyid(id);
    int questionid;
    if(type== notificationEnum.NOTIFICATION_QUESTION.getType()){
        questionid=outerid;
    }else {
        questionid=commentMapper.getparentidbyid(id);
    }
    return "redirect:/question/"+questionid;
}
 }

QuestionController.java

@Controller
 public class QuestionController {

@Resource
private QuestionService questionService;
@Resource
private UserMapper userMapper;
@Resource
private CommentService commentService;
@Resource
private NotificationMapper notificationMapper;

@GetMapping("/question/{id}")
public String question(@PathVariable(name = "id")int id,
                       Model model,
                       HttpServletRequest request){
    //查找cookies,观察是否有token存在
    Cookie[] cookies = request.getCookies();
    if (cookies == null) {
        return "login";
    }
    User user = null;
    for (Cookie cookie : cookies) {
        if (cookie.getName().equals("token")) {
            String token = cookie.getValue();
            user = userMapper.findBytoken(token);
            if (user != null) {
                request.getSession().setAttribute("user", user);
                //获取未读的消息数量
                int unreadnum=notificationMapper.getunreadcount(user.getId());
                request.getSession().setAttribute("unreadnum",unreadnum);
            }
            break;
        }
    }
    Questiondto questiondto=questionService.getbyid(id);
    //增加阅读数
    questionService.increaseview(id);
    model.addAttribute("questionDto",questiondto);
    //展示回复数据
    List<CommentDto> comments=commentService.getByid(id);
    model.addAttribute("comments",comments);
    //相关问题
    String[] tags=questiondto.getTag().split(",");
    StringBuilder msg=new StringBuilder();
    for (String tag:tags){
        msg.append(tag);
        msg.append("|");
    }
    String result=msg.substring(0,msg.length()-1);
    List<Question> relativequestion =questionService.getbytag(id,result);
    model.addAttribute("relativequestion",relativequestion);

    return "question";
}
}

1 个答案:

答案 0 :(得分:0)

假设原始消息的所有者和评论者在CommentController类中,则为本节

if (commentCreateDto.getType()==2){
    Comment comment2=commentMapper.getparentbyid(commentCreateDto.getParent_id());
       
    if ( !comment2.getCommentor().equals(comment.getCommentor()) ) {
        Notification notification=new Notification();
        notification.setNotifier(comment.getCommentor());
        notification.setReceiver(comment2.getCommentor());
        notification.setOuterid(commentCreateDto.getParent_id());
        notification.setType(notificationEnum.NOTIFICATION_COMMENT.getType());
        notification.setCreatetime(System.currentTimeMillis());
        notification.setStatus(NotificationStatusEnum.UNREAD.getStatus());
        notificationMapper.inserts(notification);
        commentMapper.updatecommentcount(commentCreateDto.getParent_id());
    }
}

不幸的是,如果这对您不起作用,则您需要了解有关语言和代码的更多信息,以确定更改的位置。