/** * 消息库。 */ "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 messageType * @param handler */ static findBySessionId(sessionId, page, size, messageType, handler) { page = page < 0 ? 0 : page; SessionRepo.findOne(sessionId, function (err, res) { if (!err) { if (res.length == 0) { handler(null, null); return; } let 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 || function (err, res) { if(err) log.error(err); } }); } }); } /** * 保存消息 * * @param message 消息对象 * @param sessionType 会话类型,参见 SESSIONS_TYPES * @param messageId * @param sessionId * @param handler */ static save(message, sessionType, messageId, sessionId, handler) { if(message.agent){ let sql = "INSERT INTO " + DB_TABLES.sessionTypeToTableName(sessionType) + " (id, session_id, sender_id, sender_name,content_type, content, timestamp,business_type,agent) 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,message.agent], "handler": handler || function (err, res) { if(err) log.error(err); } }); }else { let 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) { if(err) log.error(err); } }); } } /** * 获取会话医生的id * @param sessionId * @param handler */ static findLastMessage(sessionId,sessionType,handler){ let sql = "SELECT s.content_type, s.content,s.agent FROM " + DB_TABLES.sessionTypeToTableName(sessionType) + " s " + "WHERE s.session_id = ? order by s.timestamp desc limit 1 "; ImDb.execQuery({ "sql": sql, "args": [sessionId], "handler": handler }); } } module.exports = MessageRepo;