message.repo.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. /**
  2. * 消息库。
  3. */
  4. "use strict";
  5. let configFile = require('../../include/commons').CONFIG_FILE;
  6. let config = require('../../resources/config/' + configFile);
  7. let log = require('../../util/log.js');
  8. let SessionRepo = require('../../repository/mysql/session.repo');
  9. let ImDb = require('../mysql/db/im.db');
  10. const DB_TABLES = require('../../include/commons').DB_TABLES;
  11. class MessageRepo {
  12. constructor() {
  13. }
  14. /**
  15. * 分页获取消息
  16. *
  17. * @param sessionId
  18. * @param page
  19. * @param size
  20. * @param messageType
  21. * @param handler
  22. */
  23. static findBySessionId(sessionId, page, size, messageType, handler) {
  24. page = page < 0 ? 0 : page;
  25. SessionRepo.findOne(sessionId, function (err, res) {
  26. if (!err) {
  27. if (res.length == 0) {
  28. handler(null, null);
  29. return;
  30. }
  31. let params = [];
  32. let type = res[0].type;
  33. let MessageTable = "";
  34. if (type == 1) {
  35. MessageTable = DB_TABLES.MucMessages;
  36. } else if (type == 2) {
  37. MessageTable = DB_TABLES.P2pMessages;
  38. } else {
  39. MessageTable = DB_TABLES.GroupMessages;
  40. }
  41. let where = " w.session_id = ? ";
  42. params.push(sessionId);
  43. if (messageType) {
  44. where += " and content_type=? ";
  45. params.push(messageType);
  46. }
  47. let sql = "select id, session_id, sender_id, sender_name, content_type, content, timestamp from " +
  48. MessageTable + " w where " + where + " order by w.id limit ?, ?";
  49. params.push(page);
  50. params.push(size);
  51. ImDb.execQuery({
  52. "sql": sql,
  53. "args": params,
  54. "handler": handler || function (err, res) {
  55. if(err) log.error(err);
  56. }
  57. });
  58. }
  59. });
  60. }
  61. /**
  62. * 保存消息
  63. *
  64. * @param message 消息对象
  65. * @param sessionType 会话类型,参见 SESSIONS_TYPES
  66. * @param messageId
  67. * @param sessionId
  68. * @param handler
  69. */
  70. static save(message, sessionType, messageId, sessionId, handler) {
  71. if(message.agent){
  72. let sql = "INSERT INTO " + DB_TABLES.sessionTypeToTableName(sessionType) +
  73. " (id, session_id, sender_id, sender_name,content_type, content, timestamp,business_type,agent) VALUES (?,?,?,?,?,?,?,?,?)";
  74. ImDb.execQuery({
  75. "sql": sql,
  76. "args": [messageId, sessionId, message.sender_id, message.sender_name, message.content_type, message.content, message.timestamp, message.business_type || 1,message.agent],
  77. "handler": handler || function (err, res) {
  78. if(err) log.error(err);
  79. }
  80. });
  81. }else {
  82. let sql = "INSERT INTO " + DB_TABLES.sessionTypeToTableName(sessionType) +
  83. " (id, session_id, sender_id, sender_name,content_type, content, timestamp,business_type) VALUES (?,?,?,?,?,?,?,?)";
  84. ImDb.execQuery({
  85. "sql": sql,
  86. "args": [messageId, sessionId, message.sender_id, message.sender_name, message.content_type, message.content, message.timestamp, message.business_type || 1],
  87. "handler": handler || function (err, res) {
  88. if(err) log.error(err);
  89. }
  90. });
  91. }
  92. }
  93. /**
  94. * 获取会话医生的id
  95. * @param sessionId
  96. * @param handler
  97. */
  98. static findLastMessage(sessionId,sessionType,handler){
  99. let sql =
  100. "SELECT s.content_type, s.content,s.agent FROM " + DB_TABLES.sessionTypeToTableName(sessionType) + " s " +
  101. "WHERE s.session_id = ? order by s.timestamp desc limit 1 ";
  102. ImDb.execQuery({
  103. "sql": sql,
  104. "args": [sessionId],
  105. "handler": handler
  106. });
  107. }
  108. }
  109. module.exports = MessageRepo;