|  | @ -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
 | 
	
		
			
				|  |  |         });
 | 
	
		
			
				|  |  |     }
 |