소스 검색

修复全科医生无法看到求助组的问题;修复闭包引起的自我消息发送

Sand 8 년 전
부모
커밋
461bda6734

+ 2 - 0
readme.md

@ -31,6 +31,8 @@ Node.js支持同步与异步调用,也导致了异常错误处理与众不同
## 部署
部署服务之前需要配置环境变量:IM_PROFILE,其值将决定应用加载的配置文件。值为prod, test, dev,仅能使用一个。
为保证服务正常运行,当服务异常退出时自动重启服务,IM服务器使用appArmour脚本,对进程添加保护:进程异常退出时,自动重启。
为实现此目标,部署时通过appArmour启动服务即可实现进程的守护功能。

+ 257 - 150
src/doctor/endpoints/chats.endpoint.js

@ -79,7 +79,7 @@ router.post(APIv1.Chats.SM, function (req, res) {
        }
        var pushable = rows.length > 0 && rows[0].is_online;
        var notifyMessage = JSON.stringify({type: 'system_msg', content: message.content});
        var notifyMessage = JSON.stringify({type: 'system_msg', data: message.content});
        var userStatus = rows[0];
        // 保存该条推送信息
@ -112,22 +112,12 @@ router.post(APIv1.Chats.SM, function (req, res) {
                            } else {
                                if (pushable) {
                                    if (userStatus.platform === PLATFORMS.iOS) {
                                        getui.pushAPN(message.to,
                                            userStatus.token,
                                            message.contentType,
                                            message.title,
                                            message.content,
                                            notifyMessage,
                                        getui.pushAPN(message.to, userStatus.token, message.contentType, message.title, message.content, notifyMessage,
                                            function (err, result) {
                                                err != null ? console.log(err) : console.log(result);
                                            });
                                    } else if (userStatus.platform === PLATFORMS.Android) {
                                        getui.pushAndroid(userStatus.client_id,
                                            message.contentType,
                                            message.title,
                                            message.content,
                                            notifyMessage,
                                            userStatus.status,
                                        getui.pushAndroid(userStatus.client_id, message.contentType, message.title, message.content, notifyMessage, userStatus.status,
                                            function (err, result) {
                                                err != null ? console.log(err) : console.log(result);
                                            });
@ -334,7 +324,7 @@ router.post(APIv1.Chats.GM, function (req, res) {
        }
        // 保存群组消息
        groupMsg.save(message.from, message.group, message.at, message.contentType, message.content, function (err, result) {
        groupMsg.save(message.from, message.group, message.at, message.contentType, message.content, function (err, insertedRow) {
            if (err) {
                log.error('Save group message failed: ', err);
@ -342,7 +332,7 @@ router.post(APIv1.Chats.GM, function (req, res) {
                return;
            }
            groupMsg.findOneMessage(result.insertId, function (err, groupMsg) {
            groupMsg.findOneMessage(insertedRow.insertId, function (err, groupMsg) {
                if (err) {
                    log.error("Save group message success, but return this message failed.");
@ -358,13 +348,13 @@ router.post(APIv1.Chats.GM, function (req, res) {
            });
            // 推送通知消息给群组成员
            group.getMembers(message.group, message.groupType, function (err, result) {
            group.getMembers(message.group, message.groupType, function (err, members) {
                if (err) {
                    log.error('Get group members failed: ', err);
                    return;
                }
                if (result.length == 0) {
                if (members.length == 0) {
                    log.warn('No members in group ', message.group,
                        message.groupType === GROUP_TYPE.AdminTeam ? " of admin team." : "of discussion group.");
@ -372,122 +362,125 @@ router.post(APIv1.Chats.GM, function (req, res) {
                }
                // 逐个推送通知
                for (var i = 0; i < result.length; i++) {
                    var member = result[i];
                    if (member.user_id === message.from) continue;
                    user.getUserStatus(member.user_id, function (err, result) {
                        if (err) {
                            console.error('Get group member status failed: ', err);
                            return;
                        }
                        var title = '';
                        var content = '';
                        if (message.contentType === CONTENT_TYPES.PlainText) {
                            title = '群组消息';
                            content = message.content;
                        } else if (message.contentType === CONTENT_TYPES.Image) {
                            title = '群组消息';
                            content = '[图片]';
                        } else if (message.contentType === CONTENT_TYPES.Audio) {
                            title = '群组消息';
                            content = '[语音]';
                        } else {
                            title = '群组消息';
                            content = '接收到一条新消息';
                        }
                        var pushable = result.length > 0 && result[0].is_online === 1;
                        var notifyMessage = JSON.stringify({type: 'group_msg', gid: message.group});
                for (var i = 0; i < members.length; i++) {
                    var member = members[i];
                    if (member.user_id === message.from){
                        continue;
                    }
                        // 发送并保存通知到数据库中
                        if (pushable) {
                            var userStatus = result[0];
                    (function (user_id) {
                        user.getUserStatus(user_id, function (err, result) {
                            if (err) {
                                console.error('Get group member status failed: ', err);
                                return;
                            }
                            if (userStatus.platform === PLATFORMS.iOS) {
                                getui.pushAPN(member.user_id,
                                    userStatus.token,
                                    message.contentType,
                                    title,
                                    content,
                                    notifyMessage,
                                    function (err, result) {
                                        err != null ? console.error(err) : console.log(result);
                                        // 这段代码重复
                                        notifyMsg.save(member.user_id,
                                            message.contentType,
                                            title,
                                            content,
                                            notifyMessage,
                                            err != null ? 0 : 1,
                                            function (err, result) {
                                                if (err) {
                                                    console.log('Save group notify message failed: ', err);
                                                } else {
                            var title = '';
                            var content = '';
                            if (message.contentType === CONTENT_TYPES.PlainText) {
                                title = '群组消息';
                                content = message.content;
                            } else if (message.contentType === CONTENT_TYPES.Image) {
                                title = '群组消息';
                                content = '[图片]';
                            } else if (message.contentType === CONTENT_TYPES.Audio) {
                                title = '群组消息';
                                content = '[语音]';
                            } else {
                                title = '群组消息';
                                content = '接收到一条新消息';
                            }
                                                }
                                            });
                                    });
                            } else if (userStatus.platform === PLATFORMS.Android) {
                                getui.pushAndroid(data.client_id,
                            var pushable = result.length > 0 && result[0].is_online === 1;
                            var notifyMessage = JSON.stringify({type: 'group_msg', gid: message.group});
                            // 发送并保存通知到数据库中
                            if (pushable) {
                                var userStatus = result[0];
                                if (userStatus.platform === PLATFORMS.iOS) {
                                    getui.pushAPN(user_id,
                                        userStatus.token,
                                        message.contentType,
                                        title,
                                        content,
                                        notifyMessage,
                                        function (err, result) {
                                            err != null ? console.error(err) : console.log(result);
                                            // 这段代码重复
                                            notifyMsg.save(user_id,
                                                message.contentType,
                                                title,
                                                content,
                                                notifyMessage,
                                                err != null ? 0 : 1,
                                                function (err, result) {
                                                    if (err) {
                                                        console.log('Save group notify message failed: ', err);
                                                    } else {
                                                    }
                                                });
                                        });
                                } else if (userStatus.platform === PLATFORMS.Android) {
                                    getui.pushAndroid(data.client_id,
                                        message.contentType,
                                        title,
                                        content,
                                        notifyMessage,
                                        userStatus.status,
                                        function (err, result) {
                                            err != null ? console.error(err) : console.log(result);
                                            // 这段代码重复
                                            notifyMsg.save(user_id,
                                                message.contentType,
                                                title,
                                                content,
                                                notifyMessage,
                                                err != null ? 0 : 1,
                                                function (err, result) {
                                                    if (err) {
                                                        console.log('Save group notify message failed: ', err);
                                                    } else {
                                                    }
                                                });
                                        });
                                }
                            } else {
                                // 这段代码重复
                                notifyMsg.save(user_id,
                                    message.contentType,
                                    title,
                                    content,
                                    notifyMessage,
                                    userStatus.status,
                                    0,
                                    function (err, result) {
                                        err != null ? console.error(err) : console.log(result);
                                        // 这段代码重复
                                        notifyMsg.save(member.user_id,
                                            message.contentType,
                                            title,
                                            content,
                                            notifyMessage,
                                            err != null ? 0 : 1,
                                            function (err, result) {
                                                if (err) {
                                                    console.log('Save group notify message failed: ', err);
                                                } else {
                                        if (err) {
                                            console.log('Save group notify message failed: ', err);
                                        } else {
                                                }
                                            });
                                        }
                                    });
                            }
                        } else {
                            // 这段代码重复
                            notifyMsg.save(member.user_id,
                                message.contentType,
                                title,
                                content,
                                notifyMessage,
                                0,
                                function (err, result) {
                                    if (err) {
                                        console.log('Save group notify message failed: ', err);
                                    } else {
                                    }
                                });
                        }
                    });
                    // 统计'@'信息
                    var at = 0;
                    if (message.at == member.user_id) at = 1;
                    msgStats.updateGroupChatSummary(member.user_id,
                        message.group,
                        message.from,
                        at,
                        message.contentType,
                        message.content,
                        true,
                        function (err, result) {
                            if (err) console.log(err);
                        });
                        // 统计'@'信息
                        var at = message.at == user_id ? 1 : 0;
                        msgStats.updateGroupChatSummary(user_id,
                            message.group,
                            message.from,
                            at,
                            message.contentType,
                            message.content,
                            true,
                            function (err, result) {
                                if (err) console.log(err);
                            });
                    })(member.user_id);
                }
            });
        });
@ -510,36 +503,106 @@ router.get(APIv1.Chats.List, function (req, res) {
        throw {httpStatus: 406, message: 'Missing fields.'};
    }
    msgStats.getChatList(userId, function (err, rows) {
    // 与患者的私信
    privateMsg.findAllP2PWithPatient(userId, function (err, patients) {
        if (err) {
            log.error('Get user chat list failed: ', err);
            log.error('Get chat list with patient failed: ', err);
            res.status(500).send({message: 'Get user chat list failed.'});
            res.status(500).send({message: 'Get chat list with patient failed.'});
            return;
        }
        if (rows.length == 0) {
            res.status(200).send([]);
            return;
        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)
            });
        }
        var chats = new Array(rows.length);
        for (var i = 0; i < rows.length; i++) {
            var row = rows[i];
            chats[i] = {
                userId: row.uid,
                peerId: row.from_uid,
                groupId: row.from_gid === undefined ? "" : row.from_gid,
                atMe: row.at_me === 1,
                messageType: row.msg_type,
                lastContentType: row.last_content_type,
                lastContent: row.last_content,
                newMessageCount: row.new_msg_count,
                timestamp: objectUtil.timestampToLong(row.timestamp)
            };
        }
        // 含有患者的群
        groupMsg.findAllGroupsWithPatient(userId, function (err, groups) {
            if (err) {
                log.error('Get group list with patient failed: ', err);
                res.status(500).send({message: 'Get group list with patient failed.'});
                return;
            }
        res.status(200).send(chats);
            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)
                });
            }
            // 医生间的私聊
            privateMsg.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 < 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)
                    });
                }
                // 获取医生间的组
                groupMsg.findAllGroupsWithDoctor(userId, function (err, groups) {
                    if (err) {
                        log.error('Get group list with doctor failed: ', err);
                        res.status(500).send({message: 'Get group 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)
                        });
                    }
                    res.status(200).send(chats);
                });
            });
        })
    });
});
@ -589,6 +652,10 @@ router.get(APIv1.Chats.ListWithPatient, function (req, res) {
            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,
@ -655,7 +722,7 @@ router.get(APIv1.Chats.ListWithDoctor, function (req, res) {
                chats.groups.push({
                    code: group.code,
                    name: group.name,
                    groupType: group.type,
                    groupType: group.group_type, // 行政团队 or 求助
                    newMessageCount: group.new_msg_count,
                    lastContentType: group.last_content_type,
                    lastContent: group.last_content,
@ -743,10 +810,11 @@ router.get(APIv1.Chats.Recent, function (req, res) {
 *  content_type 必须,消息类型
 *  message_start_id 可选,消息的起始ID,如果为空从最新的一条开始获取
 *  message_end_id 可选,消息的结束ID,如果为空从第一条开始获取
 *  count 可选,消息数量,如果不指定、小于零或大于50,默认为100条。若message_start_id与message_end_id均不为空,则此参数无效,方法是设置为10000条。
 *  count 可选,消息数量,如果不指定、小于零或大于50,默认为100条。若message_start_id与message_end_id均不为空,则此参数无效,方法是设置为10000条
 *  closed_interval 消息范围是否使用闭区间
 *
 * 请求URL:
 *  /chats/pm?user_id=sand&peer_id=Rose&content_type=2&message_start_id=10000&message_end_id=0&count=20
 *  /chats/pm?user_id=sand&peer_id=Rose&content_type=2&message_start_id=10000&message_end_id=0&count=20&closed_interval=false
 */
router.get(APIv1.Chats.PM, function (req, res) {
    var userId = req.query.user_id;
@ -755,16 +823,17 @@ router.get(APIv1.Chats.PM, function (req, res) {
    var msgStartId = !req.query.message_start_id ? MAX_INT : parseInt(req.query.message_start_id);
    var msgEndId = !req.query.message_end_id ? 0 : parseInt(req.query.message_end_id);
    var count = req.query.count === undefined ? DEFAULT_PAGE_SIZE : parseInt(req.query.count);
    var closedInterval = (req.query.closed_interval != false && req.query.closed_interval === "true");
    if (contentType !== undefined && parseInt(contentType) === CONTENT_TYPES.Image) count = DEFAULT_PAGE_SIZE;
    if (req.query.message_start_id && req.query.message_end_id) count = 10000;
    if (userId === undefined) {
        throw {httpStatus: 400, message: "Missing field."};
    if (!userId) {
        throw {httpStatus: 400, message: "Missing field: user_id."};
    }
    privateMsg.findAllMessages(userId, peerId, contentType === undefined ? "1,2,3,5,6" : contentType, msgStartId, msgEndId, count, function (err, rows) {
    privateMsg.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);
@ -869,7 +938,7 @@ router.get(APIv1.Chats.GM, function (req, res) {
        var messages = fillMessages(rows);
        // 清空统计信息
        msgStats.clearGroupChatSummary(req.query.uid, userId, function (err, result) {
        msgStats.clearGroupChatSummary(userId, groupId, function (err, result) {
            if (err) console.log(err);
        });
@ -1363,4 +1432,42 @@ router.get(APIv1.Chats.SearchAboutDoctor, function (req, res) {
    });
});
/**
 * 判断当前会话是否已经结束。
 *
 * 请求URL:
 *  /chats/pm/finished?user_id=sand&peer_id=rose
 */
router.get(APIv1.Chats.PMFinished, function (req, res) {
    var userId = req.query.user_id;
    var peerId = req.query.peer_id;
    if(!userId){
        throw {httpStatus: 406, message: "Missing field: user_id"};
    }
    if(!peerId){
        throw {httpStatus: 406, message: "Missing field: peer_id"};
    }
    privateMsg.isCurrentSessionFinished(userId, peerId, function (err, result) {
        if(err){
            log.error("Get session finish status failed: ", err);
            throw {httpStatus: 500, message: "Get session finish status failed."};
        }
        var data = {finished: true, consultId: ''};
        if(result.length > 0){
            var finishRow = result[0];
            data.finished = finishRow.finished === 1;
            if(!data.finished){
                data.consultId = finishRow.consult_id;
            }
        }
        res.status(200).send(data);
    })
});
module.exports = router;

+ 9 - 14
src/doctor/endpoints/groups.endpoint.js

@ -26,7 +26,7 @@ router.get(APIv1.Groups.MembersAvatar, function (req, res) {
    groups = "'" + tokens.join("', '") + "'";
    var avatars = [];
    group.getMembersAvatar(groups, function (err, rows) {
    group.getMembersAvatar(groups, function (err, members) {
        if(err){
            console.log("Get group member's avatar list failed: ", err);
@ -34,16 +34,12 @@ router.get(APIv1.Groups.MembersAvatar, function (req, res) {
            return;
        }
        var indexInGroup = 0;
        var lastGroupCode = '';
        var lastGroup;
        for (var i = 0; i < rows.length; ++i) {
            if(indexInGroup >= 5) continue;
            var row = rows[i];
            var groupCode = row.g_code;
        var lastGroupCode = '';
        for (var i = 0; i < members.length; ++i) {
            var member = members[i];
            var groupCode = member.g_code;
            if (lastGroupCode !== groupCode) {
                indexInGroup = 0;
                lastGroupCode = groupCode;
                lastGroup = {groupCode: groupCode, avatars: []};
@ -53,12 +49,11 @@ router.get(APIv1.Groups.MembersAvatar, function (req, res) {
            }
            lastGroup.avatars.push({
                code: row.dr_code,
                name: row.dr_name,
                avatar: row.dr_photo.length === 0 ? "" : row.dr_photo
                code: member.code,
                name: member.name,
                avatar: member.photo === null ? "" : member.photo,
                role: member.type
            });
            indexInGroup = indexInGroup + 1;
        }
        res.status(200).send(avatars);

+ 2 - 2
src/doctor/include/commons.js

@ -9,9 +9,9 @@
 */
var configFile = "config.";
if (process.env.prod !== undefined) {
if (process.env.IM_PROFILE === "prod") {
    configFile += "prod";
} else if (process.env.test !== undefined) {
} else if (process.env.IM_PROFILE === "test") {
    configFile += "test";
} else {
    configFile += "dev";

+ 1 - 0
src/doctor/include/endpoints.js

@ -29,6 +29,7 @@ var APIv1 = {
        PMUnread: '/pm/unread',
        PMUnreadCount: '/pm/unread/count',
        PMStats: '/pm/statistic',
        PMFinished: '/pm/finished',             // 当前会话是否已经结束
        // 组信
        GM: '/gm',

+ 23 - 11
src/doctor/models/group.js

@ -17,14 +17,14 @@ var GROUP_TYPE = require('../include/commons').GROUP_TYPE;
 * @param doctorId
 * @param handler
 */
exports.isGroupMember = function(groupId, groupType, doctorId, handler){
    if(groupType == GROUP_TYPE.AdminTeam) {
exports.isGroupMember = function (groupId, groupType, doctorId, handler) {
    if (groupType == GROUP_TYPE.AdminTeam) {
        wlyyRepo.execQuery({
            "sql": "SELECT doctor_code user_id from wlyy_admin_team_member WHERE team_id=? and doctor_code=?",
            "args": [groupId, doctorId],
            "handler": handler
        });
    }else {
    } else {
        wlyyRepo.execQuery({
            "sql": "SELECT member_code user_id from wlyy_talk_group_member WHERE group_code=? and member_code=?",
            "args": [groupId, doctorId],
@ -40,8 +40,8 @@ exports.isGroupMember = function(groupId, groupType, doctorId, handler){
 * @param groupType
 * @param handler
 */
exports.getMembers = function(groupId, groupType, handler) {
    if(groupType == GROUP_TYPE.AdminTeam) {
exports.getMembers = function (groupId, groupType, handler) {
    if (groupType == GROUP_TYPE.AdminTeam) {
        wlyyRepo.execQuery({
            "sql": "SELECT doctor_code user_id from wlyy_admin_team_member WHERE team_id=? AND available = 1",
            "args": [groupId],
@ -57,14 +57,26 @@ exports.getMembers = function(groupId, groupType, handler) {
};
exports.getMembersAvatar = function (groups, handler) {
    /*var sql = "SELECT m.member_code g_code, COUNT(m.member_code) member_count, d.code dr_code, d.name dr_name, d.photo dr_photo " +
     "FROM wlyy.wlyy_talk_group_member m, wlyy.wlyy_doctor d " +
     "WHERE m.member_code = d.code AND m.group_code IN (" + groups + ") " +
     "UNION " +
     "SELECT m.team_id g_code, COUNT(m.team_id) member_count, d.code dr_code, d.name dr_name, d.photo dr_photo " +
     "FROM wlyy.wlyy_admin_team_member m, wlyy.wlyy_doctor d " +
     "WHERE m.doctor_code = d.code AND m.team_id IN (" + groups + ") GROUP BY m.team_id";*/
    var sql = "SELECT * FROM(" +
        "SELECT g.code g_code, d.code dr_code, d.name dr_name, d.photo dr_photo " +
        "FROM wlyy.wlyy_talk_group g, wlyy.wlyy_talk_group_member m, wlyy.wlyy_doctor d " +
        "WHERE g.code = m.group_code AND m.member_code = d.code AND g.code in(" + groups + ") AND d.photo is NOT null " +
        "SELECT m.group_code g_code, d.code code, d.name name, d.photo photo, 'doctor' type FROM " +
        "wlyy.wlyy_talk_group_member m, wlyy.wlyy_doctor d " +
        "WHERE m.member_code = d.code AND m.group_code IN (" + groups + ") " +
        " UNION " +
        "SELECT m.group_code g_code, p.code code, p.name name, p.photo photo, 'patient' type " +
        "FROM  wlyy.wlyy_talk_group_member m, wlyy.wlyy_patient p " +
        "WHERE m.member_code = p.code AND m.group_code IN (" + groups + ")" +
        " UNION " +
        "SELECT g.id g_code, d.code dr_code, d.name dr_name, d.photo dr_photo " +
        "FROM wlyy.wlyy_admin_team g, wlyy.wlyy_admin_team_member m, wlyy.wlyy_doctor d " +
        "WHERE g.id = m.team_id AND m.doctor_code = d.code AND g.id in(" + groups + ") AND d.photo is NOT null " +
        "SELECT m.team_id g_code, d.code code, d.name name, d.photo photo, 'doctor' type " +
        "FROM wlyy.wlyy_admin_team_member m, wlyy.wlyy_doctor d " +
        "WHERE m.doctor_code = d.code AND m.team_id IN (" + groups + ") " +
        ") x ORDER BY x.g_code";
    wlyyRepo.execQuery({

+ 6 - 6
src/doctor/models/msg.group.js

@ -29,13 +29,13 @@ exports.findAllMessages = function (groupId, contentType, start, end, count, han
 * @param handler
 */
exports.findAllGroupsWithDoctor = function (userId, handler) {
    var sql = "SELECT DISTINCT g.id, g.name, '', '', ms.last_content_type, ms.last_content, ms.timestamp, ms.new_msg_count " +
    var sql = "SELECT DISTINCT g.id code, g.name name, ms.last_content_type, ms.last_content, ms.timestamp, ms.new_msg_count, '1' group_type " +
        "FROM wlyy.wlyy_admin_team g, wlyy.wlyy_admin_team_member m, wlyy.wlyy_doctor d, msg_statistic ms " +
        "WHERE d.code = ? AND d.code = m.doctor_code AND m.team_id = g.id AND g.id = ms.from_gid AND ms.last_content_type IN (1,2,3,5,6) GROUP BY g.id , g.name " +
        " UNION " +
        "SELECT m.group_code, m.group_name, '', '', ms.last_content_type, ms.last_content, ms.timestamp, ms.new_msg_count " +
        "FROM wlyy.wlyy_talk_group_member m, wlyy.wlyy_doctor d, msg_statistic ms " +
        "WHERE d.code = ? AND d.code = m.member_code AND m.group_code = ms.from_gid GROUP BY m.group_code , m.group_name";
        "SELECT m.group_code, m.group_name, ms.last_content_type, ms.last_content, ms.timestamp, ms.new_msg_count, '2' group_type " +
        "FROM wlyy.wlyy_talk_group g, wlyy.wlyy_talk_group_member m, wlyy.wlyy_doctor d, msg_statistic ms " +
        "WHERE d.code = ? AND d.code = m.member_code AND m.group_code = g.code AND g.code = ms.from_gid group by m.group_code, m.group_name";
    imRepo.execQuery({
        "sql": sql,
@ -51,11 +51,11 @@ exports.findAllGroupsWithDoctor = function (userId, handler) {
 * @param handler
 */
exports.findAllGroupsWithPatient = function (userId, handler) {
    var sql = "SELECT g.code, g.name, '', '', '', ms.last_content_type, ms.last_content, ms.timestamp, ms.new_msg_count, g.type msg_type " +
    var sql = "SELECT g.code, g.name, '', '', '', ms.last_content_type, ms.last_content, ms.timestamp, ms.new_msg_count, g.type group_type " +
        "FROM msg_statistic ms, (" +
        " SELECT g.code code, g.name name, g.type type FROM wlyy.wlyy_talk_group g, wlyy.wlyy_talk_group_member m " +
        " WHERE g.code = m.group_code and m.member_code = ?) g, wlyy.wlyy_patient p " +
        "WHERE ((ms.uid = ? and ms.peer_uid = p.code) OR (ms.uid = p.code and ms.peer_uid = ?)) " +
        "WHERE ((ms.uid = ? and ms.from_uid = p.code) OR (ms.uid = p.code and ms.from_uid = ?)) " +
        "and ms.from_gid = g.code and ms.msg_type = 2 AND ms.last_content_type in (1,2,3,5,6) ";
    imRepo.execQuery({

+ 18 - 3
src/doctor/models/msg.private.js

@ -34,17 +34,19 @@ exports.findOneMessage = function (messageId, handler) {
 * @param from
 * @param contentType
 * @param start
 * @param end
 * @param count
 * @param closedInterval
 * @param handler
 */
exports.findAllMessages = function (to, from, contentType, start, end, count, handler) {
exports.findAllMessages = function (to, from, contentType, start, end, count, closedInterval, handler) {
    var sql = "SELECT msg_id, to_uid, from_uid, type, content, timestamp from msg_p2p " +
        "WHERE ((to_uid=? AND from_uid=?) OR (to_uid=? AND from_uid=?)) " +
        "   AND type in (" + contentType + ") AND msg_id between ? and ? GROUP BY timestamp DESC LIMIT ?";
        "   AND type in (" + contentType + ") AND msg_id between ? and ? ORDER BY msg_id DESC LIMIT ?";
    imRepo.execQuery({
        "sql": sql,
        "args": [to, from, from, to, end + 1, start - 1, count],
        "args": [to, from, from, to, closedInterval ? end : end + 1, closedInterval ? start : start - 1, count],
        "handler": handler
    });
};
@ -107,4 +109,17 @@ exports.findUnread = function(from, to, start, count, handler) {
        "args": [from, to, start, count],
        "handler": handler
    });
};
exports.isCurrentSessionFinished = function (userId, peerId, handler) {
    var sql = "SELECT c.consult consult_id, case when c.end_msg_id is not null then 1 else 0 end finished " +
        "FROM msg_p2p pm, wlyy.wlyy_consult_team c " +
        "WHERE ((pm.from_uid = ? AND pm.to_uid = ?) OR (pm.from_uid = ? AND pm.to_uid = ?)) " +
        "AND c.start_msg_id = pm.msg_id ORDER BY start_msg_id desc limit 1";
    imRepo.execQuery({
        "sql": sql,
        "args": [userId, peerId, peerId, userId],
        "handler": handler
    });
};

+ 4 - 6
src/doctor/models/msg.stat.js

@ -87,7 +87,7 @@ exports.getPrivateChatSummary = function (userId, peerId, handler) {
exports.getPrivateChatAllUnReadCount = function (userId, handler) {
    imRepo.execQuery({
        "sql": "SELECT new_msg_count from msg_statistic WHERE uid=? AND msg_type=1 AND new_msg_count>0",
        "sql": "SELECT new_msg_count from msg_statistic WHERE uid = ? AND msg_type = 1 AND new_msg_count > 0",
        "args": [userId],
        "handler": handler
    });
@ -193,14 +193,11 @@ exports.getAppMsgAmount = function (userId, handler) {
        "sql": "SELECT imei,token from wlyy_token WHERE user=?",
        "args": [userId],
        "handler": function (err, result) {
            if (err) {
                handler(null, 0);
                return;
            }
            if (result.length == 0) {
            if (err || result.length == 0) {
                handler(null, 0);
                return;
            }
            var options = {
                hostname: config.wlyyServerConfig.hostname,
                port: config.wlyyServerConfig.port,
@ -226,6 +223,7 @@ exports.getAppMsgAmount = function (userId, handler) {
                handler(e, null);
            });
            req.end();
        }
    });

+ 1 - 1
src/doctor/resources/config/config.pro.js

@ -46,7 +46,7 @@ exports.debug = true;
exports.httpPort = 3000;
exports.sessionExpire = 1800;
exports.showSQL.sql.show = false;
exports.showSQL = false;
exports.wlyyDbConfig = wlyyDbConfig;
exports.imDbConfig = imDbConfig;