Browse Source

发送模板消息修改

yeshijie 7 years ago
parent
commit
2da715370e

+ 122 - 34
src/server/models/client/wechat.client.js

@ -218,25 +218,41 @@ class WechatClient extends RedisModel {
        async.waterfall([
                // 获取微信openid
                function (callback) {
                    PatientRepo.findWechatOpenId(targetUserId, function (err, result) {
                    PatientRepo.findWechatOpenIds(targetUserId, function (err, res) {
                        if (err) {
                            ModelUtil.logError("Get wechat openid failed", err);
                            return;
                        }
                        var map = new Map();
                        res.forEach(function (participant) {
                            let openid = participant.openid;
                            if (targetUserId==participant.code) {
                                if (!openid) {
                                    ModelUtil.logError("User haven't bound with wechat, user id: " + targetUserId);
                                }else {
                                    map.set("openid",participant);
                                }
                            }else {
                                if(!map.has(openid)){
                                    map.set(openid,participant);
                                }
                            }
                        })
                        let openid = result && result.length > 0 ? result[0].openid : null;
                        if (!openid) {
                            ModelUtil.logError("User haven't bound with wechat, user id: " + targetUserId);
                            return;
                        }
                        log.warn("Send via wechat message template, user id: " + targetUserId + ", openid: " + openid);
                        //
                        // let openid = result && result.length > 0 ? result[0].openid : null;
                        // if (!openid) {
                        //     ModelUtil.logError("User haven't bound with wechat, user id: " + targetUserId);
                        //     return;
                        // }
                        //
                        // log.warn("Send via wechat message template, user id: " + targetUserId + ", openid: " + openid);
                        callback(null, openid);
                        callback(null, map);
                    });
                },
                // 获取议题信息
                function (openid, callback) {
                function (map, callback) {
                    TopicRepo.findLastTopicStatus(message.session_id, function (err, res) {
                        if (err) {
                            ModelUtil.logError("Get topic failed", err);
@ -247,12 +263,11 @@ class WechatClient extends RedisModel {
                            ModelUtil.logError("Unable to find session last topic");
                            return;
                        }
                        callback(null, openid, message.sender_name, res[0]);
                        callback(null, map, message.sender_name, res[0]);
                    });
                },
                // 发送消息
                function (openid, senderName, topic, callback) {
                function (map, senderName, topic,callback) {
                    let replyContent = message.content;
                    switch (Number.parseInt(message.content_type)) {
                        case CONTENT_TYPES.Image:
@ -265,29 +280,102 @@ class WechatClient extends RedisModel {
                            break;
                    }
                    let first = "您的健康咨询有新的回复";
                    if(message.receiver&&message.receiver != targetUserId){
                        first = "您的家人("+message.receiverName+")的健康咨询有新的回复";
                    }else {
                        message.receiver = targetUserId;
                    }
                    var patient = map.get("openid");
                    map.delete("openid");
                    let mainOpenId = patient.openid;
                    let agent = topic.agent;
                    if(agent){//代理人发起的议题
                        var agentOpenid = "";
                        if(map.size>0){
                            for(var key of map.keys()){
                                var member = map.get(key);
                                if(agent == member.code){
                                    agentOpenid = key;
                                    var openid = key;
                                    var first = "您的家人("+patient.name+")的健康咨询有新的回复";
                                    // 发送模板消息
                                    WechatSDK.sendTemplateMessage({
                                        touser: openid,
                                        template_id: config.wechatConfig.template.consultTemplate,
                                        url: config.wechatConfig.baseUrl + "/wx/html/yszx/html/consulting-doctor.html?openid=" + openid +
                                        "&consult=" + topic.id + "&toUser=" + member.code + "&toName=" + member.name+"&represented="+patient.code,
                                        data: {
                                            first: {value: first, color: "#000000"}
                                            , remark: {value: "", color: "#000000"}
                                            , keyword1: {value: topic.description, color: "#000000"}
                                            , keyword2: {value: replyContent, color: "#000000"}
                                            , keyword3: {value: senderName, color: "#000000"}
                                        }
                                    }, function (err, res) {
                                        err ? log.error(err) : log.info(res);
                                    });
                                }
                            }
                        }
                        if(mainOpenId!=agentOpenid){
                            var openid = mainOpenId;
                            var first = "您的健康咨询有新的回复";
                            // 发送模板消息
                            WechatSDK.sendTemplateMessage({
                                touser: openid,
                                template_id: config.wechatConfig.template.consultTemplate,
                                url: config.wechatConfig.baseUrl + "/wx/html/yszx/html/consulting-doctor.html?openid=" + openid +
                                "&consult=" + topic.id + "&toUser=" + targetUserId + "&toName=" + targetUserName+"&represented="+patient.code,
                                data: {
                                    first: {value: first, color: "#000000"}
                                    , remark: {value: "", color: "#000000"}
                                    , keyword1: {value: topic.description, color: "#000000"}
                                    , keyword2: {value: replyContent, color: "#000000"}
                                    , keyword3: {value: senderName, color: "#000000"}
                                }
                            }, function (err, res) {
                                err ? log.error(err) : log.info(res);
                            });
                        }
                    // 发送模板消息
                    WechatSDK.sendTemplateMessage({
                        touser: openid,
                        template_id: config.wechatConfig.template.consultTemplate,
                        url: config.wechatConfig.baseUrl + "/wx/html/yszx/html/consulting-doctor.html?openid=" + openid +
                        "&consult=" + topic.id + "&toUser=" + targetUserId + "&toName=" + targetUserName+"&represented="+message.receiver,
                        data: {
                            first: {value: first, color: "#000000"}
                            , remark: {value: "", color: "#000000"}
                            , keyword1: {value: topic.description, color: "#000000"}
                            , keyword2: {value: replyContent, color: "#000000"}
                            , keyword3: {value: senderName, color: "#000000"}
                    }else {//自己发起的议题
                        // 发送模板消息
                        WechatSDK.sendTemplateMessage({
                            touser: mainOpenId,
                            template_id: config.wechatConfig.template.consultTemplate,
                            url: config.wechatConfig.baseUrl + "/wx/html/yszx/html/consulting-doctor.html?openid=" + mainOpenId +
                            "&consult=" + topic.id + "&toUser=" + targetUserId + "&toName=" + targetUserName+"&represented="+patient.code,
                            data: {
                                first: {value: "您的健康咨询有新的回复", color: "#000000"}
                                , remark: {value: "", color: "#000000"}
                                , keyword1: {value: topic.description, color: "#000000"}
                                , keyword2: {value: replyContent, color: "#000000"}
                                , keyword3: {value: senderName, color: "#000000"}
                            }
                        }, function (err, res) {
                            err ? log.error(err) : log.info(res);
                        });
                        if(map.size>0){
                            for(var key of map.keys()){
                                if(key!=mainOpenId){
                                    var member = map.get(key);
                                    var openid = key;
                                    var first = "您的家人("+patient.name+")的健康咨询有新的回复";
                                    // 发送模板消息
                                    WechatSDK.sendTemplateMessage({
                                        touser: openid,
                                        template_id: config.wechatConfig.template.consultTemplate,
                                        url: config.wechatConfig.baseUrl + "/wx/html/yszx/html/consulting-doctor.html?openid=" + openid +
                                        "&consult=" + topic.id + "&toUser=" + member.code + "&toName=" + member.name+"&represented="+patient.code,
                                        data: {
                                            first: {value: first, color: "#000000"}
                                            , remark: {value: "", color: "#000000"}
                                            , keyword1: {value: topic.description, color: "#000000"}
                                            , keyword2: {value: replyContent, color: "#000000"}
                                            , keyword3: {value: senderName, color: "#000000"}
                                        }
                                    }, function (err, res) {
                                        err ? log.error(err) : log.info(res);
                                    });
                                }
                            }
                        }
                    }, function (err, res) {
                        err ? log.error(err) : log.info(res);
                    });
                    }
                    callback(null, null);
                }

+ 0 - 14
src/server/models/sessions/sessions.js

@ -1408,20 +1408,6 @@ class Sessions extends RedisModel {
        Users.isPatientId(targetUserId, function (err, isPatient) {
            if (isPatient) {
                WechatClient.sendMessage(targetUserId, targetUserName, message);
                // 推送代理人消息
                ParticipantRepo.findFamilyIds(message.session_id, function (err, res) {
                    if (err) {
                        logger.error(err);
                    } else {
                        res.forEach(function (participant) {
                            if (participant.id != message.sender_id){
                                message.receiver = participant.pid;
                                message.receiverName = participant.pname;
                                WechatClient.sendMessage(participant.id, participant.name, message);
                            }
                        })
                    }
                })
            }
            else {
                if(sessionType==SESSION_TYPES.P2P){

+ 17 - 0
src/server/repository/mysql/patient.repo.js

@ -32,6 +32,23 @@ class PatientRepo {
        });
    }
    /**
     * 查找自己和家人的openid
     * @param code
     * @param handler
     */
    static findWechatOpenIds(code, handler){
        var sql = "SELECT m.family_member code,p.name,p.openid from wlyy.wlyy_patient p,wlyy.wlyy_patient_family_member m" +
            "  WHERE m.patient = ? and m.family_member=p.code and p.openid is not null" +
            " UNION ALL" +
            "  SELECT p.code,p.name,p.openid  from wlyy.wlyy_patient p WHERE p.code = ?";
        ImDb.execQuery({
            "sql": sql,
            "args": [code,code],
            "handler": handler
        });
    }
    // TODO: 不能直接访问三师库
    static getPatientDoctorConsult(patient, doctor, handler) {
        var sql = "select * from wlyy_consult_team where patient = ? and doctor = ? and status = 0 and del = '1' ";

+ 1 - 1
src/server/repository/mysql/topics.repo.js

@ -189,7 +189,7 @@ class TopicRepo {
    static findTopicStatus(topicId, handler) {
        let sql = "select id, name, description, status from " + DB_TABLES.Topics + " where id = ?";
        let sql = "select id, name, description, status,agent from " + DB_TABLES.Topics + " where id = ?";
        ImDb.execQuery({
            sql: sql,