message.repo.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. /**
  2. * 搜索功能。
  3. */
  4. "use strict";
  5. let ImDb = require('../mysql/db/im.db');
  6. let log = require('../../util/log.js');
  7. const IMTABLE = require('../../include/commons').IM_DB;
  8. class MessageRepo {
  9. constructor() {
  10. }
  11. /**
  12. * 根据sessionId获取对应的会话的信息列表mysql
  13. * @param sessionId
  14. */
  15. static getMessagesBySession(sessionId,handler){
  16. let session = new Sessions();
  17. session.getSessions(sessionId,function(err,res){
  18. if(err){
  19. return;
  20. }else{
  21. if(res.length==0){
  22. log.warn("session is not found!");
  23. return;
  24. }
  25. let type = res[0].type;
  26. let db ="";
  27. if(type==1){
  28. db = IMTABLE.MUCMSG;
  29. }else if(type==2){
  30. db = IMTABLE.P2PMSG;
  31. }else{
  32. db = IMTABLE.GROUPMSG;
  33. }
  34. let sql = "select * from "+db+" w where w.session_id = ? limit 0,"+config.sessionConfig.maxMessageCount;
  35. imDb.execQuery({
  36. "sql": sessionsql,
  37. "args": [sessionId],
  38. "handler": function (err, res) {
  39. if(err) {
  40. log.error("sql:"+sql+"data:sessionId:"+sessionId);
  41. }else{
  42. log.info("getMessagesBySession success by sessionId :"+sessionId);
  43. }
  44. handler(err,res);
  45. }
  46. })
  47. }
  48. })
  49. }
  50. /**
  51. * 分页获取消息MySQL
  52. * @param sessionId
  53. * @param page
  54. * @param pagesize
  55. */
  56. static getMessageByPage(sessionId,page,pagesize,handler){
  57. if(page>0){
  58. page =page*pagesize;
  59. }
  60. let session = new Sessions();
  61. session.getSessions(sessionId,function(err,res){
  62. if(err){
  63. return;
  64. }else{
  65. if(res.length==0){
  66. log.warn("session is not found!");
  67. return;
  68. }
  69. let type = res[0].type;
  70. let db ="";
  71. if(type==1){
  72. db = IMTABLE.MUCMSG;
  73. }else if(type==2){
  74. db = IMTABLE.P2PMSG;
  75. }else{
  76. db = IMTABLE.GROUPMSG;
  77. }
  78. let sql = "select * from "+db+" w where w.session_id = ? limit ?,?";
  79. imDb.execQuery({
  80. "sql": sessionsql,
  81. "args": [sessionId,page,pagesize],
  82. "handler": function (err, res) {
  83. if(err) {
  84. log.error("sql:"+sql+"data:sessionId:"+sessionId);
  85. }else{
  86. log.info("getMessagesBySession success by sessionId :"+sessionId);
  87. }
  88. handler(err,res);
  89. }
  90. })
  91. }
  92. })
  93. }
  94. /**
  95. * 保存Message 到mysql
  96. * @param messages 消息对象
  97. * @type type 会话类型,1表示MUC会话,2表示P2P,3表示群会话,4表示临时讨论组
  98. */
  99. static saveMessageForMysql(messages,type,messageid,sessionId){
  100. 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 (?,?,?,?,?,?,?) ";
  101. imDb.execQuery({
  102. "sql": sql,
  103. "args": [messageid,sessionId,messages.senderId,messages.senderName,messages.contentType,messages.content,messages.timestamp],
  104. "handler": function (err, res) {
  105. if(err) {
  106. log.error("sql:"+sql+",error:"+err+",data:"+JSON.stringify(messages)+",messageid:"+messageid+",sessionId:"+sessionId);
  107. }else{
  108. log.info("save message to mysql is success by session :"+sessionId);
  109. }
  110. }
  111. });
  112. }
  113. }
  114. module.exports = MessageRepo;