Bladeren bron

Merge branch 'im-internet-hospital' of huangwenjie/im.doctor into dev

huangwenjie 6 jaren geleden
bovenliggende
commit
f3e86288a7

+ 4 - 0
readme.md

@ -186,6 +186,7 @@ REST API遵循REST最佳实践,规范命名URL中的每个部分。注意POST
            24、诊断结果
            25、病情描述
            26、专家建议
            27、咨询评价消息
            2102、上门服务-修改工单卡片信息
            2103、上门服务-变更工单医生信息
            2104、上门服务-变更工单服务项信息
@ -231,6 +232,9 @@ REST API遵循REST最佳实践,规范命名URL中的每个部分。注意POST
            k、type =12 候诊室群聊
            sessionId: 诊室code+"_"+咨询code+"_"+咨询类型
            
            l、type =13 专家咨询
            sessionId: 居民code+"_"+医生code+"_"+咨询类型

+ 6 - 3
src/server/endpoints/v2/session.endpoint.js

@ -114,6 +114,7 @@ router.get(APIv2.Sessions.SessionListByType, function (req, res) {
    let size = req.query.size;
    let userId = req.query.user_id;
    let type = req.query.type;
    let status = req.query.status;
    if (!page) {
        throw {httpStatus: 406, message: 'Missing page.'};
    }
@ -129,7 +130,7 @@ router.get(APIv2.Sessions.SessionListByType, function (req, res) {
    let sessions = new Sessions();
    ControllerUtil.regModelEventHandler(sessions, res);
    sessions.getUserSessionsByType(userId,type,page,size);
    sessions.getUserSessionsByType(userId,type,page,size,status);
});
/**
@ -483,17 +484,19 @@ router.get(APIv2.Sessions.SessionUnreadMessages, function (req, res) {
/**
 * 获取所有会话未读消息数。
 *
 * 请求URL:/sessions/unread_message_count?user_id=xyz
 * 请求URL:/sessions/unread_message_count?user_id=xyz&type=1
 */
router.get(APIv2.Sessions.SessionsUnreadMessageCount, function (req, res) {
    let userId = req.query.user_id;
    let type = req.query.type;
    let sessions = new Sessions();
    ControllerUtil.regModelEventHandler(sessions, res);
    sessions.getAllSessionsUnreadMessageCount(userId);
    sessions.getAllSessionsUnreadMessageCount(userId,type);
});
/**
 * 获取指定会话未读消息数
 *

+ 15 - 0
src/server/handlers/socket.handler.js

@ -8,6 +8,7 @@ let log = require("../util/log.js");
let clientCache = require('../models/socket.io/client.cache').clientCache();
let PatientClient = require('./../models/socket.io/patient.client');
let PcPatientClient = require('./../models/socket.io/pcPatient.client');
let PcDoctorClient  = require('./../models/socket.io/pcDoctor.client');
let DoctorClient  = require('./../models/socket.io/doctor.client');
let RtcClient  = require('../models/socket.io/rtc.client.js');
@ -45,6 +46,8 @@ class SocketHandler {
                        data.userId = "pc_"+data.userId;
                    }else if("pcim_doctor"===data.clientType){//用于pcim 消息通知
                        data.userId = "pcim_"+data.userId;
                    }else if("pc_patient"===data.clientType){//新增居民PC登陆类型
                        data.userId= "pcpatient_"+data.userId;
                    }
                    if(clientCache.removeByUserId(data.userId)){
@ -62,6 +65,16 @@ class SocketHandler {
                        clientCache.addClient(patientClient);
                        users.login(data.userId, 10, '', '');
                        socket.emit('ack', {});
                    }else if("pc_patient"===data.clientType){
                        //用于pcpatient 消息通知
                        let pcpatientClient = new PcPatientClient(socket, socketServer);
                        pcpatientClient.userId = data.userId;
                        pcpatientClient.password = data.password;
                        pcpatientClient.clientType = data.clientType;
                        pcpatientClient.sessionId = data.sessionId||"";
                        clientCache.addClient(pcpatientClient);
                        users.login(data.userId, 10, '', '');
                        socket.emit('ack', {});
                    }else if("pcim_doctor"===data.clientType){
                        //用于pcim 消息通知
                        let pcdoctorClient = new PcDoctorClient(socket, socketServer);
@ -83,6 +96,7 @@ class SocketHandler {
                }
            });
            //视频聊天
            // 返回userid的socketid
            socket.on('getSid',function(data){
                var clientJson = null;
@ -102,6 +116,7 @@ class SocketHandler {
                socket.emit('getSid',result);
            });
            //视频聊天
            // 设置userid的socketid
            socket.on('setSid',function(data){
                var clientJson = null;

+ 14 - 2
src/server/models/client/wechat.client.js

@ -142,6 +142,7 @@ class WechatClient extends RedisModel {
    static sendAllRead(doctorId,sessionId){
        let doctorClient = clientCache.findByIdAndType(doctorId,SOCKET_TYPES.DOCTOR);
        let pc_doctorClient = clientCache.findByIdAndType("pc_"+doctorId,SOCKET_TYPES.PC_DOCTOR);
        if(doctorClient){
            if(doctorClient.sessionId==sessionId){
                doctorClient.socket.emit('message',{ read:"all"});
@ -149,7 +150,12 @@ class WechatClient extends RedisModel {
                log.warn(" doctor not in the same session ");
            }
        }else{
            log.warn(doctorId+" target doctor is not online!");
            if(pc_doctorClient && pc_doctorClient.sessionId == sessionId){
                pc_doctorClient.socket.emit('message',{ read:"all"});
            }else{
                log.warn(doctorId+" target doctor is not online!");
            }
        }
    }
@ -162,6 +168,7 @@ class WechatClient extends RedisModel {
            return;
        }
        let doctorClient = clientCache.findByIdAndType(doctorId,SOCKET_TYPES.DOCTOR);
        let pc_doctorClient = clientCache.findByIdAndType("pc_"+doctorId,SOCKET_TYPES.PC_DOCTOR);
        if(doctorClient){
            if(doctorClient.sessionId==sessionId){
                doctorClient.socket.emit('message',{ read:"all"});
@ -169,7 +176,12 @@ class WechatClient extends RedisModel {
                log.warn(" doctor not in the same session ");
            }
        }else{
            log.warn(doctorId+" target doctor is not online!");
            if(pc_doctorClient && pc_doctorClient.sessionId == sessionId){
                pc_doctorClient.socket.emit('message',{ read:"all"});
            }else{
                log.warn(doctorId+" target doctor is not online!");
            }
        }
    }

+ 17 - 4
src/server/models/sessions/sessions.js

@ -697,14 +697,15 @@ class Sessions extends RedisModel {
     * @param page
     * @param size
     * @param businessType
     * @param status 0:进行中的会话1:结束的会话
     */
    getUserSessionsByType(userId,type,page, size) {
    getUserSessionsByType(userId,type,page, size,status) {
        let userSessionKey = RedisModel.makeRedisKey(REDIS_KEYS.UserSessions, userId);
        let self = this;
        async.waterfall([
            // 获取会话ID列表
            function (callback) {
                SessionRepo.findListByType(userId,type,page,size,function(err,res){
                SessionRepo.findListByType(userId,type,page,size,status,function(err,res){
                    if (res.length == 0) {
                        ModelUtil.emitOK(self.eventEmitter, []);
                        return;
@ -1244,7 +1245,7 @@ class Sessions extends RedisModel {
    /**
     * 获取所有会话的未读消息数。
     */
    getAllSessionsUnreadMessageCount(userId,handler) {
    getAllSessionsUnreadMessageCount(userId,type,handler) {
        let self = this;
        let count = 0;
        let patientCount = 0;
@ -1273,7 +1274,17 @@ class Sessions extends RedisModel {
            }
            for (let j in res) {
                //是否过滤指定类型
                if( type != null){
                    if(type != res[j].type){
                        continue;
                    }
                }
                if (res[j].type == SESSION_TYPES.SYSTEM) {
                    if (j == res.length - 1) {
                        if(handler){
                            handler(err,count);
@ -1283,6 +1294,8 @@ class Sessions extends RedisModel {
                    }
                    continue;
                }
                callback(res, j, res[j]);
            }
        });
@ -1849,7 +1862,7 @@ class Sessions extends RedisModel {
                });
                //im消息
                let sessions = new Sessions();
                sessions.getAllSessionsUnreadMessageCount(targetUserId,function (err,res) {
                sessions.getAllSessionsUnreadMessageCount(targetUserId,null,function (err,res) {
                    if(res){
                        count += res;
                    }

+ 19 - 0
src/server/models/socket.io/pcPatient.client.js

@ -0,0 +1,19 @@
/**
 * 患者端socket.
 *
 * author: huangwenjie
 * since: 2019/07/01
 */
"use strict";
var util = require('util');
var Client = require('./client');
class pcPatientClient extends Client{
    constructor(socket, socketServer){
        super(socket, socketServer);
    }
}
module.exports = pcPatientClient;

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

@ -137,7 +137,7 @@ class SessionRepo {
     * @param type
     * @param handler
     */
    static findListByType(userId, type,page,pagesize, handler) {
    static findListByType(userId, type,page,pagesize, status,handler) {
        if (page > 0) {
            if (page == 1) {
                page = 0;
@ -148,7 +148,13 @@ class SessionRepo {
        let sql = "select session_id from " + DB_TABLES.Participants + " w where w.participant_id = ? group by w.session_id";
        let sessionSQL = "select id, name, type, create_date, last_sender_id, last_sender_name, last_content_type, last_content, last_message_time from "
            + DB_TABLES.Sessions + " s where s.id in(" + sql + ") and s.type=? order by s.last_message_time desc limit "+page+","+pagesize;
            + DB_TABLES.Sessions + " s where s.id in(" + sql + ") and s.type=? ";
        if(status != null && status != ""){
            sessionSQL += " s.id="+status
        }
        sessionSQL +=  " order by s.last_message_time desc limit "+page+","+pagesize;
        ImDb.execQuery({
            "sql": sessionSQL,
            "args": [userId, type],

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

@ -4,7 +4,7 @@ let imDbConfig = {
    host: '172.26.0.104',
    user: 'ssgg',
    password: 'ssgg@jkzl2019',
    database: 'im_new',
    database: 'im_internt_hospital',
    connectionLimit: '50',
    charset: 'utf8mb4'
};