|
@ -7,6 +7,8 @@ let vsprintf = require("sprintf-js").vsprintf;
|
|
|
|
|
|
const DB_TABLES = require('../../include/commons').DB_TABLES;
|
|
|
|
|
|
let oracledbUtil = require('../../util/oracledb.util');
|
|
|
|
|
|
class SearchRepo {
|
|
|
constructor() {
|
|
|
}
|
|
@ -18,15 +20,15 @@ class SearchRepo {
|
|
|
* @param handler
|
|
|
*/
|
|
|
static findTopicEndedSessionIdList(userId, handler) {
|
|
|
let sql = "SELECT S.ID " +
|
|
|
let sql = "SELECT S.\"ID\" as \"id\" " +
|
|
|
"FROM sessions s, topics t, participants p " +
|
|
|
"FROM SESSIONS S, TOPICS T, PARTICIPANTS P " +
|
|
|
"WHERE p.participant_id = :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,2,8) " +
|
|
|
" UNION " +
|
|
|
"SELECT S.ID " +
|
|
|
"SELECT S.\"ID\" as \"id\" " +
|
|
|
"FROM SESSIONS S, PARTICIPANTS P " +
|
|
|
"WHERE P.PARTICIPANT_ID = ? AND P.SESSION_ID = S.ID AND S.`TYPE` IN (2, 3, 4)";
|
|
|
"WHERE P.PARTICIPANT_ID = :PARTICIPANT_ID AND P.SESSION_ID = S.ID AND S.`TYPE` IN (2, 3, 4)";
|
|
|
|
|
|
ImDb.execQuery({
|
|
|
oracledbUtil.query({
|
|
|
sql: sql,
|
|
|
args: [userId, userId],
|
|
|
handler: handler
|
|
@ -40,16 +42,16 @@ class SearchRepo {
|
|
|
* @param handler
|
|
|
*/
|
|
|
static findTopicActiveSessionIdList(userId, handler) {
|
|
|
let sql = "SELECT S.ID " +
|
|
|
let sql = "SELECT S.\"ID\" as \"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 NULL AND S.`TYPE` IN (1,2,8) " +
|
|
|
"WHERE P.PARTICIPANT_ID = :PARTICIPANT_ID AND P.SESSION_ID = S.ID AND S.ID = T.SESSION_ID AND T.END_MESSAGE_ID IS NULL AND S.`TYPE` IN (1,2,8) " +
|
|
|
" UNION " +
|
|
|
"SELECT S.ID " +
|
|
|
"SELECT S.\"ID\" as \"id\" " +
|
|
|
"FROM SESSIONS S, PARTICIPANTS P " +
|
|
|
"WHERE P.PARTICIPANT_ID = ? AND P.SESSION_ID = S.ID AND S.`TYPE` IN (2,3,4) AND S.ID NOT IN(" +
|
|
|
" SELECT DISTINCT P1.SESSION_ID FROM PARTICIPANTS P1 ,TOPICS T WHERE P1.PARTICIPANT_ID = ? AND T.SESSION_ID = P1.SESSION_ID " +
|
|
|
"WHERE P.PARTICIPANT_ID = :PARTICIPANT_ID AND P.SESSION_ID = S.ID AND S.`TYPE` IN (2,3,4) AND S.ID NOT IN(" +
|
|
|
" SELECT DISTINCT P1.SESSION_ID FROM PARTICIPANTS P1 ,TOPICS T WHERE P1.PARTICIPANT_ID = :PARTICIPANT_ID AND T.SESSION_ID = P1.SESSION_ID " +
|
|
|
") ";
|
|
|
ImDb.execQuery({
|
|
|
oracledbUtil.query({
|
|
|
sql: sql,
|
|
|
args: [userId, userId,userId],
|
|
|
handler: handler
|
|
@ -110,9 +112,9 @@ class SearchRepo {
|
|
|
* @param handler
|
|
|
*/
|
|
|
static searchUser(sessionIdList,userId, keyword, userTable, page, size, handler) {
|
|
|
let sql = "SELECT*FROM ( SELECT DISTINCT rownum r,U.NAME USER_NAME,S.ID SESSION_ID, S.NAME SESSION_NAME, S.TYPE SESSION_TYPE, S.BUSINESS_TYPE, U.ID USER_ID,U.SEX, U.BIRTHDATE, U.AVATAR,U.IDCARD %S " +
|
|
|
let sql = "SELECT*FROM ( SELECT DISTINCT rownum r,U.\"NAME\" AS \"user_name\",S.\"ID\" AS \"session_id\",S.\"NAME\" AS \"session_name\",S.\"TYPE\" AS \"session_type\",S.\"BUSINESS_TYPE\" AS \"business_type\",U.\"ID\" AS \"user_id\",U.\"SEX\" AS \"sex\",U.\"BIRTHDATE\" AS \"birthdate\",U.\"AVATAR\" AS \"avatar\",U.\"IDCARD\" AS \"idcard\" %s " +
|
|
|
" FROM PARTICIPANTS P, " + userTable +
|
|
|
" U,SESSIONS S WHERE S.ID IN (?) AND S.ID = P.SESSION_ID AND P.PARTICIPANT_ID = U.ID AND P.PARTICIPANT_ID<>? AND (U.NAME LIKE ? OR U.IDCARD LIKE ?) ";
|
|
|
" U,SESSIONS S WHERE S.ID IN ('"+sessionIdList+"') AND S.ID = P.SESSION_ID AND P.PARTICIPANT_ID = U.ID AND P.PARTICIPANT_ID<>:PARTICIPANT_ID AND (U.NAME LIKE :NAME OR U.IDCARD LIKE :IDCARD) ";
|
|
|
|
|
|
if (userTable === DB_TABLES.Doctors) {
|
|
|
sql += " AND S.TYPE = 2 AND S.BUSINESS_TYPE = 1 ";
|
|
@ -120,13 +122,13 @@ class SearchRepo {
|
|
|
sql += " AND S.TYPE IN (1,2,8) AND S.BUSINESS_TYPE = 2 ";
|
|
|
}
|
|
|
|
|
|
sql += " AND rownum<=?) WHERE r>=?";
|
|
|
sql += " AND rownum<="+size+") WHERE r>="+page * size+" ";
|
|
|
sql = vsprintf(sql, [userTable == DB_TABLES.Doctors ? ', HOSPITAL_NAME' : '']);
|
|
|
|
|
|
keyword = '%' + keyword + '%';
|
|
|
ImDb.execQuery({
|
|
|
oracledbUtil.query({
|
|
|
sql: sql,
|
|
|
args: [sessionIdList,userId, keyword,keyword, size,page * size],
|
|
|
args: [userId, keyword,keyword],
|
|
|
handler: handler
|
|
|
});
|
|
|
}
|
|
@ -140,17 +142,17 @@ class SearchRepo {
|
|
|
}
|
|
|
|
|
|
let sqlTemp = "SELECT rownum r,* FROM(" +
|
|
|
"SELECT S.ID, S.NAME, S.TYPE, S.CREATE_DATE, S.BUSINESS_TYPE,GROUP_CONCAT(U. NAME) AS PARTICIPANT_NAME " +
|
|
|
"SELECT S.\"ID\" AS \"id\",S.\"NAME\" AS \"name\",S.\"TYPE\" AS \"type\",S.\"CREATE_DATE\" AS \"create_date\",S.\"BUSINESS_TYPE\" AS \"business_type\",GROUP_CONCAT(U.NAME) AS \"participant_name\" " +
|
|
|
"FROM SESSIONS S, DOCTORS U ,PARTICIPANTS P " +
|
|
|
"WHERE S.ID IN (?) AND S.TYPE IN (3,4) AND S.ID = P.SESSION_ID AND P.PARTICIPANT_ID = U.ID AND P.PARTICIPANT_ID<>? AND (U.NAME LIKE ? OR S.NAME LIKE ?) GROUP BY S.ID " +
|
|
|
"WHERE S.ID IN ('"+sessionIdList+"') AND S.TYPE IN (3,4) AND S.ID = P.SESSION_ID AND P.PARTICIPANT_ID = U.ID AND P.PARTICIPANT_ID<>:PARTICIPANT_ID AND (U.NAME LIKE :NAME OR S.NAME LIKE :NAME) GROUP BY S.ID " +
|
|
|
") X ";
|
|
|
|
|
|
let sql = "SELECT*FROM ( "+sqlTemp+" AND rownum<=?) WHERE r>=?"
|
|
|
let sql = "SELECT*FROM ( "+sqlTemp+" AND rownum<="+size+") WHERE r>="+page * size+" "
|
|
|
|
|
|
keyword = '%' + keyword + '%';
|
|
|
ImDb.execQuery({
|
|
|
oracledbUtil.query({
|
|
|
sql: sql,
|
|
|
args: [sessionIdList,userId, keyword,keyword, size,page * size],
|
|
|
args: [userId, keyword,keyword],
|
|
|
handler: handler
|
|
|
});
|
|
|
}
|
|
@ -160,24 +162,24 @@ class SearchRepo {
|
|
|
*/
|
|
|
static searchMessages(sessionIdList,userId, keyword, page, size, handler) {
|
|
|
let sqlTemp = "SELECT rownum r, * 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 " +
|
|
|
"SELECT S.\"ID\" AS \"session_id\",S.\"NAME\" AS \"session_name\",S.\"TYPE\" AS \"SESSION_TYPE\",S.\"BUSINESS_TYPE\" AS \"session_type\",M.\"ID\" AS \"message_id\",M.\"SENDER_ID\" AS \"sender_id\",M.\"SENDER_NAME\" AS \"sender_name\",M.\"TIMESTAMP\" AS \"timestamp\",M.\"CONTENT\" AS \"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 ? " +
|
|
|
"WHERE S.ID IN ('"+sessionIdList+"') AND S.ID = M.SESSION_ID AND S.`TYPE` = 1 AND M.CONTENT_TYPE = 1 AND M.CONTENT LIKE :CONTENT " +
|
|
|
" 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 " +
|
|
|
"SELECT S.\"ID\" AS \"session_id\",S.\"NAME\" AS \"session_name\",S.\"TYPE\" AS \"SESSION_TYPE\",S.\"BUSINESS_TYPE\" AS \"session_type\",M.\"ID\" AS \"message_id\",M.\"SENDER_ID\" AS \"sender_id\",M.\"SENDER_NAME\" AS \"sender_name\",M.\"TIMESTAMP\" AS \"timestamp\",M.\"CONTENT\" AS \"content\" " +
|
|
|
"FROM SESSIONS S, P2P_MESSAGES M " +
|
|
|
"WHERE S.ID IN (?) AND S.ID = M.SESSION_ID AND S.`TYPE` = 2 AND M.CONTENT_TYPE = 1 AND M.CONTENT LIKE ? " +
|
|
|
"WHERE S.ID IN ('"+sessionIdList+"') AND S.ID = M.SESSION_ID AND S.`TYPE` = 2 AND M.CONTENT_TYPE = 1 AND M.CONTENT LIKE :CONTENT " +
|
|
|
" 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 " +
|
|
|
"SELECT S.\"ID\" AS \"session_id\",S.\"NAME\" AS \"session_name\",S.\"TYPE\" AS \"SESSION_TYPE\",S.\"BUSINESS_TYPE\" AS \"session_type\",M.\"ID\" AS \"message_id\",M.\"SENDER_ID\" AS \"sender_id\",M.\"SENDER_NAME\" AS \"sender_name\",M.\"TIMESTAMP\" AS \"timestamp\",M.\"CONTENT\" AS \"content\" " +
|
|
|
"FROM SESSIONS S, GROUP_MESSAGES M " +
|
|
|
"WHERE S.ID IN (?) AND S.ID = M.SESSION_ID AND S.`TYPE` IN (3,5) AND M.CONTENT_TYPE = 1 AND M.CONTENT LIKE ? ) X " +
|
|
|
"WHERE S.ID IN ('"+sessionIdList+"') AND S.ID = M.SESSION_ID AND S.`TYPE` IN (3,5) AND M.CONTENT_TYPE = 1 AND M.CONTENT LIKE :CONTENT ) X " +
|
|
|
"ORDER BY X.SESSION_ID, X.MESSAGE_ID ";
|
|
|
let sql = "SELECT*FROM ( "+sqlTemp+" AND rownum<=?) WHERE r>=?"
|
|
|
let sql = "SELECT*FROM ( "+sqlTemp+" AND rownum<="+ size+") WHERE r>="+page * size+" "
|
|
|
|
|
|
keyword = '%' + keyword + '%';
|
|
|
ImDb.execQuery({
|
|
|
oracledbUtil.query({
|
|
|
sql: sql,
|
|
|
args: [sessionIdList, keyword, sessionIdList, keyword, sessionIdList, keyword, size,page * size],
|
|
|
args: [keyword, keyword, keyword],
|
|
|
handler: handler
|
|
|
});
|
|
|
}
|