springboot开发论坛学习 ---- 3.7+3.8

私信列表

私信列表

  • 查询当前用户的会话列表,每个会话只显示一条最新的私信

  • 支持分页显示

1.首先根据数据库来添加一个会话的实体类(Message.java)、2.再根据功能需求定义需要的方法(MessageMapper)、3.编辑对应的 xml文件(message-mapper.xml)、4.设计业务层用于接收参数来实现功能(MessageService)、5.在表现层定义请求的路径,设计功能实现等(MessageController)、6.完成前端页面的调整

@Mapper
public interface MessageMapper {
    //需要这么几个方法
    //1.查询 当前用户的会话列表 的方法,针对每个会话只返回一条新的私信
    List<Message> selectConversations(int userId, int offset, int limit);

    //2.查询 当前用户的会话数量 的方法(用于分页)
    int selectConversationCount(int userId);

    //3.查询某个会话所包含的私信列表(用于开发详情页面时需要用到这个方法)
    List<Message> selectLetters(String conversationId, int offset, int limit);

    //4.查询某个会话所包含的私信数量
    int selectLetterCount(String conversationId);

    //5.查询未读消息私信数量
    int selectLetterUnreadCount(int userId, String conversationId);

}

私信详情

  • 查询某个会话所包含的私信
    //3.查询某个会话所包含的私信列表(用于开发详情页面时需要用到这个方法)
    public List<Message> findLetters(String conversationId, int offset, int limit) {
        return messageMapper.selectLetters(conversationId, offset, limit);
    }

    //4.查询某个会话所包含的私信数量
    public int findLetterCount(String conversationId) {
        return messageMapper.selectLetterCount(conversationId);
    }

    //5.查询未读消息私信数量
    public int findLetterUnreadCount(int userId, String conversationId) {
        return messageMapper.selectLetterUnreadCount(userId, conversationId);
    }
  • 支持分页显示
    //2.查询 当前用户的会话数量 的方法(用于分页)
    public int findConversationCount(int userId) {
        return messageMapper.selectConversationCount(userId);
    }

发送私信

发送私信

  • 采用异步的方式发送私信
    // 新增一个消息
    @RequestMapping(path = "/letter/send", method = RequestMethod.POST)
    @ResponseBody
    public String sendLetter(String toName, String content) {
        //得到与我对话的目标
        User target = userService.findUserByName(toName);
        if (target == null) {
            return CommunityUtil.getJSONString(1, "目标用户不存在!");
        }

        Message message = new Message();
        message.setFromId(hostHolder.getUser().getId());
        message.setToId(target.getId());
        if (message.getFromId() < message.getToId()) {
            message.setConversationId(message.getFromId() + "_" + message.getToId());
        } else {
            message.setConversationId(message.getToId() + "_" + message.getFromId());
        }
        message.setContent(content);
        message.setCreateTime(new Date());
        messageService.addMessage(message);

        return CommunityUtil.getJSONString(0);
    }
  • 发送成功后刷新私信列表
//letter.js
function send_letter() {
    $("#sendModal").modal("hide");
    // 从页面上获取发送人和内容
    var toName = $("#recipient-name").val();
    var content = $("#message-text").val();
    $.post(
        CONTEXT_PATH + "/letter/send",
        {"toName": toName, "content": content},
        function (data) {
            data = $.parseJson(data);
            if (data.code == 0) {
                $("#hintBody").text("发送成功!");
            } else {
                $("#hintBody").text(data.msg);
            }

            $("#hintModal").modal("show");
            setTimeout(function () {
                $("#hintModal").modal("hide");
                location.reload();
            }, 2000);
        }
    );

    $("#hintModal").modal("show");
    setTimeout(function () {
        $("#hintModal").modal("hide");
        location.reload();
    }, 2000);
}

设置已读

  • 访问私信详情时,将显示的私信设置为已读状态。
//MessageService
    // 更改多个消息的状态(把未读的消息更改为已读) 的方法
    // 在这里我可以套用方法,把用户注册状态修改完成!!!
    public int readMessage(List<Integer> ids) {
        return messageMapper.updateStatus(ids, 1);
    }


//MessageController
//新增一个方法,作用为将未读的消息在读取之后改为已读
    private List<Integer> getLetterIds(List<Message> letterList) {
        List<Integer> ids = new ArrayList<>();

        if (letterList != null) {
            for (Message message : letterList) {
                // 判断当前用户是收信人还是发信人
                if (hostHolder.getUser().getId() == message.getToId() && message.getStatus() == 0) {
                    // 是接收者(收信人)而且消息处于未读状态
                    ids.add(message.getId());
                 }
            }
        }
        return ids;
    }
		// 这一部分为处理私信详情的代码块中
        //将私信列表中未读的消息改成已读状态
        List<Integer> ids = getLetterIds(letterList);
        if (!ids.isEmpty()) {
            messageService.readMessage(ids);
        }

        return "/site/letter-detail";
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值