仿牛客社区——3.27发送私信

实现功能

发送私信

- 采用异步的方式发送私信。

- 发送成功后刷新私信列表。

设置已读

- 访问私信详情时, 将显示的私信设置为已读状态。

controller

//发送私信
	@RequestMapping(value = "/letter/send",method = RequestMethod.POST)
	@ResponseBody
	public String sendLetter(String toName,String content){
		//获取发送目标
		User target = userService.selectUserByName(toName);
		if(target==null){
			return CommunityUtil.getJsonString(1,"目标用户不存在!");
		}
		//获取发送的私信内容
		Message message=new Message();
		message.setContent(content); //发送的内容
		message.setToId(target.getId()); //收私信的id
		message.setFromId(hostHolder.getUser().getId()); //发私信的id
		message.setStatus(0); //私信状态
		message.setCreateTime(new Date()); //设置发送时间
		//设置会话id
		if(message.getFromId()< message.getToId()){
			message.setConversationId(message.getFromId()+"_"+ message.getToId());
		}else{
			message.setConversationId(message.getToId()+"_"+ message.getFromId());
		}
		messageService.addMessage(message);//将私信内容保存至数据库中
		return CommunityUtil.getJsonString(0);
	}

//查看私信详情
	@RequestMapping(value = "/letter/detail/{conversationId}",method = RequestMethod.GET)
	public String showLetterDetail(@PathVariable("conversationId") String conversationId,Model model,Page page){
		//显示分页信息
		page.setLimit(5);
		page.setPath("/letter/detail/" + conversationId);
		page.setRows(messageService.findLetterCount(conversationId));
		//会话列表
		List<Message> letterList=messageService.findLetters(conversationId, page.getOffset(), page.getLimit());

		List<Map<String,Object>> letters=new ArrayList<>();
		if(letterList!=null){
			for(Message message:letterList){
				Map<String,Object> map=new HashMap<>();
				map.put("letter",message);
				map.put("fromUser",userService.findUserById(message.getFromId()));
				letters.add(map);
			}
		}
		model.addAttribute("letters",letters);
		//获取私信目标
		User target = getTarget(conversationId);
		model.addAttribute("target",target);

		//更改私信状态
		List<Integer> ids = getLetterIds(letterList);
		if(!ids.isEmpty()){

			messageService.readMessage(ids);
		}

		return "/site/letter-detail";
	}

	//获取私信目标
	private User getTarget(String conversationId){
		String[] ids = conversationId.split("_");
		int id0=Integer.parseInt(ids[0]);
		int id1=Integer.parseInt(ids[1]);

		if(hostHolder.getUser().getId()==id0){
			return userService.findUserById(id1);
		}else{
			return userService.findUserById(id0);
		}
	}
	//获取未读私信id列表
	private List<Integer> getLetterIds(List<Message> letterList){
		List<Integer> ids=new ArrayList<>();
		if(!letterList.isEmpty()){
			for(Message message:letterList){
				if(hostHolder.getUser().getId()==message.getToId()&&message.getStatus()==0){
					ids.add(message.getId());
				}
			}
		}
		return ids;
	}

service

//发送私信
	public int addMessage(Message message){
		//过滤标签
		message.setContent(HtmlUtils.htmlEscape(message.getContent()));
		//敏感词过滤
		message.setContent(sensitiveFilter.filter(message.getContent()));
		return messageMapper.insertMessage(message);
	}

	//设置消息状态
	public int readMessage(List<Integer> ids){
		return messageMapper.updateStatus(ids,1);
	}

dao

//新增消息(发送私信
	int insertMessage(Message message);

	//更改消息状态  未读--->已读--->status:0
	int updateStatus(List<Integer> ids,int status);

mapper.xml


    <!-- int insertMessage(Message message); -->
    <insert id="insertMessage" parameterType="Message">
        insert into message(<include refid="insertFields"></include>)
        values(#{fromId},#{toId},#{conversationId},#{content},#{status},#{createTime})
    </insert>

    <!-- int updateStatus(List<Integer> ids,int status); -->
    <update id="updateStatus" >
        update message set status=#{status}
        where id in
        <foreach collection="ids" item="id" open="(" separator="," close=")">
            #{id}
        </foreach>
    </update>

letter.js

$(function(){
	$("#sendBtn").click(send_letter);
	$(".close").click(delete_msg);
});

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);
	    }
	);

}

function delete_msg() {
	// TODO 删除数据
	$(this).parents(".media").remove();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值