浏览代码

im冲突解决

wangjun 4 年之前
父节点
当前提交
7c220ed4cc

+ 15 - 2
src/server/app.js

@ -71,11 +71,24 @@ process.on('uncaughtException', function (err) {
});
// now enable http server and socket.io
let server = require('http').createServer(app);
let server;
// https
if(config.httpsOpen){
    let fs = require("fs");
// Configuare https
    let httpsOption = {
        key : fs.readFileSync(config.httpsConfig.key),
        cert: fs.readFileSync(config.httpsConfig.pem)
    }
    server = require('https').createServer(app);
}else{
    server = require('http').createServer(app);
}
let io = require('socket.io').listen(server);
server.listen(config.serverPort);
// event listener for HTTP server "error" event
server.on('error', function (error) {
    if (error.syscall !== 'listen') throw error;

+ 41 - 1
src/server/endpoints/v2/message.endpoint.js

@ -11,7 +11,7 @@ let ControllerUtil = require('../../util/controller.util');
let APIv2 = require('../../include/endpoints').APIv2;
let MODEL_EVENTS = require('../../include/commons').MODEL_EVENTS;
let Messages = require('../../models/messages/messages');
let WechatClient = require("../../models/client/wechat.client.js");
/**
 * 发送消息
 */
@ -30,6 +30,46 @@ router.post(APIv2.Message.Send, function (req, res) {
    messages.sendMessage(payload);
});
/**
 * 发送医生外层socket消息
 */
router.post(APIv2.Message.DoctorSystemMessage, function (req, res) {
    let targetUserId = req.body.targetUserId;
    let message = req.body.message;
    let wechatClient = new WechatClient();
    if (!targetUserId) {
        throw {httpStatus: 406, message: 'Missing targetUserId.'};
    }
    if (!message) {
        throw {httpStatus: 406, message: 'Missing message.'};
    }
    ControllerUtil.regModelEventHandler(wechatClient, res);
    //推送MDT,医生外层新消息
    wechatClient.cloudSendMDTSocketMessageToDoctor(targetUserId,JSON.parse(message));
});
/**
 * 医养PC管理端端socket消息
 */
router.post(APIv2.Message.CloudCarePcManageMessage, function (req, res) {
    let clientType = req.body.clientType;
    let message = req.body.message;
    let wechatClient = new WechatClient();
    if (!clientType) {
        throw {httpStatus: 406, message: 'Missing clientType.'};
    }
    if (!message) {
        throw {httpStatus: 406, message: 'Missing message.'};
    }
    ControllerUtil.regModelEventHandler(wechatClient, res);
    //推送MDT,医生外层新消息
    wechatClient.CloudCarePcManageMessageToPc(clientType,JSON.parse(message));
});
router.get(APIv2.Message.DataMessage, function (req, res) {
    let sessionId = req.query.sessionId;
    let messages = new Messages();

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

@ -159,6 +159,8 @@ router.get("/", function (req, res) {
    let userId = req.query.user_id;
    let businessType = req.query.business_type;
    let status = req.query.status;
    let name = req.query.name;
    let search_type = req.query.search_type;//搜索类型 1医生 2患者 3会话名称
    let videoconferencing = req.query.videoconferencing;
    if (!page) {
        throw {httpStatus: 406, message: 'Missing page.'};
@ -172,23 +174,22 @@ router.get("/", function (req, res) {
    let sessions = new Sessions();
    ControllerUtil.regModelEventHandler(sessions, res);
    //判断是否是中山医院MDT的请求
    if(videoconferencing && videoconferencing == 1){
        sessions.conversionAarticipant(userId, (doctorid) => {
            //传入参数齐全走过滤方法
            if(status&&businessType&&doctorid&&size&&page){
                sessions.getUserStatusSessions(doctorid,status,businessType,page,size);
                sessions.getUserStatusSessions(doctorid,status,businessType,name,search_type,page,size);
            }else{
                sessions.getUserSessions(doctorid, page, size, businessType);
                sessions.getUserSessions(doctorid,name,search_type, page, size, businessType);
            }
        })
    }else{
        //传入参数齐全走过滤方法
        if(status&&businessType&&userId&&size&&page){
            sessions.getUserStatusSessions(userId,status,businessType,page,size);
            sessions.getUserStatusSessions(userId,status,businessType,name,search_type,page,size);
        }else{
            sessions.getUserSessions(userId, page, size, businessType);
            sessions.getUserSessions(userId,name,search_type, page, size, businessType);
        }
    }
});

+ 12 - 1
src/server/handlers/socket.handler.js

@ -11,6 +11,7 @@ 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 CloudCarePcManageClient  = require('../models/socket.io/cloudCarePcManage.client');
let RtcClient  = require('../models/socket.io/rtc.client.js');
let Sessions = require('../models/sessions/sessions');
let Users = require('../models/user/users');
@ -19,6 +20,7 @@ let ModelUtil = require('../util/model.util.js');
let pusher = require('../models/push/pusher.js');
let AppClient = require('../models/client/app.client.js');
let Participants = require('../models/sessions/participants');
let uuid = require('uuid')
let sessions = new Sessions();
let users = new Users();
@ -86,6 +88,8 @@ class SocketHandler {
                            data.userId= "patient_system_"+data.userId;
                        }else if("doctor_system"===data.clientType){//新增医生APP外层-登陆类型-20191012-huangnwenjie
                            data.userId= "doctor_system_"+data.userId;
                        } else if("cloudCare_pcManage"===data.clientType){//新增医生APP外层-登陆类型-20191012-huangnwenjie
                            data.userId= "cloudCare_pcManage"+uuid.v1();
                        }
                        if(clientCache.removeByUserId(data.userId)){
@ -129,7 +133,14 @@ class SocketHandler {
                        //     pcdoctorClient.sessionId =  "";
                        //     clientCache.addClient(pcdoctorClient);
                        //     socket.emit('ack', {});
                        }else{
                        }else if("cloudCare_pcManage"===data.clientType){
                            let cloudCarePcManageClient = new CloudCarePcManageClient(socket, socketServer);
                            cloudCarePcManageClient.userId = data.userId;
                            cloudCarePcManageClient.clientType = data.clientType;
                            clientCache.addClient(cloudCarePcManageClient);
                            socket.emit('ack', {});
                        }
                        else{
                            let doctorClient = new DoctorClient(socket, socketServer);
                            doctorClient.userId = data.userId;
                            doctorClient.password = data.password;

+ 27 - 0
src/server/https/zsyy/server.key

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAoolT5lTdAsVSHU/WLhWb/VcGf8cUg9bEvAAItKLcCQc1eMjX
WJLhTr8ILZ72+pzJc+EdwgphQTpQy1KbVaTZbpfh9NYQlZQ7v1N8B/Bdb6jvirnI
UqBFwvGYSbcISxeZhljZAm8hn+QSg57IJOj8iH+qz8QxuCOYFI54XDs3QVVOhuMF
wueo3dgWBYCA9uo2OL2xjt7MyA4pYu1wU9YJfL3dx0TxUGKYoPDWLuoL5eKuSmw9
reT6YBmEfe5bVazZQ6FHozMhcAqZnnH291JGOxG9qiaaPsQZ9pIwbkVecyk6e5Tz
LqPzesoGguMABMyhjCfJ5xdyY/K+sLz7JhKQpwIDAQABAoIBAGh85h3VgnsshLxp
PaREqhI0Ju5v+gVDRRgi4XXWmKOJKdvrKV08l3E7J7PEVLwJnQxMtQewCpOXPKdp
BIkLP+hz5YOzNdgjAkHeFoc4A6krrkq9YkWT2SUYkTEaZE957W1Lor6I2NHkGe7Z
XYs06FuLzzBfzSK2ZycX69JHEx+BBH7Wf6NYYkpsxK0B5o57zvsTJq4KHusJvQ70
ROLXNbm9PW4Z1NxRkAyWtNySVVwtDLbMV1if0u0tsyk3q0O4h4zKcdwkDeRtEtcY
rS1SREcrUZs6f+HBlFbw92yS2Q7HMErE8kgeAW+UObLDguNkXjnUMgKqgP9NdWuq
JtexzmkCgYEAzqu12Mm/6Q0LdyTy/whIYAFjE4XQPsfwoxY4vKmn5laU7190eyYt
WUnishS/W5T6uREfAh3uYprHgvA3Z6mMtH4ujtyH02OIxP04NwBWgmrC4huvdsT1
gKPFbKAY/mpSrAGIrBcu0JkodwDGCgupDeLZq8xzS2hRsBEkOXb9G50CgYEAyVTc
Nlyw1qz/WdVsb91yO3pt5hxyjvcyirmb8SG+IsEhM4JRReNLkDoGM+FxhTnbMsia
vzk5Ji5BBVJFeWpFo4VJ5bgB8km2uqcS67U9ze2WBkNtvnS8keta9bsd0AEn/AOj
Tz7g9nEjBS6CG9p1T628/6aLaWRPATAhPTECVBMCgYEAyY8VrvQ0QmoCgJR8mNXP
IDK6GdQroM8GlUea1gTwRuiyIDKMO36kQ6yXdu5dIkhNrihQgZQHZgtmAQGeR29I
Vs+pQJM7tKIiRVxgcuPVeyP8JOCzY7X7aRZP+Py644V2U2K7lHqXocF9gXIzsqBk
o7JWcALZfvWilYBiP9kYSNECgYEAi09w4RzaMHGcb2jCk9VDSey5RtTAYDSkgGFW
ik+y5RGGC8JMwnM4wh+kUxnYFzuldUph6ZeK9+RhkXEQKadjcHa2X4IntqNTEWyy
Ju9OSMPxX3wg3/yezslwM0C6rEdgh31s71SvDVfTx64a0XMkYXHyqWNwbAjAsi2/
kjvrRIkCgYAauOZSsd6ykgUtOd/quiGG9bMgUe+fNyoaRX2lX8PbG2fpz9Z8WtcX
DhGF3vh6asdo2q3MTCbmiu0bb1GJYQncR19c1mFDQ8nitDelpp/o+zAsOTf3ILF8
4wx2fGuSvcBdXqEvaGmxlPnjnEM7cEqaPusEGRBF1j106R07wusBMA==
-----END RSA PRIVATE KEY-----

+ 69 - 0
src/server/https/zsyy/xmzsh.pem

@ -0,0 +1,69 @@
-----BEGIN CERTIFICATE-----
MIIGwDCCBaigAwIBAgIQA/h5NNzW6VgXzrWTZvA+WjANBgkqhkiG9w0BAQsFADBf
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMR4wHAYDVQQDExVEaWdpQ2VydCBDTiBSU0EgQ0EgRzEw
HhcNMjAxMjAzMDAwMDAwWhcNMjIwMTAzMjM1OTU5WjCB8jELMAkGA1UEBhMCQ04x
EjAQBgNVBAgMCeemj+W7uuecgTESMBAGA1UEBwwJ5Y6m6Zeo5biCMYGkMIGhBgNV
BAoMgZnljqbpl6jlpKflrabpmYTlsZ7kuK3lsbHljLvpmaLvvIjljqbpl6jkuK3l
sbHljLvpmaLjgIHljqbpl6jluILogIHlubTnl4XlurflpI3noJTnqbbmiYDjgIHl
jqbpl6jluILmtojljJbnlr7nl4XnoJTnqbbmiYDjgIHljqbpl6jluILkuLTluorm
o4DpqozkuK3lv4PvvIkxFDASBgNVBAMMCyoueG16c2guY29tMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoolT5lTdAsVSHU/WLhWb/VcGf8cUg9bEvAAI
tKLcCQc1eMjXWJLhTr8ILZ72+pzJc+EdwgphQTpQy1KbVaTZbpfh9NYQlZQ7v1N8
B/Bdb6jvirnIUqBFwvGYSbcISxeZhljZAm8hn+QSg57IJOj8iH+qz8QxuCOYFI54
XDs3QVVOhuMFwueo3dgWBYCA9uo2OL2xjt7MyA4pYu1wU9YJfL3dx0TxUGKYoPDW
LuoL5eKuSmw9reT6YBmEfe5bVazZQ6FHozMhcAqZnnH291JGOxG9qiaaPsQZ9pIw
bkVecyk6e5TzLqPzesoGguMABMyhjCfJ5xdyY/K+sLz7JhKQpwIDAQABo4IC4jCC
At4wHwYDVR0jBBgwFoAU70ULeBWRpbbRc6SSb2NaWdNfPp0wHQYDVR0OBBYEFP5h
nqB9zpziWbSVW7jVvazWoO5qMCEGA1UdEQQaMBiCCyoueG16c2guY29tggl4bXpz
aC5jb20wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF
BQcDAjB1BgNVHR8EbjBsMDSgMqAwhi5odHRwOi8vY3JsMy5kaWdpY2VydC5jb20v
RGlnaUNlcnRDTlJTQUNBRzEuY3JsMDSgMqAwhi5odHRwOi8vY3JsNC5kaWdpY2Vy
dC5jb20vRGlnaUNlcnRDTlJTQUNBRzEuY3JsMEwGA1UdIARFMEMwNwYJYIZIAYb9
bAEBMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMw
CAYGZ4EMAQICMG8GCCsGAQUFBwEBBGMwYTAhBggrBgEFBQcwAYYVaHR0cDovL29j
c3AuZGNvY3NwLmNuMDwGCCsGAQUFBzAChjBodHRwOi8vY3JsLmRpZ2ljZXJ0LWNu
LmNvbS9EaWdpQ2VydENOUlNBQ0FHMS5jcnQwDAYDVR0TAQH/BAIwADCCAQQGCisG
AQQB1nkCBAIEgfUEgfIA8AB2ACl5vvCeOTkh8FZzn2Old+W+V32cYAr4+U1dJlwl
XceEAAABdid/WE8AAAQDAEcwRQIhAMuUTDAabntVZPy4JVXU1kLJ8z3jTzJDIL4x
BacLZdY1AiBjBnkYVYKQBXZ4+Co73wL2BvlMDk5yixr9AXDK39fDjwB2AEHIyrHf
IkZKEMahOglCh15OMYsbA+vrS8do8JBilgb2AAABdid/WG4AAAQDAEcwRQIgbgoo
G2Ld7pgsVq1ehqcuc3v+fr+aYOUWMQ3B1u1gm2sCIQCUankj8vW+k6MZFARnUYNJ
Ye5Wdyq66cicmD+0O5RGTTANBgkqhkiG9w0BAQsFAAOCAQEAb5e+zM9qda8+ZCPu
jYu0T9nhDt3GbnwaktrsONajFniNbmglh3cAsE1JmG6I2uPDbgNuQF8MLMNssAS6
nSIm9uoMSvUBDyHXdkWubO6ftH3a3//Ar90rTJNS3TVpqbTf76ShcsCPu2h54nf+
s54V078o63mz3gSSfuRKCD+OVKCRt1Y64R6aazkAfbzWtgUuE4aMMIRcxXrkpPRx
RZ/VLBOk1PHwNwYZOejnNXUWD0yzQPOfPH5UMMuLAiFs5SYZ5QR12dV17h8DjSGL
DU5EvpRYsM2lS6i7qh0YonfZh0k5F3U6MPZ0CRNPETud+1WaM1Z5S+aa+IfgwJSc
Dk2Ysw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFGjCCBAKgAwIBAgIQC1D+aUyDyVziJBXGCVz+QDANBgkqhkiG9w0BAQsFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
QTAeFw0xOTA2MjAxMjI3MzRaFw0yOTA2MjAxMjI3MzRaMF8xCzAJBgNVBAYTAlVT
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
b20xHjAcBgNVBAMTFURpZ2lDZXJ0IENOIFJTQSBDQSBHMTCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBALv4mF6rORUUXZuwg/FR9YFOM5tZj3RE5JTMFWrD
darbvnxdgu5BHqmPyt/Q7xNS7wOyHRJ4eRpYh0hJPRbtVQI/0VggjVpXLdNhxpVd
/RhQ44rej5/YVSUkgSPagM5zppdCo6lSBIa3pznzXTVsHgE6umt6RzaxCQs0RrU1
StqME9YlRHO2cY0skyA5eYYbxrlr5xJZ4m1j89r3OyHYM0Mc4y0bio7gUhWPZl17
BvDuGbk9DXDxowd+5vnpKpN051Ltm84N6BECzeE/vbHOLGVU6cY01V750zDJ7STp
dNz8FrV0CMP6K9rfBGRVYYEy6+rMSOvLthP+RqId3b/IbnkCAwEAAaOCAc4wggHK
MB0GA1UdDgQWBBTvRQt4FZGlttFzpJJvY1pZ018+nTAfBgNVHSMEGDAWgBQD3lA1
VtFMu2bwo+IbG8OXsj3RVTAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYB
BQUHAwEGCCsGAQUFBwMCMA8GA1UdEwEB/wQFMAMBAf8wMQYIKwYBBQUHAQEEJTAj
MCEGCCsGAQUFBzABhhVodHRwOi8vb2NzcC5kY29jc3AuY24wRAYDVR0fBD0wOzA5
oDegNYYzaHR0cDovL2NybC5kaWdpY2VydC1jbi5jb20vRGlnaUNlcnRHbG9iYWxS
b290Q0EuY3JsMIHOBgNVHSAEgcYwgcMwgcAGBFUdIAAwgbcwKAYIKwYBBQUHAgEW
HGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwgYoGCCsGAQUFBwICMH4MfEFu
eSB1c2Ugb2YgdGhpcyBDZXJ0aWZpY2F0ZSBjb25zdGl0dXRlcyBhY2NlcHRhbmNl
IG9mIHRoZSBSZWx5aW5nIFBhcnR5IEFncmVlbWVudCBsb2NhdGVkIGF0IGh0dHBz
Oi8vd3d3LmRpZ2ljZXJ0LmNvbS9ycGEtdWEwDQYJKoZIhvcNAQELBQADggEBAL9c
8lmaFkBmO0ch6w5mi1RKS7c7U3pq3wWOXzUFKKJZCnyJYHcMUIyNCDg71clCFz4F
t/yYLoXkzqNULAaEUtZ5ikf4I8hJHv60kg25GLCsfm2O1isbE0Wxpeb4qf7OGPKK
MLCmmcdbZkuO+Ax38jo8/BO4TnVoeb+bYKgTuvev6wGCTezIDNGB5+/pD2NXwpkq
cgX4ofIK4CdKlD1Hi5nwJbKYOLRpNrXp83n5oacxlezxp4ikt64EhDsG1mWaQD0t
qCcBpGHbb8GSyBs2KohCp/lcysTVLZtUZkZGtIBd+Nli3jVPpuZjlGi51P30TReJ
rgH4+ePTzmDxnYSkUhI=
-----END CERTIFICATE-----

+ 64 - 23
src/server/include/commons.js

@ -19,6 +19,8 @@ if (process.env.IM_PROFILE === "prod") {
    configFile += "test";
} else if (process.env.IM_PROFILE === "ystest") {
    configFile += "ystest";
} else if (process.env.IM_PROFILE === "hzprod") {
    configFile += "hzprod";
} else {
    configFile += "test";
}
@ -44,6 +46,57 @@ const SESSION_TYPES = {
    PRESCRIPTION_HOSPITAL_VIDEO:16, //互联网医院医院在线复诊-视频
    MUC_VIDEO:17, //视频咨询
    GUIDANCE_ASSISTANT: 18,//导诊助手
    EMERGENCY_ASSISTANCE: 20,//紧急救助
    DOOR_COACH:21, //上门预约
    SECURITY_WARN:22, //安防咨询
    ONLINE:23, //新生儿在线咨询
    ONLINEAged:24, //老人在线咨询
    contantsType: function (session_type) {
        if( session_type==SESSION_TYPES.MUC||
            session_type==SESSION_TYPES.P2P||
            session_type==SESSION_TYPES.GROUP||
            session_type==SESSION_TYPES.DISCUSSION||
            session_type==SESSION_TYPES.SPECIALISTGROUP||
            session_type==SESSION_TYPES.PRESCRIPTION||
            session_type==SESSION_TYPES.PRESCRIPTION_HOSPITAL||
            session_type==SESSION_TYPES.COLLABORATION_HOSPITAL||
            session_type==SESSION_TYPES.GUIDANCE_HOSPITAL||
            session_type==SESSION_TYPES.ONDOOR_NURSING||
            session_type==SESSION_TYPES.GENERAL_EXPERT||
            session_type==SESSION_TYPES.PRESCRIPTION_HOSPITAL_VIDEO||
            session_type==SESSION_TYPES.MUC_VIDEO||
            session_type==SESSION_TYPES.GUIDANCE_ASSISTANT||
            session_type==SESSION_TYPES.EMERGENCY_ASSISTANCE||
            session_type==SESSION_TYPES.DOOR_COACH||
            session_type==SESSION_TYPES.ONLINE||
            session_type==SESSION_TYPES.ONLINEAged||
            session_type==SESSION_TYPES.SECURITY_WARN){
            return true;
        }
        return false;
    },
    contantsTopticType: function (sessionType) {
        if( sessionType == SESSION_TYPES.MUC||
            sessionType == SESSION_TYPES.PRESCRIPTION ||
            sessionType == SESSION_TYPES.PRESCRIPTION_HOSPITAL ||
            sessionType == SESSION_TYPES.COLLABORATION_HOSPITAL ||
            sessionType == SESSION_TYPES.GUIDANCE_HOSPITAL ||
            sessionType == SESSION_TYPES.GENERAL_EXPERT ||
            sessionType == SESSION_TYPES.PRESCRIPTION_HOSPITAL_VIDEO ||
            sessionType == SESSION_TYPES.MUC_VIDEO ||
            sessionType == SESSION_TYPES.ONDOOR_NURSING||
            sessionType == SESSION_TYPES.GUIDANCE_ASSISTANT||
            sessionType == SESSION_TYPES.EMERGENCY_ASSISTANCE||
            sessionType == SESSION_TYPES.DOOR_COACH||
            sessionType == SESSION_TYPES.ONLINE||
            sessionType == SESSION_TYPES.ONLINEAged||
            sessionType == SESSION_TYPES.SECURITY_WARN){
            return true;
        }
        return false;
    }
};
exports.SESSION_TYPES = SESSION_TYPES;
@ -118,6 +171,12 @@ const CONTENT_TYPES = {
    ChangeDoorDoctor: 2103,//上门服务-变更工单医生信息
    ChangeDoorPackageItems:2104, //上门服务-变更工单服务项信息
    InformedConsent:2105,//知情通知书
    ReservationDoorCoachCardInfo: 2201,//上门辅导服务-预约工单卡片信息
    ChangeDoorCoachCardInfo: 2202,//上门辅导服务-修改工单卡片信息
    ChangeDoorCoachDoctor: 2203,//上门辅导服务-变更工单医生信息
    ChangeDoorCoachPackageItems:2204, //上门辅导服务-变更工单服务项信息
    CoachInformedConsent:2205,//上门辅导服务 知情通知书
    emergencyAssistance:40,//医疗云-紧急预警弹框
    typeToDescription: function (type, defaultDescription) {
        if (CONTENT_TYPES.Image == type) {
            return '[图片]';
@ -146,6 +205,7 @@ exports.SOCKET_TYPES={
    DOCTOR_SYSTEM:"doctor_system",//医生APP外层
    PC_DOCTOR:"pc_doctor",//医生PC
    PC_DOCTOR_SYSTEM:"pc_doctor_system",//医生PC外层
    CloudCarePcManage:"cloudCare_pcManage",//医养pc管理
    PCIM_DOCTOR:"pcim_doctor",//中山医院医生MDT
    DEMO:"demo"
}
@ -254,31 +314,12 @@ const DB_TABLES = {
            return DB_TABLES.MucMessages;
        else if (sessionType == SESSION_TYPES.P2P)
            return DB_TABLES.P2pMessages;
        else if (sessionType == SESSION_TYPES.GROUP)
        else if (sessionType == SESSION_TYPES.GROUP
            ||sessionType == SESSION_TYPES.SPECIALISTGROUP
            ||sessionType == SESSION_TYPES.DISCUSSION)
            return DB_TABLES.GroupMessages;
        else if (sessionType == SESSION_TYPES.DISCUSSION)
            return DB_TABLES.GroupMessages;
        else if (sessionType == SESSION_TYPES.PRESCRIPTION)
            return DB_TABLES.MucMessages;
        else if (sessionType == SESSION_TYPES.COLLABORATION_HOSPITAL)
            return DB_TABLES.MucMessages;
        else if (sessionType == SESSION_TYPES.GUIDANCE_HOSPITAL)
            return DB_TABLES.MucMessages;
        else if (sessionType == SESSION_TYPES.GUIDANCE_ASSISTANT)
            return DB_TABLES.MucMessages;
        else if (sessionType == SESSION_TYPES.PRESCRIPTION_HOSPITAL)
            return DB_TABLES.MucMessages;
        else if (sessionType == SESSION_TYPES.ONDOOR_NURSING)
            return DB_TABLES.MucMessages;
        else if (sessionType == SESSION_TYPES.SPECIALISTGROUP)
            return DB_TABLES.GroupMessages;
        else if (sessionType == SESSION_TYPES.GENERAL_EXPERT)
            return DB_TABLES.MucMessages;
        else if (sessionType == SESSION_TYPES.PRESCRIPTION_HOSPITAL_VIDEO)
            return DB_TABLES.MucMessages;
        else if (sessionType == SESSION_TYPES.MUC_VIDEO)
        else
            return DB_TABLES.MucMessages;
        else throw {message: "Unknown session type"};
    }
};

+ 2 - 0
src/server/include/endpoints.js

@ -19,6 +19,8 @@ const APIv2 = {
        Send: '/send',       //发送消息,和会话无关,内外网通信
        DataMessage: '/dataMessage',
        CleanMessageToRedis: '/cleanMessageToRedis',
        DoctorSystemMessage: '/doctorSystemMessage',
        CloudCarePcManageMessage: '/cloudCarePcManageMessage',//
        CleanMessageLastFetchTimeToRedis: '/cleanMessageLastFetchTimeToRedis'
    },
    Users: {

+ 2 - 41
src/server/models/client/app.client.js

@ -216,21 +216,7 @@ class AppClient extends RedisModel {
                }
                var session_type = isNaN(Number(sessionType))?sessionType:Number(sessionType);
                if( session_type==SESSION_TYPES.MUC||
                    session_type==SESSION_TYPES.P2P||
                    session_type==SESSION_TYPES.GROUP||
                    session_type==SESSION_TYPES.DISCUSSION||
                    session_type==SESSION_TYPES.SPECIALISTGROUP||
                    session_type==SESSION_TYPES.PRESCRIPTION||
                    session_type==SESSION_TYPES.PRESCRIPTION_HOSPITAL||
                    session_type==SESSION_TYPES.COLLABORATION_HOSPITAL||
                    session_type==SESSION_TYPES.GUIDANCE_HOSPITAL||
                    session_type==SESSION_TYPES.ONDOOR_NURSING||
                    session_type==SESSION_TYPES.MUC_VIDEO||
                    session_type==SESSION_TYPES.GENERAL_EXPERT||
                    session_type==SESSION_TYPES.PRESCRIPTION_HOSPITAL_VIDEO||
                    session_type==SESSION_TYPES.MUC_VIDEO||
                    session_type==SESSION_TYPES.GUIDANCE_ASSISTANT||
                if( SESSION_TYPES.contantsType(session_type)||
                    message.business_type == MESSAGE_BUSSINESS_TYPE.D_CT_01||
                    message.business_type == MESSAGE_BUSSINESS_TYPE.D_CT_02||
                    message.business_type == MESSAGE_BUSSINESS_TYPE.D_CT_03||
@ -238,35 +224,10 @@ class AppClient extends RedisModel {
                    message.business_type == MESSAGE_BUSSINESS_TYPE.D_CT_05||
                    message.business_type == MESSAGE_BUSSINESS_TYPE.D_CT_06||
                    message.business_type == MESSAGE_BUSSINESS_TYPE.D_CT_07){
                    //是否发送消息
                    // MessageNoticeSettingRepo.findOne(targetId,'1',function (err,res) {
                    //     if(res&&res.length>0){
                    //         let master_switch = res[0].master_switch;
                    //         let im_switch = res[0].im_switch;
                    //         let family_topic_switch = res[0].family_topic_switch;
                    //         if(master_switch==0||im_switch==0){
                    //             ModelUtil.logError(targetId+"-关闭im消息,消息id", message.id);
                    //         }
                    //         // else if(session_type==SESSION_TYPES.MUC&&family_topic_switch==1){
                    //         //     SignFamilyRepo.isHealthDoctor(message.session_id,targetId,function (err,res) {
                    //         //         if(res&&res.length==0){
                    //         //             ModelUtil.logError("全科医生:"+targetId+"-关闭im消息,消息id", message.id);
                    //         //         }else{
                    //         //             AppClient.sendNotice(targetId, message, sessionType,badge,userStatus)
                    //         //         }
                    //         //     })
                    //         // }
                    //         else{
                    //             AppClient.sendNotice(targetId, message, sessionType,badge,userStatus)
                    //         }
                    //     }
                    // });
                    log.info("推送医生模版消息-sendNotice");
                    AppClient.sendNotice(targetId, message, sessionType,badge,userStatus)
                }
                // else{
                //     AppClient.sendNotice(targetId, message, sessionType,badge,userStatus)
                // }
            });
        }

+ 141 - 1
src/server/models/client/wechat.client.js

@ -72,6 +72,10 @@ class WechatClient extends RedisModel {
            message.content_type == CONTENT_TYPES.ChangeDoorCardInfo ||
            message.content_type == CONTENT_TYPES.ChangeDoorDoctor ||
            message.content_type == CONTENT_TYPES.ChangeDoorPackageItems ||
            message.content_type == CONTENT_TYPES.ReservationDoorCoachCardInfo ||
            message.content_type == CONTENT_TYPES.ChangeDoorCoachCardInfo ||
            message.content_type == CONTENT_TYPES.ChangeDoorCoachDoctor ||
            message.content_type == CONTENT_TYPES.ChangeDoorCoachPackageItems ||
            message.content_type == CONTENT_TYPES.VideoAnswerStatus ||
            message.content_type == CONTENT_TYPES.Screening ||
            message.content_type == CONTENT_TYPES.PrescriptionReject ||
@ -446,6 +450,135 @@ class WechatClient extends RedisModel {
    }
    /**
     * 医疗云 医生外层新消息
     * @param doctorId
     * @param message
     * @param response
     */
    cloudSendMDTSocketMessageToDoctor(doctorId, message,handler) {
        log.info("doctor======="+doctorId)
        let self = this;
        // let doctorMDTClient = clientCache.findByIdAndType("pcim_"+doctorId,SOCKET_TYPES.PCIM_DOCTOR);
        let doctorSYSTEMClient = clientCache.findByIdAndType("pc_system_"+doctorId,SOCKET_TYPES.PC_DOCTOR_SYSTEM);
        let doctorAPPSYSTEMClient = clientCache.findByIdAndType("doctor_system_"+doctorId,SOCKET_TYPES.DOCTOR_SYSTEM);
        if(!doctorSYSTEMClient&&!doctorAPPSYSTEMClient){
            log.warn("target system doctor is not online!");
            ModelUtil.emitOK(self.eventEmitter, {status: 1,message:"doctor_not_online"});
            return;
        }
        //外层
        if(!doctorSYSTEMClient){
            log.warn("target system doctor is not online!");
        }else{
            if (message.content_type==CONTENT_TYPES.emergencyAssistance) {
                doctorSYSTEMClient.socket.emit('message', {
                    session_id: message.session_id,
                    sender_name: message.sender_name,
                    content_notice: message.content_notice,
                    sender_code: message.sender_code,
                    OrderType: message.OrderType, //20紧急救助工单21上门预约工单22安防警报工单
                    order_id: message.order_id,
                    type: message.content_type,
                    extend: message.extend
                });
            }else {
                doctorSYSTEMClient.socket.emit('message', {
                    id: message.id,
                    session_id: 'system',
                    sender_id: message.sender_id,
                    sender_name: message.sender_name,
                    content_type: 1,
                    content: {"socket_sms_type":4},
                    timestamp: ObjectUtil.timestampToLong(message.timestamp),
                    type: message.content_type,          // legacy support
                    name: message.sender_name,
                    patient_name:message.patient_name,
                    patient_age:message.patient_age,
                    patient_sex:message.patient_sex,
                    extend:message.extend
                });
            }
        }
        if(!doctorAPPSYSTEMClient){
            log.warn("target system app doctor is not online!");
        }else{
            if (message.content_type+""==CONTENT_TYPES.emergencyAssistance) {
                doctorAPPSYSTEMClient.socket.emit('message', {
                    session_id: message.session_id,
                    sender_name: message.sender_name,
                    content_notice: message.content_notice,
                    sender_code: message.sender_code,
                    OrderType: message.OrderType,
                    order_id: message.order_id,
                    type: message.content_type,
                    extend: message.extend
                });
            }else {
                doctorAPPSYSTEMClient.socket.emit('message', {
                    id: message.id,
                    session_id: 'system',
                    sender_id: message.sender_id,
                    sender_name: message.sender_name,
                    content_type: 1,
                    content: {"socket_sms_type":4},
                    timestamp: ObjectUtil.timestampToLong(message.timestamp),
                    type: message.content_type,          // legacy support
                    name: message.sender_name,
                    patient_name:message.patient_name,
                    patient_age:message.patient_age,
                    patient_sex:message.patient_sex,
                    extend:message.extend
                });
            }
        }
        ModelUtil.emitOK(self.eventEmitter, {status: 200});
        return;
    }
    /**
     * 医疗云 PC管理端发送socket
     * @param doctorId
     * @param message
     * @param response
     */
    CloudCarePcManageMessageToPc(clientType,message,handler) {
        let self = this;
        let CloudCarePcManageClients = clientCache.findByType(clientType);
        if(CloudCarePcManageClients.size==0){
            log.warn("target pcManage is not online!");
            ModelUtil.emitOK(self.eventEmitter, {status: 1,message:"pcManage_not_online"});
            return;
        }else {
            for (let clientKye of CloudCarePcManageClients.keys()){
                let CloudCarePcManageClient = CloudCarePcManageClients.get(clientKye);
                if (CloudCarePcManageClient){
                    if (message.content_type==CONTENT_TYPES.emergencyAssistance) {
                        CloudCarePcManageClient.socket.emit('message', {
                            session_id: message.session_id,
                            sender_name: message.sender_name,
                            content_notice: message.content_notice,
                            OrderStatus:message.OrderStatus,
                            sender_code: message.sender_code,
                            OrderType: message.OrderType, //20紧急救助工单21上门预约工单22安防警报工单
                            order_id: message.order_id,
                            type: message.content_type,
                            extend: message.extend
                        });
                    }
                }
            }
        }
        ModelUtil.emitOK(self.eventEmitter, {status: 200});
        return;
    }
    static sendPcImSocket(targetId, message, sessionType) {
        if (message.content_type == CONTENT_TYPES.PlainText ||
            message.content_type == CONTENT_TYPES.Image ||
@ -1025,6 +1158,8 @@ class WechatClient extends RedisModel {
                                url = "https://ih.xmheart.com/hlwyy/ims-wx/index.html#/chatRoom?type=1&consultCode="+topic.id;
                            }else if("sd_tnzyy_wx" == config.imClientType.id){
                                url = "https://zyy.jkta.com.cn/ims-wx/index.html#/chatRoom?type=1&consultCode="+topic.id;
                            }else if("hz_yyyzh_wx" == config.imClientType.id){
                                url = "http://hzijk.cityihealth.com?type=1&consultCode="+topic.id;
                            }else{
                            }
@ -1052,10 +1187,15 @@ class WechatClient extends RedisModel {
                        let title = consultTitle;
                        let content = "您的咨询有新的回复";
                        let contentString = replyContent;
                        let topidId = topic.id;
                        let sessionId = message.session_id;
                        // log.info("推送居民公众号:params:"+params)
                        let params = 'senderName='+encodeURIComponent(senderName)+'&userName='+encodeURIComponent(userName)+'&idCard='+idCard+"&phone="+phone+'&title='+encodeURIComponent(consultTitle)+'&content='+encodeURIComponent(content)+'&contentString='+encodeURIComponent(contentString)+'&url='+encodeURIComponent(url);
                        let params = 'senderName='+encodeURIComponent(senderName)+'&userName='+encodeURIComponent(userName)+'&idCard='+idCard
                            +"&phone="+phone+'&title='+encodeURIComponent(consultTitle)+'&content='+encodeURIComponent(content)
                            +'&contentString='+encodeURIComponent(contentString)+'&url='+encodeURIComponent(url)
                            +'&topidId='+encodeURIComponent(topidId)+'&sessionId='+encodeURIComponent(sessionId);
                        HlwyyWechatAssistantSDK.request(userName,idCard,phone,title,content,contentString,url,params, function (err, res) {
                            // WlyyAssistantSDK.request('admin', '0a5c5258-8863-4b07-a3f9-88c768528ab4', '', 'admin_imei', '/doctor/feldsher/sendDoctorTemplate', param, function (err, res) {

+ 1 - 0
src/server/models/messages/messages.js

@ -279,6 +279,7 @@ class Messages extends RedisModel {
        redis.hmsetAsync(sessionKey,
            "create_date", message.timestamp.getTime(),
            "last_content", message.content,
            "last_message_time", message.timestamp.getTime(),
            "last_content_type", message.content_type,
            "last_sender_id", message.sender_id,
            "last_sender_name", message.sender_name

+ 258 - 106
src/server/models/sessions/sessions.js

@ -134,16 +134,7 @@ class Sessions extends RedisModel {
        }
        function callBusinessType(sessionId) {
            if(type == SESSION_TYPES.MUC||
                type == SESSION_TYPES.PRESCRIPTION ||
                type == SESSION_TYPES.PRESCRIPTION_HOSPITAL ||
                type==SESSION_TYPES.COLLABORATION_HOSPITAL ||
                type==SESSION_TYPES.GUIDANCE_HOSPITAL ||
                type==SESSION_TYPES.GENERAL_EXPERT ||
                type==SESSION_TYPES.PRESCRIPTION_HOSPITAL_VIDEO ||
                type==SESSION_TYPES.MUC_VIDEO ||
                type==SESSION_TYPES.ONDOOR_NURSING||
                type==SESSION_TYPES.GUIDANCE_ASSISTANT){
            if(SESSION_TYPES.contantsTopticType(type)){
                callCreate(sessionId, SESSION_BUSINESS_TYPE.PATIENT);
            }else if(type==SESSION_TYPES.DISCUSSION||type==SESSION_TYPES.GROUP){
                callCreate(sessionId, SESSION_BUSINESS_TYPE.DOCTOR);
@ -158,16 +149,7 @@ class Sessions extends RedisModel {
            let createDate = new Date();
            Participants.saveParticipantsToRedis(sessionId, participantArray, createDate, function (res) {
                let sessionKey = RedisModel.makeRedisKey(REDIS_KEYS.Session, sessionId);
                if (type == SESSION_TYPES.MUC||
                    type == SESSION_TYPES.PRESCRIPTION ||
                    type == SESSION_TYPES.PRESCRIPTION_HOSPITAL ||
                    type == SESSION_TYPES.COLLABORATION_HOSPITAL ||
                    type ==SESSION_TYPES.GUIDANCE_HOSPITAL ||
                    type==SESSION_TYPES.GENERAL_EXPERT ||
                    type==SESSION_TYPES.PRESCRIPTION_HOSPITAL_VIDEO ||
                    type==SESSION_TYPES.MUC_VIDEO ||
                    type==SESSION_TYPES.ONDOOR_NURSING||
                    type==SESSION_TYPES.GUIDANCE_ASSISTANT) {
                if (SESSION_TYPES.contantsTopticType(type)) {
                    businessType = 2;
                }
                let session = {
@ -224,16 +206,7 @@ class Sessions extends RedisModel {
        //流程2-判断session的业务类型;
        function callBusinessType() {
            if(type==SESSION_TYPES.MUC||
                type==SESSION_TYPES.PRESCRIPTION ||
                type==SESSION_TYPES.PRESCRIPTION_HOSPITAL ||
                type==SESSION_TYPES.COLLABORATION_HOSPITAL ||
                type==SESSION_TYPES.GUIDANCE_HOSPITAL ||
                type==SESSION_TYPES.GENERAL_EXPERT ||
                type==SESSION_TYPES.PRESCRIPTION_HOSPITAL_VIDEO ||
                type==SESSION_TYPES.MUC_VIDEO ||
                type==SESSION_TYPES.ONDOOR_NURSING||
                type==SESSION_TYPES.GUIDANCE_ASSISTANT){
            if(SESSION_TYPES.contantsTopticType(type)){
                callCreateSession(SESSION_BUSINESS_TYPE.PATIENT);
            }else if(type==SESSION_TYPES.SPECIALISTGROUP||type==SESSION_TYPES.DISCUSSION){
                callCreateSession(SESSION_BUSINESS_TYPE.DOCTOR);
@ -439,7 +412,7 @@ class Sessions extends RedisModel {
     * @param size
     * @param businessType
     */
    getUserSessions(userId, page, size, businessType) {
    getUserSessions(userId,name,search_type, page, size, businessType) {
        let userSessionKey = RedisModel.makeRedisKey(REDIS_KEYS.UserSessions, userId);
        let self = this;
        if (page > 0) {
@ -521,8 +494,11 @@ class Sessions extends RedisModel {
                                    let lastLoginTime = new Date();
                                    SessionRepo.findOne(sessionId, function (err, res) {
                                        if(res){
                                            session = res;
                                            session = res[0];
                                            session.create_date = new Date(session.create_date).getTime();
                                            if(session.last_message_time){
                                                session.last_message_time = new Date(session.last_message_time).getTime();
                                            }
                                            log.info("1.session.id:" + session.id);
                                            log.info("1.session.name:" + session.name);
                                            log.info("1.session.business_type:" + session.business_type);
@ -537,7 +513,7 @@ class Sessions extends RedisModel {
                                                "last_content_type", session.last_content_type||"",
                                                "last_content", session.last_content||"",
                                                "last_message_time", session.last_message_time||"",
                                                "create_date", new Date(session.create_date).getTime(),
                                                "create_date", session.create_date,
                                                "status",session.status==null?0:session.status
                                            ];
                                            // cache sessions
@ -665,6 +641,25 @@ class Sessions extends RedisModel {
                                for(var j = 0 ;j<participantsTimeArray.length;j++){
                                    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=? ";
                                    ImDb.execQuery({
                                        "sql": sql,
                                        "args": [sessionId,participantsTimeArray[j],sessionId,participantsTimeArray[j]],
                                        "handler": function(err,participantNames){
                                            if(participantNames&&participantNames.length>0){
                                                participantsTimeJson["name"] = participantNames[0].name;
                                                participantsTimeJson["avatar"] = participantNames[0].avatar;
                                                participantsTimeJson["is_patient"] = participantNames[0].type;
                                            }
                                        }
                                    });
                                    participantsTimeJson["id"] = participantsTimeArray[j];
                                    participantsTimeJson[participantsTimeArray[j]] = participantsTimeArray[j+1];
                                    participantsTime.push(participantsTimeJson);
                                }
@ -719,28 +714,101 @@ class Sessions extends RedisModel {
                                                    let topicId = topic.id;
                                                });
                                            });
                                            sessionList.push({
                                                id: sessionId,
                                                name: sessionName,
                                                create_date: parseInt(session.create_date),
                                                last_content_type: session.last_content_type||"",
                                                last_content: session.last_content||"",
                                                sender_id: session.last_sender_id||"",
                                                type: session.type,
                                                sender_name: session.last_sender_name||"",
                                                unread_count: count,
                                                // business_type: session.business_type,
                                                business_type: businessType,
                                                my_role: role,
                                                sender_sex: sex,
                                                sender_birthday: bir,
                                                participantsTimeArray:participantsTime,
                                                status:session.status,
                                                is_invite:isInvite,
                                                backTopid:backTopid
                                            });
                                            var SearchExist=false;
                                            if (search_type==1&&name){//医生
                                                if (session.type!=2){
                                                    SearchExist = false;
                                                }
                                                else {
                                                    for (var tmpIndex in participantsTime){
                                                        var patientName = participantsTime[tmpIndex].name
                                                        var is_patient = participantsTime[tmpIndex].is_patient
                                                        if (is_patient=0&&(patientName+"").indexOf(name)!=-1){
                                                            SearchExist = true;
                                                        }
                                                    }
                                                }
                                                if((sessionName+"").indexOf(name)!=-1){SearchExist = true;}
                                            }
                                            if (search_type==2&&name){//患者
                                                if (session.type!=2){
                                                    SearchExist = false;
                                                }
                                                else{
                                                    for (var tmpIndex in participantsTime){
                                                        var patientName = participantsTime[tmpIndex].name
                                                        var is_patient = participantsTime[tmpIndex].is_patient
                                                        if (is_patient=1&&(patientName+"").indexOf(name)!=-1){
                                                            SearchExist = true;
                                                        }
                                                    }
                                                }
                                                if((sessionName+"").indexOf(name)!=-1){SearchExist = true;}
                                            }
                                            if (search_type==3&&name){
                                                if((sessionName+"").indexOf(name)!=-1){
                                                    sessionList.push({
                                                        id: sessionId,
                                                        name: sessionName,
                                                        create_date: new Date(session.last_message_time).getTime(),
                                                        last_content_type: session.last_content_type,
                                                        last_content: session.last_content,
                                                        sender_id: session.last_sender_id,
                                                        type: session.type,
                                                        sender_name: session.last_sender_name,
                                                        unread_count: count,
                                                        business_type: session.business_type,
                                                        my_role: role,
                                                        sender_sex: sex,
                                                        sender_birthday: bir,
                                                        participantsTimeArray:participantsTime,
                                                        status:session.status,
                                                        is_invite:isInvite
                                                    });
                                                }
                                            }
                                            else if(name&&(search_type==1||search_type==2)){
                                                if (SearchExist){
                                                    sessionList.push({
                                                        id: sessionId,
                                                        name: sessionName,
                                                        create_date: new Date(session.last_message_time).getTime(),
                                                        last_content_type: session.last_content_type,
                                                        last_content: session.last_content,
                                                        sender_id: session.last_sender_id,
                                                        type: session.type,
                                                        sender_name: session.last_sender_name,
                                                        unread_count: count,
                                                        business_type: session.business_type,
                                                        my_role: role,
                                                        sender_sex: sex,
                                                        sender_birthday: bir,
                                                        participantsTimeArray:participantsTime,
                                                        status:session.status,
                                                        is_invite:isInvite
                                                    });
                                                }
                                            }
                                            else{
                                                sessionList.push({
                                                    id: sessionId,
                                                    name: sessionName,
                                                    create_date: new Date(session.last_message_time).getTime(),
                                                    last_content_type: session.last_content_type,
                                                    last_content: session.last_content,
                                                    sender_id: session.last_sender_id,
                                                    type: session.type,
                                                    sender_name: session.last_sender_name,
                                                    unread_count: count,
                                                    business_type: session.business_type,
                                                    my_role: role,
                                                    sender_sex: sex,
                                                    sender_birthday: bir,
                                                    participantsTimeArray:participantsTime,
                                                    status:session.status,
                                                    is_invite:isInvite
                                                });
                                            }
                                            index = (parseInt(index) + 1);
                                            if (index == sessionIds.length) {
                                                ModelUtil.emitOK(self.eventEmitter, sessionList);
@ -837,6 +905,24 @@ class Sessions extends RedisModel {
                                for(var j = 0 ;j<participantsTimeArray.length;j++){
                                    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=? ";
                                    ImDb.execQuery({
                                        "sql": sql,
                                        "args": [sessionId,participantsTimeArray[j],sessionId,participantsTimeArray[j]],
                                        "handler": function(err,participantNames){
                                            if(participantNames&&participantNames.length>0){
                                                participantsTimeJson["name"] = participantNames[0].name;
                                                participantsTimeJson["avatar"] = participantNames[0].avatar;
                                                participantsTimeJson["is_patient"] = participantNames[0].type;
                                            }
                                        }
                                    });
                                    participantsTimeJson["id"] = participantsTimeArray[j];
                                    participantsTimeJson[participantsTimeArray[j]] = participantsTimeArray[j+1];
                                    participantsTime.push(participantsTimeJson);
                                }
@ -1037,7 +1123,7 @@ class Sessions extends RedisModel {
     * @param size
     * @param businessType
     */
    getUserStatusSessions(userId,status,businessType,page, size) {
    getUserStatusSessions(userId,status,businessType,name,search_type,page, size) {
        let userSessionKey = RedisModel.makeRedisKey(REDIS_KEYS.UserSessions, userId);
        log.info(userId);
        let self = this;
@ -1097,6 +1183,23 @@ class Sessions extends RedisModel {
                                for(var j = 0 ;j<participantsTimeArray.length;j++){
                                    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=? ";
                                    ImDb.execQuery({
                                        "sql": sql,
                                        "args": [sessionId,participantsTimeArray[j],sessionId,participantsTimeArray[j]],
                                        "handler": function(err,participantNames){
                                            if(participantNames&&participantNames.length>0){
                                                participantsTimeJson["name"] = participantNames[0].name;
                                                participantsTimeJson["avatar"] = participantNames[0].avatar;
                                                participantsTimeJson["is_patient"] = participantNames[0].type;
                                            }
                                        }
                                    });
                                    participantsTimeJson["id"] = participantsTimeArray[j];
                                    participantsTimeJson[participantsTimeArray[j]] = participantsTimeArray[j+1];
                                    participantsTime.push(participantsTimeJson);
                                }
@ -1132,26 +1235,102 @@ class Sessions extends RedisModel {
                                            if (res.length != 0 && res[0].sex) {
                                                sex = res[0].sex;
                                            }
                                            var SearchExist=false;
                                            if (search_type==1&&name){//医生
                                                if (session.type!=2){
                                                    SearchExist = false;
                                                }
                                                else{
                                                    for (var tmpIndex in participantsTime){
                                                        var patientName = participantsTime[tmpIndex].name
                                                        var is_patient = participantsTime[tmpIndex].is_patient
                                                        if (is_patient=0&&(patientName+"").indexOf(name)!=-1){
                                                            SearchExist = true;
                                                        }
                                                    }
                                                }
                                                if((sessionName+"").indexOf(name)!=-1){SearchExist = true;}
                                            }
                                            if (search_type==2&&name){//患者
                                                if (session.type!=2){
                                                    SearchExist = false;
                                                }
                                                else{
                                                    for (var tmpIndex in participantsTime){
                                                        var patientName = participantsTime[tmpIndex].name
                                                        var is_patient = participantsTime[tmpIndex].is_patient
                                                        if (is_patient=1&&(patientName+"").indexOf(name)!=-1){
                                                            SearchExist = true;
                                                        }
                                                    }
                                                }
                                                if((sessionName+"").indexOf(name)!=-1){SearchExist = true;}
                                            sessionList.push({
                                                id: sessionId,
                                                name: sessionName,
                                                create_date: new Date(mysqlSession.last_message_time).getTime(),
                                                last_content_type: session.last_content_type,
                                                last_content: session.last_content,
                                                sender_id: session.last_sender_id,
                                                type: session.type,
                                                sender_name: session.last_sender_name,
                                                unread_count: count,
                                                business_type: session.business_type,
                                                my_role: role,
                                                sender_sex: sex,
                                                sender_birthday: bir,
                                                participantsTimeArray:participantsTime,
                                                status:session.status,
                                                is_invite:isInvite
                                            });
                                            }
                                            if (search_type==3&&name){
                                                if((sessionName+"").indexOf(name)!=-1){
                                                    sessionList.push({
                                                        id: sessionId,
                                                        name: sessionName,
                                                        create_date: new Date(mysqlSession.last_message_time).getTime(),
                                                        last_content_type: session.last_content_type,
                                                        last_content: session.last_content,
                                                        sender_id: session.last_sender_id,
                                                        type: session.type,
                                                        sender_name: session.last_sender_name,
                                                        unread_count: count,
                                                        business_type: session.business_type,
                                                        my_role: role,
                                                        sender_sex: sex,
                                                        sender_birthday: bir,
                                                        participantsTimeArray:participantsTime,
                                                        status:session.status,
                                                        is_invite:isInvite
                                                    });
                                                }
                                            }
                                            else if(name&&(search_type==1||search_type==2)){
                                                if (SearchExist){
                                                    sessionList.push({
                                                        id: sessionId,
                                                        name: sessionName,
                                                        create_date: new Date(mysqlSession.last_message_time).getTime(),
                                                        last_content_type: session.last_content_type,
                                                        last_content: session.last_content,
                                                        sender_id: session.last_sender_id,
                                                        type: session.type,
                                                        sender_name: session.last_sender_name,
                                                        unread_count: count,
                                                        business_type: session.business_type,
                                                        my_role: role,
                                                        sender_sex: sex,
                                                        sender_birthday: bir,
                                                        participantsTimeArray:participantsTime,
                                                        status:session.status,
                                                        is_invite:isInvite
                                                    });
                                                }
                                            }
                                            else{
                                                sessionList.push({
                                                    id: sessionId,
                                                    name: sessionName,
                                                    create_date: new Date(mysqlSession.last_message_time).getTime(),
                                                    last_content_type: session.last_content_type,
                                                    last_content: session.last_content,
                                                    sender_id: session.last_sender_id,
                                                    type: session.type,
                                                    sender_name: session.last_sender_name,
                                                    unread_count: count,
                                                    business_type: session.business_type,
                                                    my_role: role,
                                                    sender_sex: sex,
                                                    sender_birthday: bir,
                                                    participantsTimeArray:participantsTime,
                                                    status:session.status,
                                                    is_invite:isInvite
                                                });
                                            }
                                            index = (parseInt(index) + 1);
                                            if (index == sessionIds.length) {
                                                ModelUtil.emitOK(self.eventEmitter, sessionList);
@ -1404,16 +1583,7 @@ class Sessions extends RedisModel {
                                                if(users[j]==userId)continue;
                                                 WechatClient.sendAllRead(users[j],sessionId);
                                            }
                                        }else if(session.type == SESSION_TYPES.MUC ||
                                            session.type == SESSION_TYPES.PRESCRIPTION ||
                                            session.type==SESSION_TYPES.PRESCRIPTION_HOSPITAL ||
                                            session.type==SESSION_TYPES.COLLABORATION_HOSPITAL ||
                                            session.type==SESSION_TYPES.GUIDANCE_HOSPITAL ||
                                            session.type==SESSION_TYPES.GENERAL_EXPERT ||
                                            session.type==SESSION_TYPES.PRESCRIPTION_HOSPITAL_VIDEO ||
                                            session.type==SESSION_TYPES.MUC_VIDEO ||
                                            session.type==SESSION_TYPES.ONDOOR_NURSING||
                                            session.type==SESSION_TYPES.GUIDANCE_ASSISTANT){
                                        }else if(SESSION_TYPES.contantsTopticType(session.type)){
                                            for(var j in users){
                                                if(users[j]==userId)continue;
                                                WechatClient.sendMucAllRead(users[j],userId,sessionId);
@ -1446,16 +1616,7 @@ class Sessions extends RedisModel {
                                                //通知对方自己已经读取数据
                                                WechatClient.sendAllRead(users[j],sessionId);
                                            }
                                        }else if(session.type == SESSION_TYPES.MUC ||
                                            session.type == SESSION_TYPES.PRESCRIPTION ||
                                            session.type==SESSION_TYPES.PRESCRIPTION_HOSPITAL ||
                                            session.type==SESSION_TYPES.COLLABORATION_HOSPITAL ||
                                            session.type==SESSION_TYPES.GUIDANCE_HOSPITAL ||
                                            session.type==SESSION_TYPES.GENERAL_EXPERT ||
                                            session.type==SESSION_TYPES.PRESCRIPTION_HOSPITAL_VIDEO ||
                                            session.type==SESSION_TYPES.MUC_VIDEO ||
                                            session.type==SESSION_TYPES.ONDOOR_NURSING||
                                            session.type==SESSION_TYPES.GUIDANCE_ASSISTANT){
                                        }else if(SESSION_TYPES.contantsTopticType(session.type)){
                                            for(var j in users){
                                                if(users[j]==userId)continue;
                                                //如果是患者拉取数据告诉在线的医生患者已经读取数据
@ -1774,16 +1935,7 @@ class Sessions extends RedisModel {
                            });
                        });
                    }
                    if(sessionType == SESSION_TYPES.MUC ||
                        sessionType == SESSION_TYPES.PRESCRIPTION ||
                        sessionType ==SESSION_TYPES.PRESCRIPTION_HOSPITAL ||
                        sessionType ==SESSION_TYPES.COLLABORATION_HOSPITAL ||
                        sessionType ==SESSION_TYPES.GUIDANCE_HOSPITAL ||
                        sessionType ==SESSION_TYPES.GENERAL_EXPERT ||
                        sessionType ==SESSION_TYPES.PRESCRIPTION_HOSPITAL_VIDEO ||
                        sessionType ==SESSION_TYPES.MUC_VIDEO ||
                        sessionType ==SESSION_TYPES.ONDOOR_NURSING||
                        sessionType ==SESSION_TYPES.GUIDANCE_ASSISTANT){
                    if(SESSION_TYPES.contantsTopticType(sessionType)){
                        if(message.content_type == CONTENT_TYPES.PlainText ||
                           message.content_type == CONTENT_TYPES.Image ||
                           message.content_type == CONTENT_TYPES.Audio||

+ 1 - 10
src/server/models/sessions/topics.js

@ -265,16 +265,7 @@ class Topics extends RedisModel {
     */
    createTopic(topicName, topicId, sessionId, users, messages, sessionType) {
        let self = this;
        if (!sessionId && (sessionType == SESSION_TYPES.MUC||
                sessionType == SESSION_TYPES.PRESCRIPTION ||
                sessionType ==SESSION_TYPES.PRESCRIPTION_HOSPITAL ||
                sessionType ==SESSION_TYPES.COLLABORATION_HOSPITAL ||
                sessionType ==SESSION_TYPES.GUIDANCE_HOSPITAL ||
                sessionType ==SESSION_TYPES.GENERAL_EXPERT ||
                sessionType ==SESSION_TYPES.PRESCRIPTION_HOSPITAL_VIDEO ||
                sessionType ==SESSION_TYPES.MUC_VIDEO ||
                sessionType ==SESSION_TYPES.ONDOOR_NURSING||
                sessionType ==SESSION_TYPES.GUIDANCE_ASSISTANT)) {
        if (!sessionId && SESSION_TYPES.contantsTopticType(sessionType)) {
            ModelUtil.emitOK(self.eventEmitter, {status: -1, message: "会话ID为空,请先生成会话ID"});
            return;
        }

+ 10 - 0
src/server/models/socket.io/client.cache.js

@ -15,6 +15,7 @@ class ClientCache {
        this._clientsBySocket = new Map();
        this._clientsByUserId = new Map();
        this._clientsByTypeAndUserId = new Map();
        this._clientsCloudCarePCManage = new Map();
    }
    get clients() {
@ -25,6 +26,9 @@ class ClientCache {
        this._clientsByUserId.set(client.userId, client);
        this._clientsBySocket.set(client.socket, client);
        this._clientsByTypeAndUserId.set(client.userId+":"+client.clientType,client);
        if ("cloudCare_pcManage"===client.clientType){
            this._clientsCloudCarePCManage.set(client.userId+":"+client.clientType,client);
        }
        //log.info('Current clients: ', this.clients);
    }
@ -54,6 +58,12 @@ class ClientCache {
       return  this._clientsByTypeAndUserId.get(userId+":"+type);
    }
    findByType(type){
        if ("cloudCare_pcManage"===type){
            return this._clientsCloudCarePCManage;
        }
    }
    findBySocket(socket) {
        return this._clientsBySocket.get(socket);
    }

+ 15 - 0
src/server/models/socket.io/cloudCarePcManage.client.js

@ -0,0 +1,15 @@
/**
 * 医养 socket.
 *
 */
"use strict";
var Client = require('./client');
class CloudCarePcManageClient extends Client{
    constructor(socket, socketServer){
        super(socket, socketServer);
    }
}
module.exports = CloudCarePcManageClient;

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

@ -21,7 +21,7 @@ class SessionRepo {
     * @param handler
     */
    static findOne(sessionId, handler) {
        let sessionSQL = "select id,name,type,create_date,business_type,status from " + DB_TABLES.Sessions + " s where s.id = ?";
        let sessionSQL = "select id,name,type,create_date,business_type,status,last_message_time,last_content,last_content_type,last_sender_id,last_sender_name from " + DB_TABLES.Sessions + " s where s.id = ?";
        ImDb.execQuery({
            "sql": sessionSQL,
            "args": [sessionId],
@ -124,8 +124,12 @@ class SessionRepo {
    static findAllByTypes(userId, type, handler) {
        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 type in("+type+") AND S.STATUS = 0 ";
            + DB_TABLES.Sessions + " s where s.id in(" + sql + ")  AND S.STATUS = 0 ";
        log.info("获取用户全部会话: sql :" + sessionSQL);
        if(type){
            sessionSQL +=" and type in("+type+") ";
        }
        ImDb.execQuery({
            "sql": sessionSQL,
            "args": [userId],

+ 1 - 0
src/server/resources/config/config.dev.js

@ -84,6 +84,7 @@ exports.version = '2.0.0';
exports.debug = true;
exports.serverPort = 3000;
exports.sessionExpire = 1800;
exports.httpsOpen = false;
exports.showSQL = false;
exports.imDbConfig = imDbConfig;

+ 116 - 0
src/server/resources/config/config.hzprod.js

@ -0,0 +1,116 @@
"use strict";
let imDbConfig = {
    host: '10.18.43.40',
    user: 'wlyy',
    password: '0XxS3W*!cRj',
    database: 'im_internet_hospital',
    connectionLimit: '50',
    charset: 'utf8mb4'
};
// Redis
let redisConfig = {
    host: '10.18.43.40',
    port: 6379,
    db: 1,
    password:'Kb6wKDQP1W4'
};
// let redisConfig = {
//     host: '192.168.1.220',
//     port: 6379,
//     db: 1
// };
// 内网Redis
let innerRedisConfig = {
    host: '10.18.43.40',
    port: 6379,
    db: 1,
    password:'Kb6wKDQP1W4'
};
// 三师后台
let wlyyServerConfig = {
    host: '172',
    port: 8080,
    model:"/wlyy"
};
//医生助手配置
let wlyyDAServerConfig = {
    host: '172',
    port: 8080,
    model:"/wlyy"
};
// 个推AppStore版参数
let getTuiConfig = {
    HOST: 'https://api.getui.com/apiex.htm',
    APPID: 'H6FYbDeH7V6',
    APPKEY: '0PFWgYA',
    MASTERSECRET: 'p16'
};
// 微信配置
let wechatConfig = {
    appId: 'wx2c55f5b7b2f3cb56',
    appSecret: '0dd9927e58125ad5f0efb9299860d145',
    token: '27eb3bb24f149a7760cf1bb154b08041',
    accId: 'gh_da06ed9e5751',
    baseUrl: 'http://hzijk.cityihealth.com',
    template: {
        consultTemplate: 'VZkXgor2eD2fL3c6ZpImVSj92p7eCD1Wx2fXy91SE0M'  // 咨询回复模板
    }
};
// 会话配置
let sessionConfig = {
    maxMessageCount: 1000,                  // 会话缓存的消息数量
    maxMessageTimespan: 7 * 24 * 3600,      // 会话缓存的最大时间跨度
    expireSessionCleanCount: 10             // 每次清理多少个过期会话
};
// 议题配置
let topicConfig = {
    TTL: 24,                                // 议题的存活时间,TTL = Time To Live
    TERMINATING_CRON: "* 30 * * * *"        // 议题自动关闭的任务执行时间间隔
};
//IM 客户端医院参数配置
let imClientType = {
    id : "hz_yyyzh_wx",
    url : "htm"
}
let thirdApiMessageConfig = {
    host: '10.18.43.41',
    port: 10301,
    model:"/wxpush",
    enpoint :"/sendWXTemplate"
};
exports.environment = 'hzprod';
exports.pubChannel = 'phone_to_pc';
exports.subChannel = 'pc_to_phone';
exports.pubSubSwitch = false;
exports.app = 'im.server';
exports.version = '2.0.0';
exports.debug = true;
exports.serverPort = 3000;
exports.sessionExpire = 1800;
exports.httpsOpen = false;
exports.showSQL = false;
exports.imDbConfig = imDbConfig;
exports.redisConfig = redisConfig;
exports.innerRedisConfig = innerRedisConfig;
exports.getTuiConfig = getTuiConfig;
exports.wlyyServerConfig = wlyyServerConfig;
exports.wlyyDAServerConfig = wlyyDAServerConfig;
exports.wechatConfig = wechatConfig;
exports.sessionConfig = sessionConfig;
exports.topicConfig = topicConfig;
exports.imClientType = imClientType;
exports.thirdApiMessageConfig = thirdApiMessageConfig;

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

@ -83,6 +83,7 @@ exports.version = '2.0.0';
exports.debug = true;
exports.serverPort = 3000;
exports.sessionExpire = 1800;
exports.httpsOpen = false;
exports.showSQL = false;
exports.imDbConfig = imDbConfig;

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

@ -112,6 +112,11 @@ let imClientType = {
    url : "https://hlwyy.xmzsh.com"
}
let httpsConfig = {
    key : "./https/zsyy/server.key",
    pem: "./https/zsyy/xmzsh.pem"
}
exports.environment = 'prod';
exports.pubChannel = 'phone_to_pc';
exports.subChannel = 'pc_to_phone';
@ -124,6 +129,7 @@ exports.serverPort = 3000;
exports.sessionExpire = 1800;
exports.showSQL = false;
exports.httpsOpen = true;
exports.imDbConfig = imDbConfig;
exports.redisConfig = redisConfig;
exports.innerRedisConfig = innerRedisConfig;
@ -137,4 +143,5 @@ exports.thirdApiMessageConfig = thirdApiMessageConfig;
exports.sessionConfig = sessionConfig;
exports.topicConfig = topicConfig;
exports.imClientType = imClientType;
exports.xmIjkTemplateConfig = xmIjkTemplateConfig
exports.xmIjkTemplateConfig = xmIjkTemplateConfig
exports.httpsConfig = httpsConfig

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

@ -122,6 +122,7 @@ exports.version = '2.0.0';
exports.debug = true;
exports.serverPort = 3000;
exports.sessionExpire = 1800;
exports.httpsOpen = false;
exports.showSQL = false;
exports.imDbConfig = imDbConfig;

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

@ -113,6 +113,7 @@ exports.version = '2.0.0';
exports.debug = true;
exports.serverPort = 16000;
exports.sessionExpire = 1800;
exports.httpsOpen = false;
exports.showSQL = false;
exports.imDbConfig = imDbConfig;

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

@ -113,6 +113,7 @@ exports.version = '2.0.0';
exports.debug = true;
exports.serverPort = 3000;
exports.sessionExpire = 1800;
exports.httpsOpen = false;
exports.showSQL = false;
exports.imDbConfig = imDbConfig;

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

@ -80,6 +80,13 @@ let imClientType = {
    url : "https://hlwyy.xmzsh.com"
}
let thirdApiMessageConfig = {
    host: '172.26.0.107',
    port: 10301,
    model:"/wxpush",
    enpoint :"/sendWXTemplate"
};
exports.environment = 'test';
exports.pubChannel = 'test';
exports.subChannel = 'dev';
@ -90,6 +97,7 @@ exports.version = '2.0.0';
exports.debug = true;
exports.serverPort = 3000;
exports.sessionExpire = 1800;
exports.httpsOpen = false;
exports.showSQL = false;
exports.imDbConfig = imDbConfig;
@ -102,3 +110,5 @@ exports.wlyyDAServerConfig = wlyyDAServerConfig;
exports.wechatConfig = wechatConfig;
exports.sessionConfig = sessionConfig;
exports.topicConfig = topicConfig;
exports.imClientType = imClientType;
exports.thirdApiMessageConfig = thirdApiMessageConfig;

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

@ -111,6 +111,7 @@ exports.version = '2.0.0';
exports.debug = true;
exports.serverPort = 3000;
exports.sessionExpire = 1800;
exports.httpsOpen = false;
exports.showSQL = false;
exports.imDbConfig = imDbConfig;