/** * 消息库。 */ "use strict"; let configFile = require('../../include/commons').CONFIG_FILE; let config = require('../../resources/config/' + configFile); let log = require('../../util/log.js'); let SessionRepo = require('../../repository/mysql/session.repo'); let ImDb = require('../mysql/db/im.db'); const DB_TABLES = require('../../include/commons').DB_TABLES; class MessageRepo { constructor() { } /** * 分页获取消息 * * @param sessionId * @param page * @param size * @param handler */ static findBySessionId(sessionId, page, size, messageType, handler) { if (page < 0) { page = 0; } SessionRepo.findOne(sessionId, function (err, res) { if (!err) { if (res.length == 0) { handler(null, null); return; } var params = []; let type = res[0].type; let MessageTable = ""; if (type == 1) { MessageTable = DB_TABLES.MucMessages; } else if (type == 2) { MessageTable = DB_TABLES.P2pMessages; } else { MessageTable = DB_TABLES.GroupMessages; } let where = " w.session_id = ? "; params.push(sessionId); if (messageType) { where += " and content_type=? "; params.push(messageType); } let sql = "select id, session_id, sender_id, sender_name, content_type, content, timestamp from " + MessageTable + " w where " + where + " order by w.id limit ?, ?"; params.push(page); params.push(size); ImDb.execQuery({ "sql": sql, "args": params, "handler": handler }); } }); } /** * 保存消息 * * @param message 消息对象 * @param sessionType 会话类型,1表示MUC会话,2表示P2P,3表示群会话,4表示临时讨论组 * @param messageId * @param sessionId */ static save(message, sessionType, messageId, sessionId, handler) { var sql = "INSERT INTO " + DB_TABLES.sessionTypeToTableName(sessionType) + " (id, session_id, sender_id, sender_name,content_type, content, timestamp,business_type) VALUES (?,?,?,?,?,?,?,?)"; ImDb.execQuery({ "sql": sql, "args": [messageId, sessionId, message.sender_id, message.sender_name, message.content_type, message.content, message.timestamp,message.business_type||1], "handler": handler || function (err, res) { log.info(res); } }); } } module.exports = MessageRepo;