/** * 消息库。 */ "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/oracle/session.repo'); let ImDb = require('../oracle/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 && res.length == 0) { handler(null, null); return; } let params = []; let type = res[0].type; let MessageTable = ""; if (type == 1 || type == 8) { 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 sqlTemp = "SELECT rownum r,ID, SESSION_ID, SENDER_ID, SENDER_NAME, CONTENT_TYPE, CONTENT, TIMESTAMP FROM " + MessageTable + " W WHERE " + where + " ORDER BY W.ID "; let sql = "SELECT*FROM ( "+sqlTemp+" AND rownum<=?) WHERE r>=?" 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); } }); } } /** * 修改消息内容 * * @param message 消息对象 * @param sessionType 会话类型,参见 SESSIONS_TYPES * @param messageId * @param sessionId * @param handler */ static updateMsgContent(sessionType, sessionId,messageId, content,handler) { let sql = "UPDATE " + DB_TABLES.sessionTypeToTableName(sessionType) + " SET CONTENT = ? , TIMESTAMP = ? WHERE ID = ? AND SESSION_ID = ?"; log.info(sql); ImDb.execQuery({ "sql": sql, "args": [content.toString(),new Date(), messageId,sessionId], "handler": handler || function (err, res) { if (err) log.error(err); } }); } /** * 修改消息内容 * * @param message 消息对象 * @param sessionType 会话类型,参见 SESSIONS_TYPES * @param messageId * @param sessionId * @param handler */ static selectOneMessage(sessionType,messageId,handler) { let sql = "SELECT * FROM " + DB_TABLES.sessionTypeToTableName(sessionType) + " WHERE ID = ?"; log.info(sql); ImDb.execQuery({ "sql": sql, "args": [messageId], "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 rownum=1 "; log.info("获取会话医生的id sql : " + sql); log.info("获取会话医生的id args : " + [sessionId]); ImDb.execQuery({ "sql": sql, "args": [sessionId], "handler": handler }); } /** * i健康未读消息数 * @param user * @param handler */ static getWlyyMessageCount(user, handler) { let sql = "SELECT COUNT(1) AS COUNT FROM "+DB_TABLES.WlyyMessage+" A WHERE A.HAS_READ= 1 AND A.RECEIVER = ?"; ImDb.execQuery({ "sql": sql, "args": [user], "handler": handler }); } } module.exports = MessageRepo;