一、环信即时云简介

网址:http://docs.easemob.com/doku.php?id=start:100serverintegration:30chatlog

本项目通过“安卓客户端”进行专家和用户的聊天功能,聊天内容以json格式保存在环信即时云数据库中。格式大致如下:



二、JavaBean设计:

因为环信中实际的聊天内容是三层嵌套的模式,所以需要建立三层级联的JavaBean来解析并保存数据,我这里设计的格式如下:


三、代码实现:

1、包结构:

项目使用 jeesite 框架,本质是 SpringMVC + Mybatis ,又融合了 Shiro 和 Activiti 的内容。可能因为 jeesite 架构的特殊性,所以需要按照 MVC模型建包,否则可能Spring 类扫描会失效,无法建立 service 层和 dao 层对象。包结构如下:


同时,项目中需要导入环信的jar包,因为jar包中包含了环信用户的一些配置特定的常量,在方法需要调用。否则,或显示没有权限下载数据。代码如下:

@Service
public class HXDownloadMessageService{
	private static final String APPKEY = Constants.APPKEY;

	/*
	 * 通过app的client_id和client_secret来获取app管理员token
	 */
	private static Credential credential = new ClientSecretCredential(Constants.APP_CLIENT_ID,
			Constants.APP_CLIENT_SECRET, Roles.USER_ROLE_APPADMIN);


	public void downloadHXMessage() {
		String senvenDayAgo = String.valueOf(System.currentTimeMillis() - 15 * 24 * 60 * 60 * 1000);
		ObjectNode queryStrNode1 = factory.objectNode();
		queryStrNode1.put("ql", "select * where timestamp>" + senvenDayAgo);
		queryStrNode1.put("limit", "1000");
		ObjectNode messages1 = getChatMessages(queryStrNode1);

		// 获取环信所有聊天记录
		System.out.println("================================================");
		System.out.println("环信所有聊天记录的json:" + messages1.toString());
		System.out.println("================================================");


		
		/*
		 * 获取环信数据库中对话实体 entities 的内容,保存在entities的JSONArray中
		 */
		JSONObject jsonObj = JSON.parseObject(messages1.toString());
		JSONArray entities = jsonObj.getJSONArray("entities");
		List<HXMessEntity> messEntities = JSON.parseArray(entities.toJSONString(), HXMessEntity.class);

	}
}

/**
 * 获取HX的json聊天消息
 * 
 * @param queryStrNode
 */
public static ObjectNode getChatMessages(ObjectNode queryStrNode) {

	ObjectNode objectNode = factory.objectNode();

	// check appKey format
	if (!HTTPClientUtils.match("^(?!-)[0-9a-zA-Z\\-]+#[0-9a-zA-Z]+", APPKEY)) {
		LOGGER.error("Bad format of Appkey: " + APPKEY);

		objectNode.put("message", "Bad format of Appkey");

		return objectNode;
	}

	try {

		String rest = "";
		if (null != queryStrNode && queryStrNode.get("ql") != null
					&& !StringUtils.isEmpty(queryStrNode.get("ql").asText())) {
			rest = "ql=" + java.net.URLEncoder.encode(queryStrNode.get("ql").asText(), "utf-8");
		}
		if (null != queryStrNode && queryStrNode.get("limit") != null
					&& !StringUtils.isEmpty(queryStrNode.get("limit").asText())) {
			rest = rest + "&limit=" + queryStrNode.get("limit").asText();
		}
		if (null != queryStrNode && queryStrNode.get("cursor") != null
					&& !StringUtils.isEmpty(queryStrNode.get("cursor").asText())) {
			rest = rest + "&cursor=" + queryStrNode.get("cursor").asText();
		}

		URL chatMessagesUrl = HTTPClientUtils.getURL(Constants.APPKEY.replace("#", "/") + "/chatmessages?" + rest);
		// System.out.println("访问网址url:"+chatMessagesUrl.toString());
		objectNode = HTTPClientUtils.sendHTTPRequest(chatMessagesUrl, credential, null, HTTPMethod.METHOD_GET);

	} catch (Exception e) {
		e.printStackTrace();
	}

	return objectNode;
}


通过 alibaba-fastjson.jar 解析json数据到 HXMessEntity 集合。





Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