Browse Source

发起和结束咨询的消息由系统发出,发送者ID记录操作人!

8 years ago
parent
commit
0fecd0b8dc

+ 3 - 3
src/server/endpoints/v2/application.endpoint.js

@ -33,13 +33,13 @@ router.get(APIv2.Application.BadgeNo, function (req, response) {
                return;
            }
            WlyySDK.request(userId, '', result[0].token, result[0].imei, '/wlyy/doctor/message/messages', 'POST', function (err, res) {
            WlyySDK.request(userId, '', result[0].token, result[0].imei, '/imcommon/message/messages', 'POST', function (err, res) {
                let count = 0;
                res =  JSON.parse(res)
                if (res.status == 200) {
                    let data = JSON.parse(res).data;
                    let data = res.data;
                    count = JSON.parse(data.imMsgCount).count + data.system.amount + data.healthIndex.amount + data.sign.amount;
                }
                response.status(200).send({"count": count});
            });
        }

+ 4 - 5
src/server/models/client/app.client.js

@ -93,7 +93,7 @@ class AppClient extends RedisModel {
     * @param message
     * @param sessionType
     */
    static sendNotification(targetId, message, sessionType) {
    static sendNotification(targetId, message, sessionType,badge) {
        if (message.content_type == CONTENT_TYPES.PlainText ||
            message.content_type == CONTENT_TYPES.Image ||
            message.content_type == CONTENT_TYPES.Audio||
@ -112,16 +112,15 @@ class AppClient extends RedisModel {
                let tipMessage = CONTENT_TYPES.typeToDescription(parseInt(message.content_type), "您有一条新消息") || message.content;
                let customData = {
                    session_id: '' || message.session_id,
                    session_id: message.session_id||'',
                    session_type: sessionType,
                    topic_id: '' || message.topic_id,
                    from: '' || message.sender_id,
                    from: message.sender_id|| '',
                    data: message.content,
                    business_type: message.business_type || 1
                };
                if (userStatus.platform == PLATFORMS.iOS) {
                    pusher.pushToSingleViaAPN(tipMessage, customData, message.contentType, userStatus.device_token, function (err, res) {
                    pusher.pushToSingleViaAPN(tipMessage, customData, message.content_type, userStatus.device_token,badge, function (err, res) {
                        if (err) {
                            ModelUtil.logError("Send notification via APN failed:"+userStatus.device_token, err);
                        } else {

+ 3 - 4
src/server/models/push/pusher.js

@ -41,24 +41,23 @@ class Pusher extends RedisModel {
     * @param deviceToken
     * @param handler
     */
    pushToSingleViaAPN(message, customData, type, deviceToken, handler) {
    pushToSingleViaAPN(message, customData, type, deviceToken,badge, handler) {
        try {
            let simpleAlertMsg = new SimpleAlertMsg();
            simpleAlertMsg.alertMsg = message;
            let payload = new APNPayload();
            payload.alertMsg = simpleAlertMsg;
            payload.badge = 0;
            payload.badge = badge;
            payload.contentAvailable = 1;
            payload.category = type;
            payload.customMsg.payload1 = customData;
            log.error("推送消息对象:"+JSON.stringify(payload));
            let template = new APNTemplate();
            template.setApnInfo(payload);
            let singleMessage = new SingleMessage();
            singleMessage.setData(template);
            this.gt.pushAPNMessageToSingle(this.getuiConfig.APPID, deviceToken, singleMessage, function (err, res) {
                if (err) {
                    log.error('Push via APN failed:' + e);

+ 1 - 1
src/server/models/schedule/jobs/topic.terminating.job.js

@ -30,7 +30,7 @@ class TopicTerminatingJob {
                let topicId = topic.topic_id;
                let topicName = topic.topic_name;
                WlyySDK.request('admin', '0a5c5258-8863-4b07-a3f9-88c768528ab4', '', 'admin_imei', '/wlyy/doctor/consult/finish_consult?consult=' + topicId, 'GET', function (err, res) {
                WlyySDK.request('admin', '0a5c5258-8863-4b07-a3f9-88c768528ab4', '', 'admin_imei', '/doctor/consult/finish_consult?consult=' + topicId, 'GET', function (err, res) {
                    log.info("Got topic to terminate, " + topicId + ": " + topicName + ", last active time: " + topic.last_message_time);
                    if (err) return log.error("Terminating topic failed, try next time, error: ", err);

+ 48 - 2
src/server/models/sessions/sessions.js

@ -12,6 +12,8 @@ let Participants = require('./participants');
let SessionRepo = require('../../repository/mysql/session.repo');
let TopicRepo = require('../../repository/mysql/topics.repo');
let ParticipantRepo = require('../../repository/mysql/participant.repo');
let ImDb = require('../../repository/mysql/db/im.db');
let WlyySDK = require("../../util/wlyy.sdk");
let WechatClient = require("../client/wechat.client.js");
let AppClient = require("../client/app.client.js");
@ -824,18 +826,28 @@ class Sessions extends RedisModel {
    /**
     * 获取所有会话的未读消息数。
     */
    getAllSessionsUnreadMessageCount(userId) {
    getAllSessionsUnreadMessageCount(userId,handler) {
        let self = this;
        let count = 0;
        let patientCount = 0;
        let doctorCount = 0;
        SessionRepo.findAll(userId, function (err, res) {
            if (err) {
                if(handler)
                {
                    handler(err,res)
                    return;
                }
                ModelUtil.logError("getAllSessionsUnreadMessageCount is failed", err);
                return;
            }
            if (res.length == 0) {
                if(handler)
                {
                    handler(err,count)
                    return;
                }
                ModelUtil.emitOK(self.eventEmitter, {count: count});
                return;
            }
@ -843,6 +855,11 @@ class Sessions extends RedisModel {
            for (let j in res) {
                if (res[j].type == SESSION_TYPES.SYSTEM) {
                    if (j == res.length - 1) {
                        if(handler)
                        {
                            handler(err,count)
                            return;
                        }
                        ModelUtil.emitOK(self.eventEmitter, {count: count, patient: patientCount, doctor: doctorCount});
                    }
                    continue;
@ -854,6 +871,11 @@ class Sessions extends RedisModel {
        function callback(res, j, session) {
            self.getSessionUnreadMessageCount(res[j].id, userId, function (err, con) {
                if (err) {
                    if(handler)
                    {
                        handler(err,count)
                        return;
                    }
                    ModelUtil.logError("getAllSessionsUnreadMessageCount is failed", err);
                }
@ -864,6 +886,11 @@ class Sessions extends RedisModel {
                    doctorCount = doctorCount + con;
                }
                if (j == res.length - 1) {
                    if(handler)
                    {
                        handler(err,count)
                        return;
                    }
                    ModelUtil.emitOK(self.eventEmitter, {count: count, patient: patientCount, doctor: doctorCount});
                }
            })
@ -1224,6 +1251,7 @@ class Sessions extends RedisModel {
     * @param message
     */
    static pushNotification(targetUserId, targetUserName, message,sessionType) {
        let self = this;
        Users.isPatientId(targetUserId, function (err, isPatient) {
            if (isPatient) {
                WechatClient.sendMessage(targetUserId, targetUserName, message);
@ -1234,7 +1262,25 @@ class Sessions extends RedisModel {
                }
                //告知医生新消息
                WechatClient.sendSocketMessageToDoctor(targetUserId,message);
                AppClient.sendNotification(targetUserId, message);
                ImDb.execQuery({
                    "sql": "SELECT imei, token from user_tokens WHERE user = ?",
                    "args": [targetUserId],
                    "handler": function (err, result) {
                        if (err || result.length == 0) {
                            return;
                        }
                        WlyySDK.request(targetUserId, '', result[0].token, result[0].imei, '/imcommon/message/messages', 'POST', function (err, res) {
                            let count = 0;
                            res =  JSON.parse(res)
                            if (res.status == 200) {
                                let data = res.data;
                                count = JSON.parse(data.imMsgCount).count + data.system.amount + data.healthIndex.amount + data.sign.amount;
                            }
                            AppClient.sendNotification(targetUserId, message,sessionType,count);
                        });
                    }
                });
            }
        });
    }

+ 2 - 2
src/server/repository/mysql/session.repo.js

@ -168,10 +168,10 @@ class SessionRepo {
     */
    static saveSession(sessionId, name, type, createDate, businessType, handler) {
        let sql = "insert into " + DB_TABLES.Sessions + " (id, name, type, create_date,business_type) VALUES (?,?,?,?,?) " +
            "ON DUPLICATE KEY UPDATE name = ?";
            "ON DUPLICATE KEY UPDATE name = ?,type=?";
        ImDb.execQuery({
            "sql": sql,
            "args": [sessionId, name, type, createDate, businessType, name],
            "args": [sessionId, name, type, createDate, businessType, name,type],
            "handler": handler || function (err, res) {
                if(err) log.error(err);
            }

+ 3 - 2
src/server/resources/config/config.dev.js

@ -19,8 +19,9 @@ let redisConfig = {
// 三师后台
let wlyyServerConfig = {
    host: '172.19.103.87',
    port: 9092
    host: '192.168.131.102',
    port: 8080,
    model:""
};
// 个推AppStore版参数

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

@ -20,7 +20,8 @@ let redisConfig = {
// 三师后台
let wlyyServerConfig = {
    host: '120.41.252.108',
    port: 9660
    port: 9660,
    model:"/wlyy"
};
// 个推AppStore版参数

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

@ -19,7 +19,8 @@ let redisConfig = {
// 三师后台
let wlyyServerConfig = {
    host: '172.19.103.88',
    port: 9092
    port: 9092,
    model:""
};
// 个推AppStore版参数

+ 2 - 2
src/server/util/wlyy.sdk.js

@ -22,7 +22,7 @@ class WlyySDK {
        let options = {
            hostname: config.wlyyServerConfig.host,
            port: config.wlyyServerConfig.port,
            path: endpoint,
            path: config.wlyyServerConfig.model+endpoint,
            method: method,
            headers: {
                'userAgent': JSON.stringify(userAgent)
@ -34,7 +34,7 @@ class WlyySDK {
            res.on('data', function (chunk) {
                log.info('家庭医生平台->请求成功:', chunk);
                handler(null, res);
                handler(null, chunk);
            });
        });