123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- /**
- * 消息库。
- */
- "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;
|