瀏覽代碼

merge cde

Sand 8 年之前
父節點
當前提交
879d30bcf0

+ 5 - 3
src/doctor/models/group.js

@ -81,13 +81,15 @@ class GroupMessage extends BaseModel {
                            (function (userId) {
                                Patient.isPatientCode(userId,
                                    function () {
                                        let message = {
                                        let msg = {
                                            from: message.from,
                                            to: userId,
                                            contentType: message.contentType,
                                            content: message.content
                                            content: message.content,
                                            msgId: groupMsg[0].msg_id,
                                            group: message.group
                                        };
                                        Patient.sendMessage(message);
                                        new Patient().pushGroupMessage(msg);
                                    },
                                    function () {
                                        Doctor.pushMessage(message, 'group_msg');

+ 97 - 16
src/doctor/models/patient.js

@ -23,6 +23,7 @@ const CONTENT_TYPES = require('../include/commons').CONTENT_TYPE;
let clientCache = require('./socket.io/client.cache').clientCache();
let doctorRepo = require('../repository/doctor.repo');
let groupRepo = require('../repository/group.repo');
let wechatUtil = require('../util/wechatUtil');
class Patient extends BaseModel {
@ -83,6 +84,7 @@ class Patient extends BaseModel {
                let patientClient = clientCache.findById(message.to);
                if (!patientClient) {
                    log.warn("User is not online, user id: ", message.to);
                    //发送微信模板消息
                    self.sendConsultWechatReplyTempMsg(message);
                    return;
                }
@ -102,13 +104,75 @@ class Patient extends BaseModel {
        });
    };
    /**
     * 推送群组消息给居民
     *
     * @param message
     */
    pushGroupMessage(message) {
        let self = this;
        // 通过Web Socket推送给患者
        let patientClient = clientCache.findById(message.to);
        if (!patientClient) {
            log.warn("User is not online, user id: ", message.to);
            //发送微信模板消息
            self.sendConsultWechatReplyTempMsg(message);
            return;
        }
        patientClient.socketServer.sockets.emit('message', message);
    };
    /**
     * 发送微信模板消息给居民
     *
     * @param message
     */
    sendConsultWechatReplyTempMsg(message) {
        // 推送微信模板消息
        let selt = this;
        // 发送微信消息
        function sendWxMessage(openid, name, consult) {
            var replyContent = message.content;
            switch (Number.parseInt(message.contentType)) {
                case CONTENT_TYPES.Image:
                    replyContent = "[图片]";
                    break;
                case CONTENT_TYPES.Audio:
                    replyContent = "[语音]";
                    break;
                case CONTENT_TYPES.Article:
                    replyContent = "[文章]";
                    break;
                case CONTENT_TYPES.GoTo:
                case CONTENT_TYPES.SessionBegin:
                case CONTENT_TYPES.SessionEnd:
                    return;
                default:
                    break;
            }
            // 模板消息数据
            var msg = {
                touser: openid,
                template_id: config.wechatConfig.template.consultTemplate,
                url: config.wechatConfig.baseUrl + "/wx/html/yszx/html/consulting-doctor.html?openid=" + openid +
                "&consult=" + consult.consult + "&toUser=" + message.to,
                data: {
                    first: {value: "您的健康咨询有新的回复", color: "#000000"}
                    , remark: {value: "", color: "#000000"}
                    , keyword1: {value: consult.symptoms, color: "#000000"}
                    , keyword2: {value: replyContent, color: "#000000"}
                    , keyword3: {value: name, color: "#000000"}
                }
            };
            // 发送模板消息
            wechatUtil.sendWxTemplateMessage(msg);
        }
        // 查询居民openid
        patientRepo.getPatientOpenid(message.to, function (err, result) {
            if (err) {
                modelUtil.emitDbError(self.eventEmitter, "get patient openid failed", err);
@ -118,6 +182,7 @@ class Patient extends BaseModel {
            var openid = result && result.length > 0 ? result[0].openid : "";
            if (openid) {
                // 查询医生信息
                doctorRepo.getDoctorInfo(message.from, function (err, result) {
                    if (err) {
                        modelUtil.emitDbError(self.eventEmitter, "get doctor info failed", err);
@ -125,21 +190,37 @@ class Patient extends BaseModel {
                    }
                    if (result && result.length > 0) {
                        var name = result[0].name;
                        var msg = {
                            touser: openid,
                            template_id: config.wechatConfig.template.consultTemplate,
                            url: config.wechatConfig.baseUrl + "/wx/html/yszx/html/consulting-doctor.html?openid=" + openid +
                            "&consult=" + "" + "&toUser=" + message.to,
                            data: {
                                first: {value: "您的健康咨询有新的回复", color: "#000000"}
                                , remark: {value: "", color: "#000000"}
                                , keyword1: {value: "XXXX咨询", color: "#000000"}
                                , keyword2: {value: "XXXX回复", color: "#000000"}
                                , keyword3: {value: name, color: "#000000"}
                            }
                        };
                        wechatUtil.sendWxTemplateMessage(msg);
                        if (message.group) {
                            groupRepo.getGroupConsultInfo(message.group, function (err, result) {
                                if (err) {
                                    modelUtil.emitDbError(self.eventEmitter, "get patient and doctor consult info failed", err);
                                    return;
                                }
                                var consult = result && result.length > 0 ? result[0] : "";
                                if (consult) {
                                    sendWxMessage(openid, name, consult);
                                }
                            });
                        } else {
                            // 查询医生与居民对应的咨询信息
                            patientRepo.getPatientDoctorConsult(message.to, message.from, function (err, result) {
                                if (err) {
                                    modelUtil.emitDbError(self.eventEmitter, "get patient and doctor consult info failed", err);
                                    return;
                                }
                                var consult = result && result.length > 0 ? result[0] : "";
                                if (consult) {
                                    sendWxMessage(openid, name, consult);
                                }
                            });
                        }
                    } else {
                        modelUtil.emitDbError(self.eventEmitter, "can not find doctor info", err);
                    }
                });
            } else {

+ 233 - 89
src/doctor/models/search.js

@ -14,7 +14,6 @@ let BaseModel = require('./base.model');
let searchRepo = require('../repository/search.repo');
let modelUtil = require("../util/modelUtil");
let objectUtil = require('../util/objectUtil');
let log = require("../util/log.js");
const GROUP_TYPE = require('../include/commons').GROUP_TYPE;
@ -35,28 +34,102 @@ class Search extends BaseModel{
                return;
            }
            var data = {patients: [], chats: []};
            var data = {patients: [],group:[], chats: []};
            for (var i = 0; i < patients.length; ++i) {
                var patient = patients[i];
                data.patients.push({
                var p ={};
                console.log(patient.code);
                p= {
                    code: patient.code,
                    name: patient.name,
                    sex: patient.sex,
                    birthday: objectUtil.timestampToLong(patient.birthday),
                    avatar: patient.photo === null ? "" : patient.photo
                });
                }
                data.patients.push(p);
            }
            searchRepo.searchGroupPatients(userId, keyword, function (err, groups) {
                if (err) {
                    modelUtil.emitDbError(self.eventEmitter, "Search talk group failed", err);
                    return;
                }
                var group = null;
                for (var i = 0; i < groups.length; ++i) {
                    var t = groups[i];
                    group = {
                        code: t.code,
                        name: t.name,
                        members: t.con,
                    };
                    data.group.push(group);
                }
                searchRepo.searchPatientPM(userId, keyword, function (err, chats) {
                    if (err) {
                        modelUtil.emitDbError(self.eventEmitter, "Search patient on private messages failed", err);
                        return;
                    }
                    for (var i = 0; i < chats.length; ++i) {
                        var lastPatient = {code: '', name: '', sex: '', avatar: '',amount:'',content:'',chat:'',type:''};
                        var chat = chats[i];
                        console.log(JSON.stringify(chat));
                        lastPatient.code = chat.code;
                        lastPatient.name = chat.name;
                        lastPatient.sex = chat.sex;
                        lastPatient.birthday = objectUtil.timestampToLong(chat.birthday);
                        lastPatient.avatar = chat.photo === null ? "" : chat.photo;
                        lastPatient.amount = chat.amount;
                        lastPatient.chat = chat.chat;
                        lastPatient.content = chat.content;
                        lastPatient.type = chat.type;
                        lastPatient.msg_id =chat.msg_id;
                        data.chats.push(lastPatient);
                    }
                    modelUtil.emitData(self.eventEmitter, data);
                });
            });
        });
    }
    /**
     * 患者查询查看更多1.患者 2.内容 3.群组
     * @param userId
     * @param userRole
     * @param keyword
     * @param type
     */
    searchAboutPatientAll(userId, userRole, keyword,type) {
        let self = this;
        var data = [];
        if(type==1){
            searchRepo.searchPatients(userId, userRole, keyword, function (err, patients) {
                if (err) {
                    modelUtil.emitDbError(self.eventEmitter, "Search patient on basic information failed", err);
                    return;
                }
                for (var i = 0; i < patients.length; ++i) {
                    var patient = patients[i];
                    data.push({
                        code: patient.code,
                        name: patient.name,
                        sex: patient.sex,
                        birthday: objectUtil.timestampToLong(patient.birthday),
                        avatar: patient.photo === null ? "" : patient.photo
                    });
                }
                modelUtil.emitData(self.eventEmitter, data);
            });
        }
        if(type==3){
            searchRepo.searchPatientPM(userId, keyword, function (err, chats) {
                if (err) {
                    modelUtil.emitDbError(self.eventEmitter, "Search patient on private messages failed", err);
                    return;
                }
                for (var i = 0; i < chats.length; ++i) {
                    var lastPatient = {code: '', name: '', sex: '', avatar: '',amount:'',content:'',chat:'',type:''};
                    var chat = chats[i];
                    log.info(JSON.stringify(chat));
                    lastPatient.code = chat.code;
                    lastPatient.name = chat.name;
                    lastPatient.sex = chat.sex;
@ -66,11 +139,30 @@ class Search extends BaseModel{
                    lastPatient.chat = chat.chat;
                    lastPatient.content = chat.content;
                    lastPatient.type = chat.type;
                    data.chats.push(lastPatient);
                    data.push(lastPatient);
                }
                modelUtil.emitData(self.eventEmitter, data);
            });
        });
        }
        if(type==2){
            searchRepo.searchGroupPatients(userId, keyword, function (err, groups) {
                if (err) {
                    modelUtil.emitDbError(self.eventEmitter, "Search talk group failed", err);
                    return;
                }
                var group = null;
                for (var i = 0; i < groups.length; ++i) {
                    var t = groups[i];
                    group = {
                        code: t.code,
                        name: t.name,
                        members: t.con,
                    };
                    data.push(group);
                }
                modelUtil.emitData(self.eventEmitter, data);
            });
        }
    }
    /**
@ -86,7 +178,7 @@ class Search extends BaseModel{
        searchRepo.searchPatientPMList(userId, keyword,groupId,type, function (err, chats) {
            var data = [];
            if (err) {
                modelUtil.emitDbError(self.eventEmitter, "Search patient on private messages failed", err);
                modelUtil.emitDbError(self.eventEmitter, "Search searchPatientPMList on private messages failed", err);
                return;
            }
            for (var i = 0; i < chats.length; ++i) {
@ -99,6 +191,7 @@ class Search extends BaseModel{
                lastPatient.avatar = chat.photo === null ? "" : chat.photo;
                lastPatient.chat = chat.chat;
                lastPatient.content=chat.content;
                lastPatient.msg_id=chat.msg_id;
                data.push(lastPatient);
            }
            modelUtil.emitData(self.eventEmitter, data);
@ -111,117 +204,168 @@ class Search extends BaseModel{
     */
    searchAboutDoctor(userId, keyword) {
        let self = this;
        searchRepo.searchDoctors(userId, keyword, function (err, doctors) {
        //搜索单对单医生聊天
        searchRepo.searchP2Pdoctors(userId, keyword, function (err, doctors) {
            if (err) {
                modelUtil.emitDbError(self.eventEmitter, "Search doctor on basic information failed", err);
                return;
            }
            let data = {doctors: [], groups: [], chats: {doctors: [], groups: []}};
            for (let i = 0; i < doctors.length; ++i) {
                let doctor = doctors[i];
            var data = {doctors: [], groups: [],content:[]};
            for (var i = 0; i < doctors.length; ++i) {
                var doctor = doctors[i];
                data.doctors.push({
                    code: doctor.code,
                    name: doctor.name,
                    hospitalName:doctor.hospital_name,
                    sex: doctor.sex,
                    avatar: doctor.photo === null ? "" : doctor.photo
                });
            }
            // 搜索讨论组名称及成员名称
            searchRepo.searchGroups(userId, keyword, function (err, groups) {
            // 搜索讨论组名称及成员名称(讨论组)
            searchRepo.searchGroupDoctors(userId, keyword, function (err, groups) {
                if (err) {
                    modelUtil.emitDbError(self.eventEmitter, "Search talk group failed", err);
                    return;
                }
                let lastGroupCode = '';
                let lastGroup = null;
                for (let i = 0; i < groups.length; ++i) {
                    let group = groups[i];
                    if (lastGroupCode !== group.code) {
                        lastGroupCode = group.code;
                        lastGroup = {
                            code: group.code,
                            name: group.name,
                            type: GROUP_TYPE.DiscussionGroup,
                            members: []
                var group = null;
                for (var i = 0; i < groups.length; ++i) {
                        var t = groups[i];
                        group = {
                            code: t.code,
                            name: t.name,
                            members: t.con,
                            groupType:t.group_type
                        };
                        data.groups.push(lastGroup);
                    }
                    lastGroup.members.push({
                        code: group.member_code,
                        name: group.member_name
                    });
                        data.groups.push(group);
                }
                // 搜索医生间的私信
                searchRepo.searchDoctorMessages(userId, keyword, function (err, messages) {
                searchRepo.searchDoctorsContent(userId, keyword, function (err, messages) {
                    if (err) {
                        modelUtil.emitDbError(self.eventEmitter, "Search doctor private messages failed", err);
                        return;
                    }
                    var message = null;
                    for (var i = 0; i < messages.length; ++i) {
                        var t = messages[i];
                        message = {
                            code: t.code,
                            name: t.name,
                            amount: t.amount,
                            content:t.content,
                            type:t.type,
                            msg_id:t.msg_id,
                            groupType:t.group_type,
                            avatar:t.photo
                    let lastDoctor;
                    let lastDoctorCode = '';
                    for (let i = 0; i < messages.length; ++i) {
                        let message = messages[i];
                        if (lastDoctorCode !== message.code) {
                            lastDoctorCode = message.code;
                            lastDoctor = {
                                code: message.code,
                                name: message.name,
                                photo: message.photo === null ? "" : message.photo,
                                messages: []
                            };
                            data.chats.doctors.push(lastDoctor);
                        }
                        lastDoctor.messages.push({
                            id: message.msg_id,
                            content: message.content
                        });
                        };
                        data.content.push(message);
                    }
                    // 搜索医生间的讨论组消息
                    searchRepo.searchGroupMessages(userId, keyword, function (err, messages) {
                        if (err) {
                            modelUtil.emitDbError(self.eventEmitter, "Search doctor group messages failed", err);
                            return;
                        }
                        // g.code, g.name, gm.msg_id, gm.content
                        let lastGroup;
                        let lastGroupCode = '';
                        for (let i = 0; i < messages.length; ++i) {
                            let message = messages[i];
                            if (lastGroupCode !== message.code) {
                                lastGroupCode = message.code;
                                lastGroup = {
                                    code: message.code,
                                    name: message.name,
                                    messages: []
                                };
                                data.chats.groups.push(lastGroup);
                            }
                            lastGroup.messages.push({
                                id: message.msg_id,
                                content: message.content
                            });
                        }
                        modelUtil.emitData(self.eventEmitter, data);
                    modelUtil.emitData(self.eventEmitter, data);
                    });
                });
            });
        });
    }
    searchDoctorMore(userId,keyword,type){
        let self = this;
        var data = [];
        if(type==1){
            searchRepo.searchP2Pdoctors(userId, keyword, function (err, doctors) {
                if (err) {
                    modelUtil.emitDbError(self.eventEmitter, "Search doctor on basic information failed", err);
                    return;
                }
                for (var i = 0; i < doctors.length; ++i) {
                    var doctor = doctors[i];
                    data.push({
                        code: doctor.code,
                        name: doctor.name,
                        hospitalName:doctor.name,
                        sex: doctor.sex,
                        avatar: doctor.photo === null ? "" : doctor.photo
                    });
                }
                modelUtil.emitData(self.eventEmitter, data);
            });
        }else if(type==2){
            searchRepo.searchGroupDoctors(userId, keyword, function (err, groups) {
                if (err) {
                    modelUtil.emitDbError(self.eventEmitter, "Search talk group failed", err);
                    return;
                }
                var group = null;
                for (var i = 0; i < groups.length; ++i) {
                    var t = groups[i];
                    group = {
                        code: t.code,
                        name: t.name,
                        members: t.con,
                        groupType:t.group_type
                    };
                    data.push(group);
                }
                modelUtil.emitData(self.eventEmitter, data);
            });
        }else if(type==3){
            searchRepo.searchDoctorsContent(userId, keyword, function (err, messages) {
                if (err) {
                    modelUtil.emitDbError(self.eventEmitter, "Search doctor private messages failed", err);
                    return;
                }
                var message = null;
                for (var i = 0; i < messages.length; ++i) {
                    var t = messages[i];
                    message = {
                        code: t.code,
                        name: t.name,
                        amount: t.amount,
                        content:t.content,
                        type:t.type,
                        msg_id:t.msg_id,
                        groupType:t.group_type
                    };
                    data.push(message);
                }
                modelUtil.emitData(self.eventEmitter, data);
            });
        }
    }
    /**
     * 搜索医生聊天详情
     * @param userId 当前医生ID
     * @param keyword 关键字
     * @param groupcode 群组code
     * @param type type =1 p2p type = 2群组
     */
    searchDoctorContentDetail(userId,keyword,groupcode,type){
            let self = this;
            var data = [];
            searchRepo.searchDoctorsContentDetail(userId, keyword,groupcode,type, function (err, doctors) {
                if (err) {
                    modelUtil.emitDbError(self.eventEmitter, "Search doctor on basic information failed", err);
                    return;
                }
                for (var i = 0; i < doctors.length; ++i) {
                    var doctor = doctors[i];
                    data.push({
                        code: doctor.code,
                        name: doctor.name,
                        content:doctor.content,
                        msg_id:doctor.msg_id,
                        avatar:doctor.photo,
                        groupType:doctor.group_type
                    });
                }
                modelUtil.emitData(self.eventEmitter, data);
            });
    }
}
module.exports = Search;

+ 40 - 27
src/doctor/repository/group.msg.repo.js

@ -29,21 +29,28 @@ exports.findAllMessages = function (groupId, contentType, start, end, count, han
 * @param handler
 */
exports.findAllGroupsWithDoctor = function (userId, handler) {
    var sql = "SELECT * FROM (" +
        " 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 ," +
        " ( SELECT new_msg_count, from_gid  FROM  msg_statistic  WHERE uid =?  GROUP BY from_gid  ORDER BY  `timestamp` DESC ) msgcount " +
        " WHERE d.code = ? AND d.code = m.doctor_code AND msgcount.from_gid=ms.from_gid 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, '2' group_type " +
        " FROM wlyy.wlyy_talk_group g, wlyy.wlyy_talk_group_member m, wlyy.wlyy_doctor d, msg_statistic ms, " +
        " ( SELECT new_msg_count, from_gid  FROM  msg_statistic  WHERE uid =?  GROUP BY from_gid  ORDER BY  `timestamp` DESC ) msgcount " +
        " WHERE d.code = ? AND d.code = m.member_code AND msgcount.from_gid=ms.from_gid AND m.group_code = g.code AND g.type=2  AND g.code = ms.from_gid group by m.group_code, m.group_name" +
        ") X ORDER BY timestamp DESC";
    //var sql = "SELECT * FROM (" +
    //    " 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 ," +
    //    " ( SELECT new_msg_count, from_gid  FROM  msg_statistic  WHERE uid =?  GROUP BY from_gid  ORDER BY  `timestamp` DESC ) msgcount " +
    //    " WHERE d.code = ? AND d.code = m.doctor_code AND msgcount.from_gid=ms.from_gid 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, '2' group_type " +
    //    " FROM wlyy.wlyy_talk_group g, wlyy.wlyy_talk_group_member m, wlyy.wlyy_doctor d, msg_statistic ms, " +
    //    " ( SELECT new_msg_count, from_gid  FROM  msg_statistic  WHERE uid =?  GROUP BY from_gid  ORDER BY  `timestamp` DESC ) msgcount " +
    //    " WHERE d.code = ? AND d.code = m.member_code AND msgcount.from_gid=ms.from_gid AND m.group_code = g.code AND g.type=2  AND g.code = ms.from_gid group by m.group_code, m.group_name" +
    //    ") X ORDER BY timestamp DESC";
    var  sql="SELECT g.`code`, g.`name`, s.last_content_type, s.last_content, s. TIMESTAMP as timestamp, s.new_msg_count, g.type AS group_type " +
        "FROM msg_group w, wlyy.wlyy_talk_group g, wlyy.wlyy_talk_group_member t, msg_statistic s " +
        "WHERE w.to_gid = g.`code` AND t.type < 4 AND t.group_code = g. CODE " +
        "AND w.to_gid IN ( SELECT w1.group_code FROM wlyy.wlyy_talk_group_member w1 WHERE w1.member_code = ? AND w1. STATUS = 1 ) " +
        "AND W.to_gid NOT IN (SELECT w1.group_code FROM wlyy.wlyy_talk_group_member w1 WHERE w1.group_code = g.code and  w1. STATUS = 1  AND TYPE =4)"+
        "AND s.from_gid = g. CODE AND s.uid = ? GROUP BY g. NAME, g.`code` ORDER BY w.msg_id DESC;";
    imRepo.execQuery({
        "sql": sql,
        "args": [userId, userId, userId, userId],
        "args": [userId, userId],
        "handler": handler
    });
};
@ -55,21 +62,27 @@ exports.findAllGroupsWithDoctor = function (userId, handler) {
 * @param handler
 */
exports.findAllGroupsWithPatient = function (userId, handler) {
    var sql = "SELECT * FROM (" +
        " SELECT g.code, g.name, ms.last_content_type, ms.last_content, ms.timestamp, msgcount.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 , " +
        " ( SELECT new_msg_count, from_gid  FROM  msg_statistic  WHERE uid =?  GROUP BY from_gid  ORDER BY  `timestamp` DESC ) msgcount " +
        " WHERE ((ms.uid = ? and ms.from_uid = p.code)) " +
        " and ms.from_gid = g.code and ms.msg_type = 2 AND ms.last_content_type in (1,2,3,5,6) AND msgcount.from_gid=ms.from_gid " +
        " UNION " +
        " SELECT m.group_code code, m.group_name 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, " +
        " ( SELECT new_msg_count, from_gid  FROM  msg_statistic  WHERE uid =?  GROUP BY from_gid  ORDER BY  `timestamp` DESC ) msgcount " +
        " WHERE d.code = ? AND d.code = m.member_code AND msgcount.from_gid=ms.from_gid " +
        "   AND m.group_code = g.code AND g.type=1  AND g.code = ms.from_gid group by m.group_code, m.group_name" +
        ") X ORDER BY timestamp DESC";
    //var sql = "SELECT * FROM (" +
    //    " SELECT g.code, g.name, ms.last_content_type, ms.last_content, ms.timestamp, msgcount.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 , " +
    //    " ( SELECT new_msg_count, from_gid  FROM  msg_statistic  WHERE uid =?  GROUP BY from_gid  ORDER BY  `timestamp` DESC ) msgcount " +
    //    " WHERE ((ms.uid = ? and ms.from_uid = p.code)) " +
    //    " and ms.from_gid = g.code and ms.msg_type = 2 AND ms.last_content_type in (1,2,3,5,6) AND msgcount.from_gid=ms.from_gid " +
    //    " UNION " +
    //    " SELECT m.group_code code, m.group_name 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, " +
    //    " ( SELECT new_msg_count, from_gid  FROM  msg_statistic  WHERE uid =?  GROUP BY from_gid  ORDER BY  `timestamp` DESC ) msgcount " +
    //    " WHERE d.code = ? AND d.code = m.member_code AND msgcount.from_gid=ms.from_gid " +
    //    "   AND m.group_code = g.code AND g.type=1  AND g.code = ms.from_gid group by m.group_code, m.group_name" +
    //    ") X ORDER BY timestamp DESC";
    var sql ="SELECT g.`code`, g.`name`, s.last_content_type, s.last_content, s. TIMESTAMP as timestamp , s.new_msg_count, g.type group_type " +
              "FROM msg_group w, wlyy.wlyy_talk_group g, wlyy.wlyy_talk_group_member t, msg_statistic s " +
              "WHERE w.to_gid = g.`code` AND t.group_code = g. CODE " +
              "AND w.to_gid IN ( SELECT w1.group_code FROM wlyy.wlyy_talk_group_member w1 WHERE w1.member_code =? ) " +
              "AND s.uid = ? AND s.from_gid IS NOT NULL AND s.from_gid  = g.code GROUP BY g. NAME, g.`code` ORDER BY w.msg_id DESC;"
    imRepo.execQuery({
        "sql": sql,

+ 10 - 0
src/doctor/repository/group.repo.js

@ -85,3 +85,13 @@ exports.getMembersAvatar = function (groups, handler) {
        "handler": handler
    });
};
exports.getGroupConsultInfo = function (code, handler) {
    var sql = "select t.* from wlyy_talk_group g join wlyy_consult_team t on g.consult_code = t.consult where g.code = ? and g.type = 1";
    wlyyRepo.execQuery({
        "sql": sql,
        "args": [code],
        "handler": handler
    });
}

+ 10 - 0
src/doctor/repository/patient.repo.js

@ -26,4 +26,14 @@ exports.getPatientOpenid = function (code, handler) {
        "args": [code],
        "handler": handler
    });
};
exports.getPatientDoctorConsult = function (patient, doctor, handler) {
    var sql = "select * from wlyy_consult_team where patient = ? and doctor = ? and status = 0 and del = '1' ";
    wlyyDb.execQuery({
        "sql": sql,
        "args": [patient, doctor],
        "handler": handler
    });
};

+ 24 - 14
src/doctor/repository/private.msg.repo.js

@ -58,17 +58,23 @@ exports.findAllMessages = function (to, from, contentType, start, end, count, cl
 * @param handler
 */
exports.findAllP2PWithDoctor = function (userId, handler) {
    var sql = "SELECT DISTINCT d.code, d.name, d.sex, d.photo, ms3.last_content_type, ms3.last_content, ms3.timestamp, ms3.new_msg_count " +
        "FROM (SELECT DISTINCT CASE WHEN ms1.timestamp > ms2.timestamp THEN ms1.id ELSE ms2.id END id " +
        "      FROM msg_statistic ms1, msg_statistic ms2 " +
        "      WHERE ms1.from_gid IS NULL AND ms2.from_gid IS NULL " +
        "            AND ms1.uid = ms2.peer_uid AND ms1.peer_uid = ms2.uid) x, msg_statistic ms3, wlyy.wlyy_doctor d " +
        "WHERE x.id = ms3.id AND ms3.last_content_type in (1,2,3,5,6) AND " +
        "(ms3.uid = ? AND ms3.peer_uid = d.code) GROUP BY d.code, d.name ORDER BY ms3.timestamp DESC";
    //var sql = "SELECT DISTINCT d.code, d.name, d.sex, d.photo, ms3.last_content_type, ms3.last_content, ms3.timestamp, ms3.new_msg_count " +
    //    "FROM (SELECT DISTINCT CASE WHEN ms1.timestamp > ms2.timestamp THEN ms1.id ELSE ms2.id END id " +
    //    "      FROM msg_statistic ms1, msg_statistic ms2 " +
    //    "      WHERE ms1.from_gid IS NULL AND ms2.from_gid IS NULL " +
    //    "            AND ms1.uid = ms2.peer_uid AND ms1.peer_uid = ms2.uid) x, msg_statistic ms3, wlyy.wlyy_doctor d " +
    //    "WHERE x.id = ms3.id AND ms3.last_content_type in (1,2,3,5,6) AND " +
    //    "(ms3.uid = ? AND ms3.peer_uid = d.code) GROUP BY d.code, d.name ORDER BY ms3.timestamp DESC";
    var sql ="SELECT d. CODE as code, d. NAME as name,  d.sex, d.photo, s.last_content_type, s.last_content, s. TIMESTAMP as timestamp, s.new_msg_count " +
        "FROM msg_p2p p, wlyy.wlyy_doctor d, msg_statistic s " +
        "WHERE (( p.from_uid = d. CODE AND p.to_uid = ? ) OR ( p.to_uid = d. CODE AND p.from_uid = ? )) " +
        "AND s.from_gid IS NULL AND s.uid = ? " +
        "AND s.peer_uid = d. CODE " +
        "GROUP BY d. NAME, d. CODE, d.hospital_name, d.job_name, d.sex, d.photo ORDER BY p.msg_id DESC"
    imRepo.execQuery({
        "sql": sql,
        "args": [userId, userId],
        "args": [userId, userId,userId],
        "handler": handler
    });
};
@ -80,14 +86,18 @@ exports.findAllP2PWithDoctor = function (userId, handler) {
 * @param handler
 */
exports.findAllP2PWithPatient = function (userId, handler) {
    var sql = "SELECT p.code, p.name, p.birthday, p.sex, p.photo, ms.last_content_type, ms.last_content, ms.timestamp, ms.new_msg_count " +
        "FROM msg_statistic ms, wlyy.wlyy_patient p " +
        "WHERE ms.msg_type = 1 AND ms.last_content_type in (1,2,3,5,6) " +
        "AND ((ms.from_uid = ? AND ms.uid = p.code) OR (ms.uid = ? AND ms.from_uid = p.code)) ORDER BY ms.timestamp";
    //var sql = "SELECT p.code, p.name, p.birthday, p.sex, p.photo, ms.last_content_type, ms.last_content, ms.timestamp, ms.new_msg_count " +
    //    "FROM msg_statistic ms, wlyy.wlyy_patient p " +
    //    "WHERE ms.msg_type = 1 AND ms.last_content_type in (1,2,3,5,6) " +
    //    "AND ((ms.from_uid = ? AND ms.uid = p.code) OR (ms.uid = ? AND ms.from_uid = p.code)) ORDER BY ms.timestamp";
    var sql="SELECT p1. CODE as code , p1. NAME as name, p1.birthday, p1.sex, p1.photo, w.last_content, w.last_content_type, w. TIMESTAMP as timestamp, w.new_msg_count " +
             "FROM msg_p2p p, wlyy.wlyy_patient p1, msg_statistic w " +
             "WHERE (( p.to_uid = p1.`code` AND p.from_uid = ? ) OR ( p.from_uid = p1.`code` AND p.to_uid = ? )) " +
             "AND p.type IN (1, 2, 3, 5, 6) AND w.uid = ? AND w.peer_uid = p1.`code` AND w.from_gid IS NULL " +
        "GROUP BY p1. CODE, p1. NAME, p1.birthday, p1.sex, p1.photo"
    imRepo.execQuery({
        "sql": sql,
        "args": [userId, userId],
        "args": [userId, userId,userId],
        "handler": handler
    });
};

+ 8 - 6
src/doctor/repository/search.repo.js

@ -139,14 +139,15 @@ module.exports.searchP2Pdoctors = function(userId,keyword,handler){
 * 搜索聊天过的内容
 */
module.exports.searchDoctorsContent = function(userId,keyword,handler){
    var sql ="SELECT wt. CODE as code, wt.`name`, count(mg.content) AS amount, max(mg.content) AS content,max(mg.msg_id) as msg_id , 2 AS type,wt.type as group_type " +
    var sql ="SELECT wt. CODE as code, wt.`name`, count(mg.content) AS amount, max(mg.content) AS content,max(mg.msg_id) as msg_id , 2 AS type,wt.type as group_type,'' as photo " +
             "FROM msg_group mg, wlyy.wlyy_talk_group wt " +
             "WHERE mg.to_gid = wt.`code` " +
             "AND mg.content LIKE ? " +
             "AND wt.`code` IN ( SELECT me.group_code FROM wlyy.wlyy_talk_group_member me WHERE me.member_code = ? ) " +
             "AND wt.`code` NOT IN (SELECT me.group_code FROM wlyy.wlyy_talk_group_member me WHERE me.group_code = wt.code and  me.STATUS = 1  AND me.TYPE =4) "+
             "GROUP BY wt. CODE, wt.`name`,wt.type " +
             "UNION ALL " +
             "SELECT d. CODE as code, d. NAME as name, sum(1) AS amount, max(mp.content) AS content,max(mp.msg_id) as msg_id, 1 AS type ,0 as group_type " +
             "SELECT d. CODE as code, d. NAME as name, sum(1) AS amount, max(mp.content) AS content,max(mp.msg_id) as msg_id, 1 AS type ,0 as group_type,d.photo as photo " +
             "FROM msg_p2p mp, wlyy.wlyy_doctor d " +
             "WHERE (( mp.from_uid = d. CODE AND mp.to_uid = ? ) OR ( mp.to_uid = d. CODE AND mp.from_uid = ? )) " +
             "AND mp.content LIKE ?  GROUP BY d. NAME, d. CODE";
@ -163,7 +164,7 @@ module.exports.searchDoctorsContent = function(userId,keyword,handler){
 */
module.exports.searchDoctorsContentDetail = function(userId,keyword,groupcode,type,handler){
    if(type==2){
        var groupsql ="SELECT wt. CODE as code, wt.`name`,mg.content,mg.msg_id,wt.type as group_type" +
        var groupsql ="SELECT wt. CODE as code, wt.`name`,mg.content,mg.msg_id,wt.type as group_type " +
            "FROM msg_group mg, wlyy.wlyy_talk_group wt " +
            "WHERE mg.to_gid = wt.`code` " +
            "AND mg.content LIKE ? " +
@ -175,14 +176,14 @@ module.exports.searchDoctorsContentDetail = function(userId,keyword,groupcode,ty
        });
    }
    if(type==1){
         var p2psql  =    "SELECT d. CODE as code, d. NAME as name, mp.content,mp.msg_id,0 as group_type " +
         var p2psql  =  "SELECT d. CODE as code, d. NAME as name,d.photo, mp.content,mp.msg_id,0 as group_type " +
            "FROM msg_p2p mp, wlyy.wlyy_doctor d " +
            "WHERE (( mp.from_uid = ? AND mp.to_uid = ? ) OR ( mp.to_uid = ? AND mp.from_uid = ? )) " +
            "WHERE (( mp.from_uid = ? AND mp.to_uid = ? and mp.from_uid = d.`code`) OR ( mp.to_uid = ? AND mp.from_uid = ? and mp.to_uid = d.`code` )) " +
            "AND mp.content LIKE ? ;";
            imRepo.execQuery({
                "sql": p2psql,
                "args": [userId,groupcode,userId,userId,groupcode,"%" + keyword + "%"],
                "args": [userId,groupcode,userId,groupcode,"%" + keyword + "%"],
                "handler": handler
            });
        }
@ -199,6 +200,7 @@ module.exports.searchGroupDoctors = function(userId,keyword,handler){
        "WHERE w.to_gid = g.`code` and  t.type<4 " +
        "AND t.group_code = g. CODE " +
        "AND w.to_gid IN ( SELECT w1.group_code FROM wlyy.wlyy_talk_group_member w1 WHERE w1.member_code = ? ) " +
        "AND W.to_gid NOT IN (SELECT w1.group_code FROM wlyy.wlyy_talk_group_member w1 WHERE w1.group_code = g.code and  w1. STATUS = 1  AND w1.TYPE =4) "+
        "AND ( g.`name` LIKE ? OR t.member_name LIKE ?) " +
        "GROUP BY g. NAME, g.`code` order by w.msg_id desc";
    imRepo.execQuery({

+ 2 - 0
src/doctor/repository/stats.msg.repo.js

@ -48,6 +48,7 @@ exports.getChatAllUnReadCount = function (userId, handler) {
exports.updatePrivateChatSummary = function (userId, peerId, from, type, content, handler) {
    var uuid = userId + '_' + peerId;
    if (userId == from) {
        //userId  = from ,peerId = to from = from
        // 更新自身的统计信息
        var sql = "INSERT INTO msg_statistic (uid,uuid,from_uid,peer_uid,msg_type,last_content_type,last_content,new_msg_count) " +
            "VALUES (?,?,?,?,?,?,?,?) ON DUPLICATE KEY UPDATE peer_uid=?,last_content_type=?,last_content=?";
@ -58,6 +59,7 @@ exports.updatePrivateChatSummary = function (userId, peerId, from, type, content
            "handler": handler
        });
    } else {
        //userId  = to ,peerId = from, from = from
        var sql = "INSERT INTO msg_statistic (uid,uuid,from_uid,peer_uid,msg_type,last_content_type,last_content,new_msg_count) " +
            "VALUES (?,?,?,?,?,?,?,?) ON DUPLICATE KEY UPDATE peer_uid=?,last_content_type=?,last_content=?,new_msg_count=new_msg_count+1";
        // 更新对端的统计信息