message.repo.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  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/oracle/session.repo');
  9. let ImDb = require('../oracle/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 && 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 || type == 8) {
  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 sqlTemp = "SELECT rownum r,ID, SESSION_ID, SENDER_ID, SENDER_NAME, CONTENT_TYPE, CONTENT, TIMESTAMP FROM " +
  48. MessageTable + " W WHERE " + where + " ORDER BY W.ID ";
  49. let sql = "SELECT*FROM ( "+sqlTemp+" AND rownum<=?) WHERE r>=?"
  50. params.push(page);
  51. params.push(size);
  52. ImDb.execQuery({
  53. "sql": sql,
  54. "args": params,
  55. "handler": handler || function (err, res) {
  56. if(err) log.error(err);
  57. }
  58. });
  59. }
  60. });
  61. }
  62. /**
  63. * 保存消息
  64. *
  65. * @param message 消息对象
  66. * @param sessionType 会话类型,参见 SESSIONS_TYPES
  67. * @param messageId
  68. * @param sessionId
  69. * @param handler
  70. */
  71. static save(message, sessionType, messageId, sessionId, handler) {
  72. if(message.agent){
  73. let sql = "INSERT INTO " + DB_TABLES.sessionTypeToTableName(sessionType) +
  74. " (ID, SESSION_ID, SENDER_ID, SENDER_NAME,CONTENT_TYPE, CONTENT, TIMESTAMP,BUSINESS_TYPE,AGENT) VALUES (?,?,?,?,?,?,?,?,?)";
  75. ImDb.execQuery({
  76. "sql": sql,
  77. "args": [messageId, sessionId, message.sender_id, message.sender_name, message.content_type, message.content, message.timestamp, message.business_type || 1,message.agent],
  78. "handler": handler || function (err, res) {
  79. if(err) log.error(err);
  80. }
  81. });
  82. }else {
  83. let sql = "INSERT INTO " + DB_TABLES.sessionTypeToTableName(sessionType) +
  84. " (ID, SESSION_ID, SENDER_ID, SENDER_NAME,CONTENT_TYPE, CONTENT, TIMESTAMP,BUSINESS_TYPE) VALUES (?,?,?,?,?,?,?,?)";
  85. ImDb.execQuery({
  86. "sql": sql,
  87. "args": [messageId, sessionId, message.sender_id, message.sender_name, message.content_type, message.content, message.timestamp, message.business_type || 1],
  88. "handler": handler || function (err, res) {
  89. if(err) log.error(err);
  90. }
  91. });
  92. }
  93. }
  94. /**
  95. * 修改消息内容
  96. *
  97. * @param message 消息对象
  98. * @param sessionType 会话类型,参见 SESSIONS_TYPES
  99. * @param messageId
  100. * @param sessionId
  101. * @param handler
  102. */
  103. static updateMsgContent(sessionType, sessionId,messageId, content,handler) {
  104. let sql = "UPDATE " + DB_TABLES.sessionTypeToTableName(sessionType) + " SET CONTENT = ? , TIMESTAMP = ? WHERE ID = ? AND SESSION_ID = ?";
  105. log.info(sql);
  106. ImDb.execQuery({
  107. "sql": sql,
  108. "args": [content.toString(),new Date(), messageId,sessionId],
  109. "handler": handler || function (err, res) {
  110. if (err) log.error(err);
  111. }
  112. });
  113. }
  114. /**
  115. * 修改消息内容
  116. *
  117. * @param message 消息对象
  118. * @param sessionType 会话类型,参见 SESSIONS_TYPES
  119. * @param messageId
  120. * @param sessionId
  121. * @param handler
  122. */
  123. static selectOneMessage(sessionType,messageId,handler) {
  124. let sql = "SELECT * FROM " + DB_TABLES.sessionTypeToTableName(sessionType) + " WHERE ID = ?";
  125. log.info(sql);
  126. ImDb.execQuery({
  127. "sql": sql,
  128. "args": [messageId],
  129. "handler": handler || function (err, res) {
  130. if (err) log.error(err);
  131. }
  132. });
  133. }
  134. /**
  135. * 获取会话医生的id
  136. * @param sessionId
  137. * @param handler
  138. */
  139. static findLastMessage(sessionId,sessionType,handler){
  140. let sql =
  141. "SELECT S.CONTENT_TYPE, S.CONTENT,S.AGENT FROM " + DB_TABLES.sessionTypeToTableName(sessionType) + " S " +
  142. "WHERE S.SESSION_ID = ? ORDER BY S.TIMESTAMP DESC rownum=1 ";
  143. log.info("获取会话医生的id sql : " + sql);
  144. log.info("获取会话医生的id args : " + [sessionId]);
  145. ImDb.execQuery({
  146. "sql": sql,
  147. "args": [sessionId],
  148. "handler": handler
  149. });
  150. }
  151. /**
  152. * i健康未读消息数
  153. * @param user
  154. * @param handler
  155. */
  156. static getWlyyMessageCount(user, handler) {
  157. let sql = "SELECT COUNT(1) AS COUNT FROM "+DB_TABLES.WlyyMessage+" A WHERE A.HAS_READ= 1 AND A.RECEIVER = ?";
  158. ImDb.execQuery({
  159. "sql": sql,
  160. "args": [user],
  161. "handler": handler
  162. });
  163. }
  164. }
  165. module.exports = MessageRepo;