| 
					
				 | 
			
			
				@ -4,7 +4,6 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				"use strict"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				var EventEmitter = require('events').EventEmitter; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				var util = require('util'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				var log = require("../util/log.js"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				var modelUtil = require('../util/modelUtil'); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -21,385 +20,372 @@ var MODEL_EVENTS = require('../include/commons').MODEL_EVENTS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				var CONTENT_TYPES = require('../include/commons').CONTENT_TYPE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				var PLATFORMS = require('../include/commons').PLATFORM; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				function Doctor(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    EventEmitter.call(this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * 向医生发送消息。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * @param message 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				Doctor.prototype.sendMessage = function(message){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    var self = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    userRepo.isExist(message.to, function (err, rows) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            modelUtil.emitDbError(self, 'Lookup receiving users failed', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (rows.length == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            self.emit(MODEL_EVENTS.DataNotFound, {}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				class Doctor{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    constructor(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this._eventEmitter = new EventEmitter(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 保存消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        var tempContent = message.contentType === CONTENT_TYPES.Article ? JSON.stringify(message.content) : message.content; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        pmRepo.save(message.to, message.from, message.contentType, tempContent, function (err, result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 向医生发送消息。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param message 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    sendMessage(message){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        var self = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        userRepo.isExist(message.to, function (err, rows) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                modelUtil.emitDbError(self, 'Save private message failed.', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                modelUtil.emitDbError(self, 'Lookup receiving users failed', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            // 返回发送成功后的消息记录,控制器可选择结束网络连接 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            pmRepo.findOneMessage(result.insertId, function (err, msg) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    modelUtil.emitDbError(self, 'Save private message success, but return last message failed.', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    self.emit(MODEL_EVENTS.OK, fillMessages(msg)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            // 更新自身的聊天统计信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            statsRepo.updatePrivateChatSummary(message.from, message.to, message.from, message.contentType, message.content, function (err, result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (err) modelUtil.logDbError(null, err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            // 更新对端的聊天统计信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            statsRepo.updatePrivateChatSummary(message.to, message.from, message.from, message.contentType, message.content, function (err, result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (err) modelUtil.logDbError(null, err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (rows.length == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                self.emit(MODEL_EVENTS.DataNotFound, {}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            // 获取对方状态,即对端的系统平台,token等信息,并推送通知消息给对端 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            userRepo.getUserStatus(message.to, function (err, result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            // 保存消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            var tempContent = message.contentType === CONTENT_TYPES.Article ? JSON.stringify(message.content) : message.content; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            pmRepo.save(message.to, message.from, message.contentType, tempContent, function (err, result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    modelUtil.logDbError('Get target user status for private message failed: ' + message.to, err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    modelUtil.emitDbError(self, 'Save private message failed.', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                // 构建通知消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                var title = '新消息'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                var content = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (message.contentType === CONTENT_TYPES.PlainText) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    content = message.content; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } else if (message.contentType === CONTENT_TYPES.Image) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    content = '[图片]'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } else if (message.contentType === CONTENT_TYPES.Audio) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    content = '[语音]'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    content = '接收到一条新消息'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                var isOnline = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                var target; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (result.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    target = result[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if (target.is_online) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        isOnline = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                // 返回发送成功后的消息记录,控制器可选择结束网络连接 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                pmRepo.findOneMessage(result.insertId, function (err, msg) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        modelUtil.emitDbError(self, 'Save private message success, but return last message failed.', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        self.emit(MODEL_EVENTS.OK, fillMessages(msg)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                var notifyMessage = JSON.stringify({type: 'p2p_msg', from_uid: message.from}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                // 更新自身的聊天统计信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                statsRepo.updatePrivateChatSummary(message.from, message.to, message.from, message.contentType, message.content, function (err, result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if (err) modelUtil.logDbError(null, err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                // 保存通知消息到数据库中并根据用户在线状态推送此消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                nmRepo.save(message.to, message.contentType, title, content, notifyMessage, isOnline, function (err, result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                // 更新对端的聊天统计信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                statsRepo.updatePrivateChatSummary(message.to, message.from, message.from, message.contentType, message.content, function (err, result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if (err) modelUtil.logDbError(null, err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                // 获取对方状态,即对端的系统平台,token等信息,并推送通知消息给对端 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                userRepo.getUserStatus(message.to, function (err, result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        log.error('Save private notify message failed, ', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        modelUtil.logDbError('Get target user status for private message failed: ' + message.to, err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    // 构建通知消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    var title = '新消息'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    var content = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if (message.contentType === CONTENT_TYPES.PlainText) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        content = message.content; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } else if (message.contentType === CONTENT_TYPES.Image) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        content = '[图片]'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } else if (message.contentType === CONTENT_TYPES.Audio) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        content = '[语音]'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        if (isOnline === true) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            if (target.platform === PLATFORMS.iOS) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                getui.pushAPN(message.to, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    target.token, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    message.contentType, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    title, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    notifyMessage, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    function (err, result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        if (err != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                            console.log(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                            console.log(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            } else if (target.platform === PLATFORMS.Android) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                getui.pushAndroid(target.client_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    message.contentType, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    title, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    notifyMessage, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    target.status, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    function (err, result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        if (err != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                            console.log(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                            console.log(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        content = '接收到一条新消息'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    var isOnline = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    var target; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if (result.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        target = result[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        if (target.is_online) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            isOnline = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    var notifyMessage = JSON.stringify({type: 'p2p_msg', from_uid: message.from}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    // 保存通知消息到数据库中并根据用户在线状态推送此消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    nmRepo.save(message.to, message.contentType, title, content, notifyMessage, isOnline, function (err, result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            log.error('Save private notify message failed, ', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            if (isOnline === true) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                if (target.platform === PLATFORMS.iOS) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    getui.pushAPN(message.to, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        target.token, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        message.contentType, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        title, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        notifyMessage, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        function (err, result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                            if (err != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                                console.log(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                                console.log(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                } else if (target.platform === PLATFORMS.Android) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    getui.pushAndroid(target.client_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        message.contentType, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        title, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        notifyMessage, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        target.status, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        function (err, result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                            if (err != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                                console.log(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                                console.log(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * 获取最近聊天的用户,组。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				Doctor.prototype.getRecentChats = function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    statsRepo.getRecentChats(userId, days, function (err, result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            log.error('Get recent chat objects failed: ', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 获取最近聊天的用户,组。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    getRecentChats(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        statsRepo.getRecentChats(userId, days, function (err, result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                log.error('Get recent chat objects failed: ', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            res.status(500).send({message: 'Get recent chat objects failed.'}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                res.status(500).send({message: 'Get recent chat objects failed.'}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        var data = {patients: [], doctors: [], groups: []}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (result.length === 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            res.status(200).send(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            var data = {patients: [], doctors: [], groups: []}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (result.length === 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                res.status(200).send(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for (var i = 0; i < result.length; ++i) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            var row = result[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (row.type.indexOf('patient') > -1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                data.patients.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    code: row.code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    name: row.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    birthday: row.birthday === null ? "" : row.birthday, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    sex: row.sex, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    avatar: row.photo === null ? "" : row.photo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else if (row.type.indexOf('doctor') > -1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                data.doctors.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    code: row.code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    name: row.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    birthday: row.birthday === null ? "" : row.birthday, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    sex: row.sex, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    avatar: row.photo === null ? "" : row.photo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else if (row.type.indexOf('group') > -1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                data.groups.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    code: row.code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    name: row.name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            for (var i = 0; i < result.length; ++i) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                var row = result[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (row.type.indexOf('patient') > -1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    data.patients.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        code: row.code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        name: row.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        birthday: row.birthday === null ? "" : row.birthday, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        sex: row.sex, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        avatar: row.photo === null ? "" : row.photo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } else if (row.type.indexOf('doctor') > -1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    data.doctors.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        code: row.code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        name: row.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        birthday: row.birthday === null ? "" : row.birthday, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        sex: row.sex, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        avatar: row.photo === null ? "" : row.photo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } else if (row.type.indexOf('group') > -1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    data.groups.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        code: row.code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        name: row.name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        res.status(200).send(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            res.status(200).send(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * 获取参与的聊天列表,包括:点对点,参与的讨论组,系统消息等。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * @param userId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				Doctor.prototype.getChatList = function (userId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    var self = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    // 与患者的私信 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    pmRepo.findAllP2PWithPatient(userId, function (err, patients) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            modelUtil.emitDbError(self, 'Get chat list with patient failed', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 获取参与的聊天列表,包括:点对点,参与的讨论组,系统消息等。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param userId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    getChatList(userId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        var self = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        var chats = {patients: [], doctors: [], groups: []}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for (var i = 0; i < patients.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            var patient = patients[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            chats.patients.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                code: patient.code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                name: patient.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                birthday: patient.birthday, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                sex: patient.sex, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                avatar: patient.photo == null ? "" : patient.photo, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                newMessageCount: patient.new_msg_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                lastContentType: patient.last_content_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                lastContent: patient.last_content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                timestamp: objectUtil.timestampToLong(patient.timestamp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 含有患者的群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        gmRepo.findAllGroupsWithPatient(userId, function (err, groups) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 与患者的私信 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        pmRepo.findAllP2PWithPatient(userId, function (err, patients) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                modelUtil.emitDbError(self, 'Get group list with patient failed', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                modelUtil.emitDbError(self, 'Get chat list with patient failed', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            for (var i = 0; i < groups.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                var group = groups[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                // 过滤掉医生间的求助团队 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if(group.group_type === 2) continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                chats.groups.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    code: group.code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    name: group.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    groupType: group.msg_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    newMessageCount: group.new_msg_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    lastContentType: group.last_content_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    lastContent: group.last_content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    timestamp: objectUtil.timestampToLong(group.timestamp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            var chats = {patients: [], doctors: [], groups: []}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            for (var i = 0; i < patients.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                var patient = patients[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                chats.patients.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    code: patient.code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    name: patient.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    birthday: patient.birthday, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    sex: patient.sex, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    avatar: patient.photo == null ? "" : patient.photo, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    newMessageCount: patient.new_msg_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    lastContentType: patient.last_content_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    lastContent: patient.last_content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    timestamp: objectUtil.timestampToLong(patient.timestamp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            // 医生间的私聊 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            pmRepo.findAllP2PWithDoctor(userId, function (err, doctors) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            // 含有患者的群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            gmRepo.findAllGroupsWithPatient(userId, function (err, groups) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    modelUtil.emitDbError(self, 'Get chat list with doctor failed', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    modelUtil.emitDbError(self, 'Get group list with patient failed', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                for (var i = 0; i < doctors.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    var doctor = doctors[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    chats.doctors.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        code: doctor.code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        name: doctor.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        sex: doctor.sex, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        avatar: doctor.photo === null ? "" : doctor.photo, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        newMessageCount: doctor.new_msg_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        lastContentType: doctor.last_content_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        lastContent: doctor.last_content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        timestamp: objectUtil.timestampToLong(doctor.timestamp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                for (var i = 0; i < groups.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    var group = groups[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    // 过滤掉医生间的求助团队 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if(group.group_type === 2) continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    chats.groups.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        code: group.code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        name: group.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        groupType: group.msg_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        newMessageCount: group.new_msg_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        lastContentType: group.last_content_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        lastContent: group.last_content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        timestamp: objectUtil.timestampToLong(group.timestamp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                // 获取医生间的组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                gmRepo.findAllGroupsWithDoctor(userId, function (err, groups) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                // 医生间的私聊 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                pmRepo.findAllP2PWithDoctor(userId, function (err, doctors) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        modelUtil.emitDbError(self, 'Get group list with doctor failed', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        modelUtil.emitDbError(self, 'Get chat list with doctor failed', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    for (var i = 0; i < groups.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        var group = groups[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        chats.groups.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            code: group.code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            name: group.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            groupType: group.group_type, // 行政团队 or 求助 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            newMessageCount: group.new_msg_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            lastContentType: group.last_content_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            lastContent: group.last_content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            timestamp: objectUtil.timestampToLong(group.timestamp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    for (var i = 0; i < doctors.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        var doctor = doctors[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        chats.doctors.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            code: doctor.code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            name: doctor.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            sex: doctor.sex, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            avatar: doctor.photo === null ? "" : doctor.photo, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            newMessageCount: doctor.new_msg_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            lastContentType: doctor.last_content_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            lastContent: doctor.last_content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            timestamp: objectUtil.timestampToLong(doctor.timestamp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    self.emit(MODEL_EVENTS.OK, chats); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    // 获取医生间的组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    gmRepo.findAllGroupsWithDoctor(userId, function (err, groups) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            modelUtil.emitDbError(self, 'Get group list with doctor failed', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * 获取与医生的聊天列表,包括:点对点,参与的讨论组。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * @param userId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				Doctor.prototype.getChatListWithDoctor = function(userId){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    // 先获取医生间的私聊 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    pmRepo.findAllP2PWithDoctor(userId, function (err, doctors) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            log.error('Get chat list with doctor failed: ', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            res.status(500).send({message: 'Get chat list with doctor failed.'}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        for (var i = 0; i < groups.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            var group = groups[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            chats.groups.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                code: group.code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                name: group.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                groupType: group.group_type, // 行政团队 or 求助 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                newMessageCount: group.new_msg_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                lastContentType: group.last_content_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                lastContent: group.last_content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                timestamp: objectUtil.timestampToLong(group.timestamp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        var chats = {doctors: [], groups: []}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for (var i = 0; i < doctors.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            var doctor = doctors[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            chats.doctors.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                code: doctor.code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                name: doctor.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                sex: doctor.sex, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                avatar: doctor.photo === null ? "" : doctor.photo, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                newMessageCount: doctor.new_msg_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                lastContentType: doctor.last_content_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                lastContent: doctor.last_content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                timestamp: objectUtil.timestampToLong(doctor.timestamp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        self.emit(MODEL_EVENTS.OK, chats); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 再获取医生间的组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        gmRepo.findAllGroupsWithDoctor(userId, function (err, groups) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 获取与医生的聊天列表,包括:点对点,参与的讨论组。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param userId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    getChatListWithDoctor(userId){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 先获取医生间的私聊 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        pmRepo.findAllP2PWithDoctor(userId, function (err, doctors) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                log.error('Get group list with doctor failed: ', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                log.error('Get chat list with doctor failed: ', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                res.status(500).send({message: 'Get group list with doctor failed.'}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                res.status(500).send({message: 'Get chat list with doctor failed.'}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            for (var i = 0; i < groups.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                var group = groups[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                chats.groups.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    code: group.code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    name: group.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    groupType: group.group_type, // 行政团队 or 求助 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    newMessageCount: group.new_msg_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    lastContentType: group.last_content_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    lastContent: group.last_content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    timestamp: objectUtil.timestampToLong(group.timestamp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            var chats = {doctors: [], groups: []}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            for (var i = 0; i < doctors.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                var doctor = doctors[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                chats.doctors.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    code: doctor.code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    name: doctor.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    sex: doctor.sex, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    avatar: doctor.photo === null ? "" : doctor.photo, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    newMessageCount: doctor.new_msg_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    lastContentType: doctor.last_content_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    lastContent: doctor.last_content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    timestamp: objectUtil.timestampToLong(doctor.timestamp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            res.status(200).send(chats); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * 获取与指定用户的聊天记录。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * @param userId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * @param peerId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				Doctor.prototype.getPrivateMessages = function(userId, peerId){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    pmRepo.findAllMessages(userId, peerId, contentType === undefined ? "1,2,3,5,6" : contentType, msgStartId, msgEndId, count, closedInterval, function (err, rows) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            log.error("Get private message failed, ", err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            // 再获取医生间的组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            gmRepo.findAllGroupsWithDoctor(userId, function (err, groups) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    log.error('Get group list with doctor failed: ', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            res.status(500).send({message: "Get private messages failed."}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    res.status(500).send({message: 'Get group list with doctor failed.'}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        var messages = fillMessages(rows); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                for (var i = 0; i < groups.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    var group = groups[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    chats.groups.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        code: group.code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        name: group.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        groupType: group.group_type, // 行政团队 or 求助 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        newMessageCount: group.new_msg_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        lastContentType: group.last_content_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        lastContent: group.last_content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        timestamp: objectUtil.timestampToLong(group.timestamp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 清空统计信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        statsRepo.clearPrivateChatSummary(userId, peerId, function (err, result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (err) console.log(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                res.status(200).send(chats); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        res.status(200).send(messages); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 获取与指定用户的聊天记录。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param userId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param peerId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    getPrivateMessages(userId, peerId){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        pmRepo.findAllMessages(userId, peerId, contentType === undefined ? "1,2,3,5,6" : contentType, msgStartId, msgEndId, count, closedInterval, function (err, rows) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                log.error("Get private message failed, ", err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * 获取与指定用户的未读聊天记录。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * @param userId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * @param peerId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				Doctor.prototype.getUnreadPrivateMessages = function (userId, peerId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    statsRepo.getPrivateChatSummary(userId, peerId, function (err, summary) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            log.error("Get unread private messages failed: ", err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                res.status(500).send({message: "Get private messages failed."}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            res.status(500).send({message: "Get unread private messages failed."}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            var messages = fillMessages(rows); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 没有未读消息,直接返回 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (summary.length == 0 || summary[0].new_msg_count === 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            res.status(200).send({startId: 0, count: 0, records: []}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            // 清空统计信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            statsRepo.clearPrivateChatSummary(userId, peerId, function (err, result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (err) console.log(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        pmRepo.findUnread(peerId, userId, MAX_INT, summary[0].new_msg_count, function (err, rows) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            res.status(200).send(messages); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 获取与指定用户的未读聊天记录。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param userId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param peerId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    getUnreadPrivateMessages(userId, peerId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        statsRepo.getPrivateChatSummary(userId, peerId, function (err, summary) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                log.error("Get unread private messages failed: ", err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -407,41 +393,59 @@ Doctor.prototype.getUnreadPrivateMessages = function (userId, peerId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            var messages = fillMessages(rows); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            // 没有未读消息,直接返回 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (summary.length == 0 || summary[0].new_msg_count === 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                res.status(200).send({startId: 0, count: 0, records: []}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            res.status(200).send(messages); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            pmRepo.findUnread(peerId, userId, MAX_INT, summary[0].new_msg_count, function (err, rows) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    log.error("Get unread private messages failed: ", err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    res.status(500).send({message: "Get unread private messages failed."}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                var messages = fillMessages(rows); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                res.status(200).send(messages); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * 将消息的返回结果合并成JSON。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * @param rows 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * @returns {startId: 0, count: 0, records: []} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				function fillMessages(rows) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    var messages = {startId: rows.length > 0 ? rows[0].msg_id : '', count: rows.length, records: []}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    for (var i = 0; i < rows.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        var row = rows[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        var record = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            id: row.msg_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            from: row.from_uid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            contentType: row.type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            content: row.content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            timestamp: objectUtil.timestampToLong(row.timestamp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (row.to_uid !== undefined) record.to = row.to_uid; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (row.at_uid !== undefined) record.at = row.at_uid; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        messages.records.push(record); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    on(message, handler){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this._eventEmitter.on(message, handler); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    return messages; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 将消息的返回结果合并成JSON。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param rows 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @returns {startId: 0, count: 0, records: []} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    static fillMessages(rows) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        var messages = {startId: rows.length > 0 ? rows[0].msg_id : '', count: rows.length, records: []}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for (var i = 0; i < rows.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            var row = rows[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            var record = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                id: row.msg_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                from: row.from_uid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                contentType: row.type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                content: row.content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                timestamp: objectUtil.timestampToLong(row.timestamp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (row.to_uid !== undefined) record.to = row.to_uid; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (row.at_uid !== undefined) record.at = row.at_uid; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            messages.records.push(record); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return messages; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				// This class inherits from EventEmitter and expose class 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				util.inherits(Doctor, EventEmitter); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				// Expose class 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				module.exports = Doctor; 
			 |