Jelajahi Sumber

Merge branch 'im-internet-hospital' of http://192.168.1.220:10080/Amoy/im.doctor into im-internet-hospital

wangzhinan 2 tahun lalu
induk
melakukan
895a90de2f

+ 17 - 6
src/server/models/client/app.client.js

@ -27,6 +27,7 @@ const PLATFORMS = require('../../include/commons').PLATFORM;
let configFile = require('../../include/commons').CONFIG_FILE;
let config = require('../../resources/config/' + configFile);
const {SOCKET_TYPES} = require("../../include/commons");
class AppClient extends RedisModel {
    constructor() {
@ -194,13 +195,23 @@ class AppClient extends RedisModel {
            if(message.type ==1){
                log.info("该消息是系统提醒消息,不做推送,:消息内容"+message.content)
            }else{
                HlwyyAssistantSDK.request("hz_cloudCare",tipMessage,targetId,message.content,url,params, function (err, res) {
                    if(err){
                        log.error(err);
                    }else {
                        log.info(res);
                if(targetId!=message.sender_id){
                    let patient_system_Client = clientCache.findByIdAndType("patient_system_"+targetId,SOCKET_TYPES.PATIENT_SYSTEM);
                    let doctorClient = clientCache.findByIdAndType("doctor_system_"+targetId,SOCKET_TYPES.DOCTOR_SYSTEM);
                    if(doctorClient||patient_system_Client){
                        log.info("外壳socket在线不推送targetId:"+targetId+",sender_id"+message.sender_id);
                    }else{
                        HlwyyAssistantSDK.request("hz_cloudCare",tipMessage,targetId,message.content,url,params, function (err, res) {
                            if(err){
                                log.error(err);
                            }else {
                                log.info(res);
                            }
                        });
                    }
                });
                }else {
                    log.info("自己不推送targetId:"+targetId+",sender_id"+message.sender_id);
                }
            }
        }
    }

+ 111 - 3
src/server/models/client/wechat.client.js

@ -62,7 +62,7 @@ class WechatClient extends RedisModel {
     * @param targetUserId
     * @param message 消息体
     */
    static sendMessage(targetUserId, targetUserName, message) {
    static sendMessage(targetUserId, targetUserName, message,sessionType,sender_name) {
        if (message&&(message.content_type == CONTENT_TYPES.PlainText ||
            message.content_type == CONTENT_TYPES.Image ||
            message.content_type == CONTENT_TYPES.Audio||
@ -186,8 +186,15 @@ class WechatClient extends RedisModel {
                }
                if(isSendWXTem){
                    //发送第三方接口的微信模版消息
                    WechatClient.sendThirdMessageTemplate(targetUserId, targetUserName, message);
                    if (sessionType==SESSION_TYPES.P2P){
                        //家属p2p 微信模板消息
                        WechatClient.sendP2PMessageTemplate(targetUserId,targetUserName,message,sender_name);
                    }else {
                        //发送第三方接口的微信模版消息
                        WechatClient.sendThirdMessageTemplate(targetUserId, targetUserName, message);
                    }
                    //发送厦门i健康的微信模版消息
                    // WechatClient.sendViaMessageTemplate(targetUserId, targetUserName, message);
                }
@ -1317,6 +1324,107 @@ class WechatClient extends RedisModel {
                }
            });
    };
    static sendP2PMessageTemplate(targetUserId, targetUserName, message,sender_name) {
        async.waterfall([
                // 获取微信openid
                function (callback) {
                    PatientRepo.findOne(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;
                            let name = participant.name;
                            let id = participant.id;
                            map.set("openid",openid);
                            map.set("name",name);
                            map.set("id",id);
                        })
                        //
                        // 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, map);
                        callback(null, map, message.sender_name, res[0]);
                    });
                },
                // 发送消息
                function (map, senderName, topic,callback) {
                    let replyContent = message.content;
                    switch (Number.parseInt(message.content_type)) {
                        case CONTENT_TYPES.Image:
                            replyContent = "[图片]";
                            break;
                        case CONTENT_TYPES.Audio:
                            replyContent = "[语音]";
                            break;
                        case CONTENT_TYPES.PlainText:
                            replyContent = "[文本]";
                            break;
                        default:
                            break;
                    }
                    let url = null;
                    log.info("内容类型"+message.content_type);
                    log.info("内容"+message.content);
                    //1、2、3、18、19、12、34
                    // 发送模板消息
                    if(map != null && (message.content_type==CONTENT_TYPES.PlainText||
                        message.content_type==CONTENT_TYPES.Image||
                        message.content_type==CONTENT_TYPES.Audio||
                        message.content_type==CONTENT_TYPES.Video||
                        message.content_type==CONTENT_TYPES.PersonalCard||
                        message.content_type==CONTENT_TYPES.MessageForward||
                        message.content_type==CONTENT_TYPES.PrescriptionSuggest||
                        message.content_type==CONTENT_TYPES.ConsultSuggest||
                        message.content_type==CONTENT_TYPES.Article||
                        message.content_type==CONTENT_TYPES.surveyMessage||message.content_type==CONTENT_TYPES.EmergencyAssistanceMessage)){
                        log.info("内容类型122:"+message.content_type);
                        let title = "您好,收到一条【"+senderName+"】发来的一条消息";
                        let content = message.content;
                        let contentString = replyContent;
                        let sessionId = message.session_id;
                        let openid = map.get("openid");
                        //let id = map.get(id);
                        let params = '&content='+encodeURIComponent(content)+'&openid='+encodeURIComponent(openid)
                            +'&contentString='+encodeURIComponent(contentString)+'&title='+encodeURIComponent(title)
                            +'&sessionId='+encodeURIComponent(sessionId) +'&id='+encodeURIComponent("123");
                        HlwyyWechatAssistantSDK.request(null,null,null,title,content,contentString,url,params,"familyP2P", function (err, res) {
                            // WlyyAssistantSDK.request('admin', '0a5c5258-8863-4b07-a3f9-88c768528ab4', '', 'admin_imei', '/doctor/feldsher/sendDoctorTemplate', param, function (err, res) {
                            // WlyySDK.request('admin', '0a5c5258-8863-4b07-a3f9-88c768528ab4', '', 'admin_imei', '/doctor/feldsher/sendDoctorTemplate?' + params, 'GET', function (err, res) {
                            if(err){
                                log.error(err);
                            }else {
                                log.info(res);
                            }
                        });
                    }
                    callback(null, null);
                }
            ],
            function (err, res) {
                if (!err) {
                    log.info("Send via wechat template message, DONE!");
                }
            });
    };
}
module.exports = WechatClient;

