| 
					
				 | 
			
			
				@ -6,6 +6,9 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let ImDb = require('../oracle/db/im.db'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let log = require('../../util/log.js'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//oracle工具类 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let oracledbUtil = require('../../util/oracledb.util'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				const DB_TABLES = require('../../include/commons').DB_TABLES; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				const PARTICIPANT_ROLES = require('../../include/commons').PARTICIPANT_ROLES; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				const SESSION_STATUS = require('../../include/commons').SESSION_STATUS; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -38,17 +41,26 @@ class SessionRepo { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param handler 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    static findAll(userId, handler) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let sql = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = ? AND PARTICIPANT_ROLE =0  GROUP BY W.SESSION_ID"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let sql = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = '"+userId+"' AND PARTICIPANT_ROLE =0  GROUP BY W.SESSION_ID"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let sys_session = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = 'SYSTEM' AND PARTICIPANT_ROLE =0  GROUP BY W.SESSION_ID"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let sessionSQL = "SELECT ID, NAME, TYPE, CREATE_DATE,BUSINESS_TYPE, LAST_SENDER_ID, LAST_SENDER_NAME, LAST_CONTENT_TYPE, LAST_CONTENT, LAST_MESSAGE_TIME,STATUS FROM " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            + DB_TABLES.Sessions + " S WHERE S.ID IN(" + sql + ") AND S.ID NOT IN ("+sys_session+")"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ImDb.execQuery({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            "sql": sessionSQL, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        oracledbUtil.query({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            "sql": sql, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            "args": [userId], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            "handler": handler || function (err, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if(err) log.error(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // ImDb.execQuery({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //     "sql": sessionSQL, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //     "args": [userId], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //     "handler": handler || function (err, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //         if(err) log.error(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -150,24 +162,30 @@ class SessionRepo { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let sqlTemp = "SELECT rownum r,SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID IN('"+userId+"') GROUP BY W.SESSION_ID"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let sessionSQL = "SELECT ID, NAME, TYPE, CREATE_DATE, LAST_SENDER_ID, LAST_SENDER_NAME, LAST_CONTENT_TYPE, LAST_CONTENT, LAST_MESSAGE_TIME FROM " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let sqlTemp = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID IN('"+userId+"') GROUP BY W.SESSION_ID"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let sessionSQL = "SELECT rownum r, ID, NAME, TYPE, CREATE_DATE, LAST_SENDER_ID, LAST_SENDER_NAME, LAST_CONTENT_TYPE, LAST_CONTENT, LAST_MESSAGE_TIME FROM " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            + DB_TABLES.Sessions + " S WHERE S.ID IN(" + sqlTemp + ") AND S.TYPE IN("+type+") "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(status != null && status != ""){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sessionSQL += " AND S.STATUS="+status 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sessionSQL +=  " ORDER BY S.LAST_MESSAGE_TIME DESC " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let sql = "SELECT * FROM ( "+sessionSQL+" AND rownum<="+pagesize+" ) WHERE r>="+page 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let sql = "SELECT * FROM ( "+sessionSQL+" AND rownum<="+pagesize+" ORDER BY S.LAST_MESSAGE_TIME DESC ) WHERE r>="+page 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        log.info(sessionSQL) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ImDb.execQuery({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        oracledbUtil.query({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            "sql": sql, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            "args": [userId], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            "handler": handler || function (err, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if(err) log.error(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // ImDb.execQuery({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //     "sql": sql, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //     "args": [userId], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //     "handler": handler || function (err, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //         if(err) log.error(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    static findAllByTypeAndStatus(userId, businessType,status,page,pagesize, handler) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -183,13 +201,13 @@ class SessionRepo { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(status == SESSION_STATUS.ENDED){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if(businessType == SESSION_BUSINESS_TYPE.PATIENT){//区分居民,有未读消息的置顶排列 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //找出已经结束的咨询 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                sql = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = '"+userId+"'  GROUP BY W.SESSION_ID"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                sql = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = ?  GROUP BY W.SESSION_ID"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //找出角色讨论组中为旁听且未结束的咨询 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                let sql1 = ("SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = '"+userId+"' AND PARTICIPANT_ROLE ="+PARTICIPANT_ROLES.REGULAR+" GROUP BY W.SESSION_ID") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                let sql1 = ("SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = ? AND PARTICIPANT_ROLE ="+PARTICIPANT_ROLES.REGULAR+" GROUP BY W.SESSION_ID") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                sessionSQL =  "SELECT rownum r, S.* FROM " + DB_TABLES.Sessions + " s, " + DB_TABLES.Participants + " P " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    " WHERE ((S.ID IN(" + sql + ") AND S.BUSINESS_TYPE = "+businessType+" AND S.STATUS = 1) OR (S.ID IN(" + sql1 + ") AND S.BUSINESS_TYPE = "+businessType+" AND S.STATUS = 0)) " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    " WHERE ((S.ID IN(" + sql + ") AND S.BUSINESS_TYPE = ? AND S.STATUS = 1) OR (S.ID IN(" + sql1 + ") AND S.BUSINESS_TYPE = ? AND S.STATUS = 0)) " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    // " and s.id = p.session_id and p.participant_id = ? ORDER BY (p.last_fetch_time - s.last_message_time+1)>0,s.create_date desc limit "+page+","+pagesize; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    " AND S.ID = P.SESSION_ID AND P.PARTICIPANT_ID = '"+userId+"' "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    " AND S.ID = P.SESSION_ID AND P.PARTICIPANT_ID = ? "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                sessionSQL = "SELECT*FROM ( " + sessionSQL +" AND rownum<="+pagesize+" ORDER BY S.LAST_MESSAGE_TIME DESC ) WHERE r>="+page; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                ImDb.execQuery({ 
			 |