|
@ -2,6 +2,7 @@
|
|
|
|
|
|
let ImDb = require('../mysql/db/im.db');
|
|
|
let async = require("async");
|
|
|
var ObjectUtil = require("../../util/object.util.js");
|
|
|
|
|
|
const DB_TABLES = require('../../include/commons').DB_TABLES;
|
|
|
|
|
@ -18,11 +19,12 @@ class SearchRepo {
|
|
|
static findTopicEndedSessionIdList(userId, handler) {
|
|
|
let sql = "SELECT s.id " +
|
|
|
"FROM sessions s, topics t, participants p " +
|
|
|
"WHERE p.participant_id = '' AND p.session_id = s.id AND s.id = t.session_id AND t.end_message_id IS NOT NULL AND s.`type` IN (1) " +
|
|
|
"UNION " +
|
|
|
"WHERE p.participant_id = ? AND p.session_id = s.id AND s.id = t.session_id AND t.end_message_id IS NOT NULL AND s.`type` IN (1) " +
|
|
|
" UNION " +
|
|
|
"SELECT s.id " +
|
|
|
"FROM sessions s, participants p " +
|
|
|
"WHERE p.participant_id = '' AND p.session_id = s.id AND s.`type` IN (2, 3)";
|
|
|
"WHERE p.participant_id = ? AND p.session_id = s.id AND s.`type` IN (2, 3)";
|
|
|
|
|
|
ImDb.execQuery({
|
|
|
sql: sql,
|
|
|
args: [userId, userId],
|
|
@ -68,6 +70,10 @@ class SearchRepo {
|
|
|
SearchRepo.searchMessages(sessionIdList, keyword, 0, 3, function (err, res) {
|
|
|
if (err) return handler(err, null);
|
|
|
|
|
|
res.forEach(function (message) {
|
|
|
message.timestamp = ObjectUtil.timestampToLong(message.timestamp);
|
|
|
});
|
|
|
|
|
|
data.messages = res;
|
|
|
|
|
|
handler(null, data);
|
|
@ -87,8 +93,8 @@ class SearchRepo {
|
|
|
* @param handler
|
|
|
*/
|
|
|
static searchUser(sessionIdList, keyword, userTable, page, size, handler) {
|
|
|
let sql = "select u.id, u.name, u.sex, u.avatar from sessions s, participants p, " + userTable +
|
|
|
" u where s.id in (?) AND s.id = p.session_id AND p.participant_id = u.id and u.name like ? limit ?, ?";
|
|
|
let sql = "SELECT u.id, u.name, u.sex, u.avatar FROM sessions s, participants p, " + userTable +
|
|
|
" u WHERE s.id in (?) AND s.id = p.session_id AND p.participant_id = u.id AND u.name like ? limit ?, ?";
|
|
|
|
|
|
keyword = '%' + keyword + '%';
|
|
|
ImDb.execQuery({
|
|
@ -102,7 +108,11 @@ class SearchRepo {
|
|
|
* 会话搜索
|
|
|
*/
|
|
|
static searchSessions(sessionIdList, keyword, page, size, handler) {
|
|
|
let sql = "select s.id, s.name, s.type, s.create_date, s.business_type from sessions s where s.id in (?) and s.name like ? limit ?, ? ";
|
|
|
if(sessionIdList.length == 0){
|
|
|
return handler(null, []);
|
|
|
}
|
|
|
|
|
|
let sql = "SELECT s.id, s.name, s.type, s.create_date, s.business_type FROM sessions s WHERE s.id in (?) AND s.name LIKE ? LIMIT ?, ? ";
|
|
|
|
|
|
keyword = '%' + keyword + '%';
|
|
|
ImDb.execQuery({
|
|
@ -116,17 +126,24 @@ class SearchRepo {
|
|
|
* 消息搜索
|
|
|
*/
|
|
|
static searchMessages(sessionIdList, keyword, page, size, handler) {
|
|
|
let sql = "SELECT s.id, s.name, s.type, s.create_date, s.business_type, m.sender_name, m.content " +
|
|
|
let sql = "SELECT * FROM(" +
|
|
|
"SELECT s.id session_id, s.name session_name, s.type session_type, s.business_type session_business_type, m.id message_id, m.sender_id, m.sender_name, m.timestamp, m.content " +
|
|
|
"FROM sessions s, muc_messages m " +
|
|
|
"WHERE s.id IN (?) AND s.id = m.session_id AND s.`type` = 1 AND m.content_type = 1 AND m.content LIKE ? GROUP BY s.id" +
|
|
|
" UNION " +
|
|
|
"SELECT s.id session_id, s.name session_name, s.type session_type, s.business_type session_business_type, m.id message_id, m.sender_id, m.sender_name, m.timestamp, m.content " +
|
|
|
"FROM sessions s, p2p_messages m " +
|
|
|
"WHERE s.id IN (?) AND s.id = m.session_id AND s.`type` IN (1,2,3) AND m.content_type = 1 AND m.content LIKE ? " +
|
|
|
"GROUP BY s.id " +
|
|
|
"ORDER BY s.last_message_time " +
|
|
|
"LIMIT ?, ?";
|
|
|
"WHERE s.id IN (?) AND s.id = m.session_id AND s.`type` = 2 AND m.content_type = 1 AND m.content LIKE ? GROUP BY s.id" +
|
|
|
" UNION " +
|
|
|
"SELECT s.id session_id, s.name session_name, s.type session_type, s.business_type session_business_type, m.id message_id, m.sender_id, m.sender_name, m.timestamp, m.content " +
|
|
|
"FROM sessions s, group_messages m " +
|
|
|
"WHERE s.id IN (?) AND s.id = m.session_id AND s.`type` = 3 AND m.content_type = 1 AND m.content LIKE ? GROUP BY s.id) X " +
|
|
|
"ORDER BY X.timestamp";
|
|
|
|
|
|
keyword = '%' + keyword + '%';
|
|
|
ImDb.execQuery({
|
|
|
sql: sql,
|
|
|
args: [sessionIdList, keyword, page * size, size],
|
|
|
args: [sessionIdList, keyword, sessionIdList, keyword, sessionIdList, keyword, page * size, size],
|
|
|
handler: handler
|
|
|
});
|
|
|
}
|