/** * 消息模型。 */ "use strict"; let RedisClient = require('../../repository/redis/redis.client.js'); let redisClient = RedisClient.redisClient(); let redis = redisClient.connection; let RedisModel = require('./../redis.model.js'); let modelUtil = require('../../util/modelUtil'); var imDb = require('../../repository/mysql/db/im.db'); let log = require('../../util/log.js'); let Sessions = require('../sessions/sessions'); let configFile = require('../../include/commons').CONFIG_FILE; let config = require('../../resources/config/' + configFile); const RedisKey = require('../../include/commons').REDIS_KEYS; const IMTABLE = require('../../include/commons').IM_DB; class Messages extends RedisModel { constructor() { super(); } /** * 根据topicId获取对应的议题的信息列表 * @param topicId */ getMessagesByTopicId(topicId){ } /** * 分页 * 根据topicId获取对应的议题的成员信息 * @param topicId */ getMessagesByTopicIdForPage(topicId,page,pagesize){ } /** * 根据sessionId获取对应的会话的信息列表mysql * @param sessionId */ getMessagesBySession(sessionId,handler){ let session = new Sessions(); session.getSessions(sessionId,function(err,res){ if(err){ return; }else{ if(res.length==0){ log.warn("session is not found!"); return; } let type = res[0].type; let db =""; if(type==1){ db = IMTABLE.MUCMSG; }else if(type==2){ db = IMTABLE.P2PMSG; }else{ db = IMTABLE.GROUPMSG; } let sql = "select * from "+db+" w where w.session_id = ? limit 0,"+config.sessionConfig.maxMessageCount; imDb.execQuery({ "sql": sessionsql, "args": [sessionId], "handler": function (err, res) { if(err) { log.error("sql:"+sql+"data:sessionId:"+sessionId); }else{ log.info("getMessagesBySession success by sessionId :"+sessionId); } handler(err,res); } }) } }) } /** * 分页获取消息MySQL * @param sessionId * @param page * @param pagesize */ getMessageByPage(sessionId,page,pagesize,handler){ if(page>0){ page =page*pagesize; } let session = new Sessions(); session.getSessions(sessionId,function(err,res){ if(err){ return; }else{ if(res.length==0){ log.warn("session is not found!"); return; } let type = res[0].type; let db =""; if(type==1){ db = IMTABLE.MUCMSG; }else if(type==2){ db = IMTABLE.P2PMSG; }else{ db = IMTABLE.GROUPMSG; } let sql = "select * from "+db+" w where w.session_id = ? limit ?,?"; imDb.execQuery({ "sql": sessionsql, "args": [sessionId,page,pagesize], "handler": function (err, res) { if(err) { log.error("sql:"+sql+"data:sessionId:"+sessionId); }else{ log.info("getMessagesBySession success by sessionId :"+sessionId); } handler(err,res); } }) } }) } /** * 根据消息ID获取单条消息 * @param messageId */ getMessagesByid(messageId){ } saveMessageForRedis(message_id,sessionId,message){ let message_key = super.makeRedisKey(RedisKey.Messages,sessionId); let message_timestamp_key = super.makeRedisKey(RedisKey.MessagesTimestamp,sessionId); redis.hsetAsync(message_key, message_id, JSON.stringify(message)).then(function (res) { log.info("success save redis message by session :"+sessionId); //保存message_timestamp_key redis return redis.zaddAsync(message_timestamp_key, message.timestamp.getTime(), message_id); }); } /** * 保存Message 到mysql * @param messages 消息对象 * @type type 会话类型,1表示MUC会话,2表示P2P,3表示群会话,4表示临时讨论组 */ saveMessageForMysql(messages,type,messageid,sessionId){ var sql = "INSERT INTO "+(type==1?IMTABLE.MUCMSG:type==2?IMTABLE.P2PMSG:IMTABLE.GROUPMSG)+" (id, session_id, sender_id, sender_name,content_type, content, timestamp) VALUES (?,?,?,?,?,?,?) "; imDb.execQuery({ "sql": sql, "args": [messageid,sessionId,messages.senderId,messages.senderName,messages.contentType,messages.content,messages.timestamp], "handler": function (err, res) { if(err) { log.error("sql:"+sql+",error:"+err+",data:"+JSON.stringify(messages)+",messageid:"+messageid+",sessionId:"+sessionId); }else{ log.info("save message to mysql is success by session :"+sessionId); } } }); } } // Expose class module.exports = Messages;