+ 16 - 15
src/server/models/sessions/sessions.js

@ -643,15 +643,15 @@ class Sessions extends RedisModel {
                                    if(j%2!=0)continue;
                                    let participantsTimeJson = {};
                                    //成员名字
                                    let participantNames;
                                    let sql = "SELECT u.name,u.avatar,1 as type    FROM  participants p, patients u " +
                                        "WHERE  p.session_id = ?  AND p.participant_id = u.id AND P.participant_id=? union "+
                                    let sql = "SELECT u.name,u.avatar,1 as type  FROM   patients u " +
                                        "WHERE   u.id =? union "+
                                    " SELECT u.name,u.avatar,0 as type   FROM  participants p, doctors u  " +
                                        " WHERE  p.session_id = ?  AND p.participant_id = u.id AND P.participant_id=? ";
                                        " WHERE u.id =? ";
                                    ImDb.execQuery({
                                        "sql": sql,
                                        "args": [sessionId,participantsTimeArray[j],sessionId,participantsTimeArray[j]],
                                        "args": [participantsTimeArray[j],participantsTimeArray[j]],
                                        "handler": function(err,participantNames){
                                            log.info("---participantNames:"+JSON.stringify(participantNames));
                                            if(participantNames&&participantNames.length>0){
                                                participantsTimeJson["name"] = participantNames[0].name;
                                                participantsTimeJson["avatar"] = participantNames[0].avatar;
@ -1273,14 +1273,15 @@ class Sessions extends RedisModel {
                                    if(j%2!=0)continue;
                                    let participantsTimeJson = {};
                                    let participantNames;
                                    let sql = "SELECT u.name,u.avatar,1 as type   FROM  participants p, patients u " +
                                        "WHERE  p.session_id = ?  AND p.participant_id = u.id AND P.participant_id=? union "+
                                        " SELECT u.name,u.avatar,0 as type   FROM  participants p, doctors u  " +
                                        " WHERE  p.session_id = ?  AND p.participant_id = u.id AND P.participant_id=? ";
                                    let sql = "SELECT u.name,u.avatar,1 as type   FROM   patients u " +
                                        "WHERE   u.id =? union "+
                                        " SELECT u.name,u.avatar,0 as type   FROM   doctors u  " +
                                        " WHERE  u.id =? ";
                                    ImDb.execQuery({
                                        "sql": sql,
                                        "args": [sessionId,participantsTimeArray[j],sessionId,participantsTimeArray[j]],
                                        "args": [participantsTimeArray[j],participantsTimeArray[j]],
                                        "handler": function(err,participantNames){
                                            log.info("-1--participantNames:"+JSON.stringify(participantNames));
                                            if(participantNames&&participantNames.length>0){
                                                participantsTimeJson["name"] = participantNames[0].name;
                                                participantsTimeJson["avatar"] = participantNames[0].avatar;
@ -2170,7 +2171,7 @@ class Sessions extends RedisModel {
                            res.forEach(function (participant) {
                                if (participant.id == message.sender_id||sessionType==SESSION_TYPES.SYSTEM){
                                    message.sender_img = participant.avatar;
                                    callPush(res,message);
                                    callPush(res,message,message.sender_name);
                                }
                            })
                        }
@ -2182,12 +2183,12 @@ class Sessions extends RedisModel {
                ModelUtil.emitDataNotFound(self.eventEmitter, {message: "当前会话找不到此发送者"});
            }
        });
        function callPush(participants,message){
        function callPush(participants,message,sender_name){
            participants.forEach(function (participant) {
                // if (
                //     // participant.id !== message.sender_id &&
                //     participant.participant_role == PARTICIPANT_ROLES.HOST) {
                    Sessions.pushNotification(participant.id, participant.name, message,sessionType);
                    Sessions.pushNotification(participant.id, participant.name, message,sessionType,sender_name);
                // }
            });
        }
@ -2460,13 +2461,13 @@ class Sessions extends RedisModel {
     * @param targetUserId
     * @param message
     */
    static pushNotification(targetUserId, targetUserName, message,sessionType) {
    static pushNotification(targetUserId, targetUserName, message,sessionType,sender_name) {
        let self = this;
        log.info("targetUserId="+targetUserId)
        Users.isPatientId(targetUserId, function (err, isPatient) {
            if (isPatient) {
                if(config.environment!='local'){//pc版不直接发送给居民,通过redis的publish
                    WechatClient.sendMessage(targetUserId, targetUserName, message);
                    WechatClient.sendMessage(targetUserId, targetUserName, message,sessionType,sender_name);
                }
                message.targetUserId = targetUserId;
                message.targetUserName = targetUserName;

+ 8 - 1
src/server/resources/config/config.hzprod.js

@ -89,6 +89,12 @@ let thirdApiMessageConfig = {
    enpoint :"/sendWXTemplate"
};
let familyP2PMessageConfig = {
    host: '10.18.43.41',
    port: 10301,
    model:"/wxpush",
    enpoint :"/sendFamilyWxTemplate"
};
let hlwyyDAServerConfig = {
    host: '10.18.43.41',
    port: 10301,
@ -121,4 +127,5 @@ exports.sessionConfig = sessionConfig;
exports.topicConfig = topicConfig;
exports.imClientType = imClientType;
exports.thirdApiMessageConfig = thirdApiMessageConfig;
exports.hlwyyDAServerConfig = hlwyyDAServerConfig;
exports.hlwyyDAServerConfig = hlwyyDAServerConfig;
exports.familyP2PMessageConfig = familyP2PMessageConfig;

+ 9 - 0
src/server/resources/config/config.local.js

@ -46,6 +46,14 @@ let getTuiConfig = {
    MASTERSECRET: 'veXiajQrId6iojy7Qv8kZ2'
};
//杭州医养p2p 微信模板推送
let familyP2PMessageConfig = {
    host: '172.26.0.107',
    port: 10301,
    model:"/wxpush",
    enpoint :"/sendFamilyWxTemplate"
};
// 微信配置
let wechatConfig = {
    appId: 'wxad04e9c4c5255acf',
@ -96,3 +104,4 @@ exports.wlyyDAServerConfig = wlyyDAServerConfig;
exports.wechatConfig = wechatConfig;
exports.sessionConfig = sessionConfig;
exports.topicConfig = topicConfig;
exports.familyP2PMessageConfig = familyP2PMessageConfig;

+ 10 - 1
src/server/resources/config/config.prod.js

@ -31,6 +31,14 @@ let innerRedisConfig = {
    password:'Kb6wKDQP1W4'
};
//杭州医养p2p 微信模板推送
let familyP2PMessageConfig = {
    host: '172.26.0.107',
    port: 10301,
    model:"/wxpush",
    enpoint :"/sendFamilyWxTemplate"
};
// 三师后台
let wlyyServerConfig = {
    host: 'www.xmtyw.cn',
@ -144,4 +152,5 @@ exports.sessionConfig = sessionConfig;
exports.topicConfig = topicConfig;
exports.imClientType = imClientType;
exports.xmIjkTemplateConfig = xmIjkTemplateConfig
exports.httpsConfig = httpsConfig
exports.httpsConfig = httpsConfig
exports.familyP2PMessageConfig = familyP2PMessageConfig;

+ 10 - 1
src/server/resources/config/config.prod_sdtn.js

@ -10,6 +10,14 @@ let imDbConfig = {
    charset : 'utf8mb4'
};
//杭州医养p2p 微信模板推送
let familyP2PMessageConfig = {
    host: '172.26.0.107',
    port: 10301,
    model:"/wxpush",
    enpoint :"/sendFamilyWxTemplate"
};
// Redis
let redisConfig = {
    host: '10.9.1.247',
@ -138,4 +146,5 @@ exports.thirdApiMessageConfig = thirdApiMessageConfig;
exports.sessionConfig = sessionConfig;
exports.topicConfig = topicConfig;
exports.imClientType = imClientType;
exports.xmIjkTemplateConfig = xmIjkTemplateConfig
exports.xmIjkTemplateConfig = xmIjkTemplateConfig
exports.familyP2PMessageConfig = familyP2PMessageConfig;

+ 9 - 0
src/server/resources/config/config.prod_xmijk.js

@ -10,6 +10,14 @@ let imDbConfig = {
    charset : 'utf8mb4'
};
//杭州医养p2p 微信模板推送
let familyP2PMessageConfig = {
    host: '172.26.0.107',
    port: 10301,
    model:"/wxpush",
    enpoint :"/sendFamilyWxTemplate"
};
// Redis
let redisConfig = {
    host: '59.61.92.90',
@ -129,4 +137,5 @@ exports.thirdApiMessageConfig = thirdApiMessageConfig;
exports.sessionConfig = sessionConfig;
exports.topicConfig = topicConfig;
exports.imClientType = imClientType;
exports.familyP2PMessageConfig = familyP2PMessageConfig;

+ 9 - 0
src/server/resources/config/config.prod_xzzx.js

@ -82,6 +82,14 @@ let hlwyyDAServerConfig = {
    enpoint :"/sendMKMesByDoctor"
};
//杭州医养p2p 微信模板推送
let familyP2PMessageConfig = {
    host: '172.26.0.107',
    port: 10301,
    model:"/wxpush",
    enpoint :"/sendFamilyWxTemplate"
};
// 会话配置
let sessionConfig = {
    maxMessageCount: 1000,                  // 会话缓存的消息数量
@ -129,3 +137,4 @@ exports.thirdApiMessageConfig = thirdApiMessageConfig;
exports.sessionConfig = sessionConfig;
exports.topicConfig = topicConfig;
exports.imClientType = imClientType;
exports.familyP2PMessageConfig = familyP2PMessageConfig;

+ 10 - 1
src/server/resources/config/config.test.js

@ -87,6 +87,14 @@ let thirdApiMessageConfig = {
    enpoint :"/sendWXTemplate"
};
let familyP2PMessageConfig = {
    host: '10.18.43.41',
    port: 10301,
    model:"/wxpush",
    enpoint :"/sendFamilyWxTemplate"
};
let hlwyyDAServerConfig = {
    host: '172.26.0.107',
    port: 10301,
@ -119,4 +127,5 @@ exports.sessionConfig = sessionConfig;
exports.topicConfig = topicConfig;
exports.imClientType = imClientType;
exports.thirdApiMessageConfig = thirdApiMessageConfig;
exports.hlwyyDAServerConfig = hlwyyDAServerConfig;
exports.hlwyyDAServerConfig = hlwyyDAServerConfig;
exports.familyP2PMessageConfig = familyP2PMessageConfig;

+ 10 - 1
src/server/resources/config/config.ystest.js

@ -16,6 +16,14 @@ let redisConfig = {
    port: 6379,
    db: 1
};
//杭州医养p2p 微信模板推送
let familyP2PMessageConfig = {
    host: '172.26.0.107',
    port: 10301,
    model:"/wxpush",
    enpoint :"/sendFamilyWxTemplate"
};
// let redisConfig = {
//     host: '192.0.33.26',
//     port: 6380,
@ -126,4 +134,5 @@ exports.wechatConfig = wechatConfig;
exports.thirdApiMessageConfig = thirdApiMessageConfig;
exports.sessionConfig = sessionConfig;
exports.topicConfig = topicConfig;
exports.imClientType = imClientType;
exports.imClientType = imClientType;
exports.familyP2PMessageConfig = familyP2PMessageConfig;

+ 34 - 10
src/server/util/hlwyyWechatAssistant.sdk.js

@ -13,15 +13,38 @@ let log = require('./log.js');
class HlwyyWechatAssistantSDK {
    constructor(){}
    static request(userName,idCard,phone,title,contentSrt,contentStringStr,url,params,handler){
        log.info("1:"+userName)
        log.info("2:"+idCard)
        log.info("3:"+phone)
        log.info("4:"+title)
        log.info("5:"+contentSrt)
        log.info("6:"+contentStringStr)
        log.info("7:"+params)
        log.info("8:"+"http://"+config.thirdApiMessageConfig.host+":"+config.thirdApiMessageConfig.port+config.thirdApiMessageConfig.model+config.thirdApiMessageConfig.enpoint+"?"+params)
    static request(userName,idCard,phone,title,contentSrt,contentStringStr,url,params,type,handler){
        // log.info("1:"+userName)
        // log.info("2:"+idCard)
        // log.info("3:"+phone)
        // log.info("4:"+title)
        // log.info("5:"+contentSrt)
        // log.info("6:"+contentStringStr)
        // log.info("7:"+params)
        // log.info("8:"+"http://"+config.thirdApiMessageConfig.host+":"+config.thirdApiMessageConfig.port+config.thirdApiMessageConfig.model+config.thirdApiMessageConfig.enpoint+"?"+params)
        //&&config.imClientType.id === 'hz_cloudCare'
        log.info("是否p2p :"+type)
        log.info("是否医养hz_cloudCare:"+config.imClientType.id)
        if ("familyP2P"===type&&config.imClientType.id === 'hz_cloudCare'){
            wechatreqq({
                url: "http://"+config.familyP2PMessageConfig.host+":"+config.familyP2PMessageConfig.port+config.familyP2PMessageConfig.model+config.familyP2PMessageConfig.enpoint+"?"+params,
                json: true,
                headers: {
                    "content-type": "application/json",
                },
                method: 'POST',
                body: JSON.stringify(params)
            }, function(error, response, body) {
                if (!error && response.statusCode == 200) {
                    log.info('请求居民微信模版消息接口发送模版消息->请求成功:', body);
                    // console.log(body) // 请求成功的处理逻辑
                }else{
                    // log.error('请求居民微信模版消息发送模版消息->请求失败:', body.toString());
                    // log.error('请求居民微信模版消息发送模版消息->请求失败:', response.toString());
                    log.error('请求居民微信模版消息发送模版消息->请求失败:', error.message);
                }
            })
        }else {
        wechatreqq({
            url: "http://"+config.thirdApiMessageConfig.host+":"+config.thirdApiMessageConfig.port+config.thirdApiMessageConfig.model+config.thirdApiMessageConfig.enpoint+"?"+params,
            json: true,
@ -39,7 +62,8 @@ class HlwyyWechatAssistantSDK {
                // log.error('请求居民微信模版消息发送模版消息->请求失败:', response.toString());
                log.error('请求居民微信模版消息发送模版消息->请求失败:', error.message);
            }
        });
        });}
        log.info("9:"+config.imClientType.id);
        if(config.imClientType.id == 'zsyy'){
            log.info("10:进入i健康模板消息推送");