소스 검색

患者查询接口开发

8 년 전
부모
커밋
d4aa0e20a7
5개의 변경된 파일411개의 추가작업 그리고 98개의 파일을 삭제
  1. 59 1
      src/doctor/endpoints/chats.endpoint.js
  2. 3 1
      src/doctor/include/endpoints.js
  3. 1 1
      src/doctor/models/doctor.js
  4. 230 87
      src/doctor/models/search.js
  5. 118 8
      src/doctor/repository/search.repo.js

+ 59 - 1
src/doctor/endpoints/chats.endpoint.js

@ -504,11 +504,30 @@ router.get(APIv1.Chats.SearchAboutPatientList, function (req, res) {
    search.searchAboutPatientList(userId, keyword,groupId,type);
});
/**
 * http://192.168.131.107:3000/api/v1/chats/search/patient/all?user_id=D2016008240003&keyword=f&type=2&user_role=3
 * 患者消息查询查看更多
 */
router.get(APIv1.Chats.SearchAbountPatientMore, function (req, res) {
    var userId = req.query.user_id;
    var keyword = req.query.keyword;
    var type = req.query.type;
    var userRole= req.query.user_role;
    if (!userId) throw {httpStatus: 406, message: "Missing fields: user_id."};
    if (!keyword) throw {httpStatus: 406, message: "Missing fields: keyword."};
    if (!type) throw {httpStatus: 406, message: "Missing fields: type."};
    if (!userRole) throw {httpStatus: 406, message: "Missing fields: userRole."};
    let search = new Search();
    controllerUtil.regModelEventHandler(search, res);
    search.searchAboutPatientAll(userId,userRole, keyword,type);
});
/**
 * 搜索医生相关的数据,包括医生信息与相关的聊天记录,包括私信与群信。
 *
 * 请求URL:
 *  /search/doctor?user_id=5fa5e88f7a4111e69f7c005056850d66&keyword=丘
 *  /search/doctor?user_id=D2016008240003&keyword=黄
 *
 * 参数:
 *  keywords: 关键词
@ -525,6 +544,45 @@ router.get(APIv1.Chats.SearchAboutDoctor, function (req, res) {
    search.searchAboutDoctor(userId, keyword);
});
/**
 * http://192.168.131.107:3000/api/v1/chats/search/doctor/list?user_id=D2016008240003&keyword=%E9%BB%84&type=2
 * 医生搜索查看更多
 * type = 1 查询聊过的医生
 * type = 2 查询群组标题和人员包含的群聊
 * type = 3 查询聊天关键字
 */
router.get(APIv1.Chats.SearchAboutDoctorList, function (req, res) {
    let userId = req.query.user_id;
    let keyword = req.query.keyword;
    let type = req.query.type;
    if (!userId) throw {httpStatus: 406, message: "Missing fields: user_id."};
    if (!keyword) throw {httpStatus: 406, message: "Missing fields: keyword."};
    if (!type) throw {httpStatus: 406, message: "Missing fields: type."};
    let search = new Search();
    controllerUtil.regModelEventHandler(search, res);
    search.searchDoctorMore(userId, keyword,type);
});
/**
 * 查询医生聊天记录详情(单个聊天记录包含关键字的)
 *http://192.168.131.107:3000/api/v1/chats/search/doctor/content/list?user_id=D2016008240003&keyword=f&type=2&groupcode=0381288df51b434795b6946bb63d90b8
 */
router.get(APIv1.Chats.SearchAbountDoctorContentDetail, function (req, res) {
    let userId = req.query.user_id;
    let keyword = req.query.keyword;
    let type = req.query.type;
    let groupcode = req.query.groupcode;
    if (!userId) throw {httpStatus: 406, message: "Missing fields: user_id."};
    if (!keyword) throw {httpStatus: 406, message: "Missing fields: keyword."};
    if (!type) throw {httpStatus: 406, message: "Missing fields: type."};
    if (!groupcode) throw {httpStatus: 406, message: "Missing fields: groupcode."};
    let search = new Search();
    controllerUtil.regModelEventHandler(search, res);
    search.searchDoctorContentDetail(userId, keyword,groupcode,type);
});
/**
 * 获取单条消息。

+ 3 - 1
src/doctor/include/endpoints.js

@ -20,8 +20,10 @@ const APIv1 = {
        Recent: '/recent',
        SearchAboutPatient: '/search/patient',
        SearchAboutPatientList:'/search/patient/list',
        SearchAbountPatientMore:'/search/patient/all',
        SearchAboutDoctor: '/search/doctor',
        SearchAboutDoctorList: '/search/doctor/list',
        SearchAbountDoctorContentDetail:'/search/doctor/content/list',
        // 所有未读消息数
        UnreadMsgCount: '/unread_count',

+ 1 - 1
src/doctor/models/doctor.js

@ -441,7 +441,7 @@ class Doctor extends BaseModel {
    getPrivateMessages(userId, peerId, contentType, msgStartId, msgEndId, count, closedInterval) {
        let self = this;
        pmRepo.findAllMessages(userId, peerId, contentType === undefined ? "1,2,3,5,6" : contentType, msgStartId, msgEndId, count, closedInterval, function (err, rows) {
        pmRepo.findAllMessages(userId, peerId, contentType === undefined ? "1,2,3,4,5,6" : contentType, msgStartId, msgEndId, count, closedInterval, function (err, rows) {
            if (err) {
                modelUtil.emitDbError(self.eventEmitter, 'Get private message failed', err);
                return;

+ 230 - 87
src/doctor/models/search.js

@ -36,18 +36,98 @@ class Search extends BaseModel{
                return;
            }
            var data = {patients: [], chats: []};
            var data = {patients: [],group:[], chats: []};
            for (var i = 0; i < patients.length; ++i) {
                var patient = patients[i];
                data.patients.push({
                var p ={};
                console.log(patient.code);
                p= {
                    code: patient.code,
                    name: patient.name,
                    sex: patient.sex,
                    birthday: objectUtil.timestampToLong(patient.birthday),
                    avatar: patient.photo === null ? "" : patient.photo
                });
                }
                data.patients.push(p);
            }
            searchRepo.searchGroupPatients(userId, keyword, function (err, groups) {
                if (err) {
                    modelUtil.emitDbError(self.eventEmitter, "Search talk group failed", err);
                    return;
                }
                var group = null;
                for (var i = 0; i < groups.length; ++i) {
                    var t = groups[i];
                    group = {
                        code: t.code,
                        name: t.name,
                        members: t.con,
                    };
                    data.group.push(group);
                }
                searchRepo.searchPatientPM(userId, keyword, function (err, chats) {
                    if (err) {
                        log.error("Search patient on private messages failed: ", err);
                        res.status(500).send({message: "Search patient on private messages failed."});
                        return;
                    }
                    for (var i = 0; i < chats.length; ++i) {
                        var lastPatient = {code: '', name: '', sex: '', avatar: '',amount:'',content:'',chat:'',type:''};
                        var chat = chats[i];
                        console.log(JSON.stringify(chat));
                        lastPatient.code = chat.code;
                        lastPatient.name = chat.name;
                        lastPatient.sex = chat.sex;
                        lastPatient.birthday = objectUtil.timestampToLong(chat.birthday);
                        lastPatient.avatar = chat.photo === null ? "" : chat.photo;
                        lastPatient.amount = chat.amount;
                        lastPatient.chat = chat.chat;
                        lastPatient.content = chat.content;
                        lastPatient.type = chat.type;
                        lastPatient.msg_id =chat.msg_id;
                        data.chats.push(lastPatient);
                    }
                    modelUtil.emitData(self.eventEmitter, data);
                });
            });
        });
    }
    /**
     * 患者查询查看更多1.患者 2.内容 3.群组
     * @param userId
     * @param userRole
     * @param keyword
     * @param type
     */
    searchAboutPatientAll(userId, userRole, keyword,type) {
        let self = this;
        var data = [];
        if(type==1){
            searchRepo.searchPatients(userId, userRole, keyword, function (err, patients) {
                if (err) {
                    log.error("Search patient on basic information failed: ", err);
                    res.status(500).send({message: "Search patient on basic information failed."});
                    return;
                }
                for (var i = 0; i < patients.length; ++i) {
                    var patient = patients[i];
                    data.push({
                        code: patient.code,
                        name: patient.name,
                        sex: patient.sex,
                        birthday: objectUtil.timestampToLong(patient.birthday),
                        avatar: patient.photo === null ? "" : patient.photo
                    });
                }
                modelUtil.emitData(self.eventEmitter, data);
            });
        }
        if(type==2){
            searchRepo.searchPatientPM(userId, keyword, function (err, chats) {
                if (err) {
                    log.error("Search patient on private messages failed: ", err);
@ -55,11 +135,9 @@ class Search extends BaseModel{
                    res.status(500).send({message: "Search patient on private messages failed."});
                    return;
                }
                for (var i = 0; i < chats.length; ++i) {
                    var lastPatient = {code: '', name: '', sex: '', avatar: '',amount:'',content:'',chat:'',type:''};
                    var chat = chats[i];
                    console.log(JSON.stringify(chat));
                    lastPatient.code = chat.code;
                    lastPatient.name = chat.name;
                    lastPatient.sex = chat.sex;
@ -69,11 +147,30 @@ class Search extends BaseModel{
                    lastPatient.chat = chat.chat;
                    lastPatient.content = chat.content;
                    lastPatient.type = chat.type;
                    data.chats.push(lastPatient);
                    data.push(lastPatient);
                }
                modelUtil.emitData(self.eventEmitter, data);
            });
        });
        }
        if(type==3){
            searchRepo.searchGroupPatients(userId, keyword, function (err, groups) {
                if (err) {
                    modelUtil.emitDbError(self.eventEmitter, "Search talk group failed", err);
                    return;
                }
                var group = null;
                for (var i = 0; i < groups.length; ++i) {
                    var t = groups[i];
                    group = {
                        code: t.code,
                        name: t.name,
                        members: t.con,
                    };
                    data.push(group);
                }
                modelUtil.emitData(self.eventEmitter, data);
            });
        }
    }
    /**
@ -103,6 +200,7 @@ class Search extends BaseModel{
                lastPatient.avatar = chat.photo === null ? "" : chat.photo;
                lastPatient.chat = chat.chat;
                lastPatient.content=chat.content;
                lastPatient.msg_id=chat.msg_id;
                data.push(lastPatient);
            }
            modelUtil.emitData(self.eventEmitter, data);
@ -115,117 +213,162 @@ class Search extends BaseModel{
     */
    searchAboutDoctor(userId, keyword) {
        let self = this;
        searchRepo.searchDoctors(userId, keyword, function (err, doctors) {
        //搜索单对单医生聊天
        searchRepo.searchP2Pdoctors(userId, keyword, function (err, doctors) {
            if (err) {
                modelUtil.emitDbError(self.eventEmitter, "Search doctor on basic information failed", err);
                return;
            }
            let data = {doctors: [], groups: [], chats: {doctors: [], groups: []}};
            for (let i = 0; i < doctors.length; ++i) {
                let doctor = doctors[i];
            var data = {doctors: [], groups: [],content:[]};
            for (var i = 0; i < doctors.length; ++i) {
                var doctor = doctors[i];
                data.doctors.push({
                    code: doctor.code,
                    name: doctor.name,
                    hospitalName:doctor.name,
                    sex: doctor.sex,
                    avatar: doctor.photo === null ? "" : doctor.photo
                });
            }
            // 搜索讨论组名称及成员名称
            searchRepo.searchGroups(userId, keyword, function (err, groups) {
            // 搜索讨论组名称及成员名称(讨论组)
            searchRepo.searchGroupDoctors(userId, keyword, function (err, groups) {
                if (err) {
                    modelUtil.emitDbError(self.eventEmitter, "Search talk group failed", err);
                    return;
                }
                let lastGroupCode = '';
                let lastGroup = null;
                for (let i = 0; i < groups.length; ++i) {
                    let group = groups[i];
                    if (lastGroupCode !== group.code) {
                        lastGroupCode = group.code;
                        lastGroup = {
                            code: group.code,
                            name: group.name,
                            type: GROUP_TYPE.DiscussionGroup,
                            members: []
                var group = null;
                for (var i = 0; i < groups.length; ++i) {
                        var t = groups[i];
                        group = {
                            code: t.code,
                            name: t.name,
                            members: t.con,
                        };
                        data.groups.push(lastGroup);
                    }
                    lastGroup.members.push({
                        code: group.member_code,
                        name: group.member_name
                    });
                        data.groups.push(group);
                }
                // 搜索医生间的私信
                searchRepo.searchDoctorMessages(userId, keyword, function (err, messages) {
                searchRepo.searchDoctorsContent(userId, keyword, function (err, messages) {
                    if (err) {
                        modelUtil.emitDbError(self.eventEmitter, "Search doctor private messages failed", err);
                        return;
                    }
                    var message = null;
                    for (var i = 0; i < messages.length; ++i) {
                        var t = messages[i];
                        message = {
                            code: t.code,
                            name: t.name,
                            amount: t.amount,
                            content:t.content,
                            type:t.type,
                            msg_id:t.msg_id
                    let lastDoctor;
                    let lastDoctorCode = '';
                    for (let i = 0; i < messages.length; ++i) {
                        let message = messages[i];
                        if (lastDoctorCode !== message.code) {
                            lastDoctorCode = message.code;
                            lastDoctor = {
                                code: message.code,
                                name: message.name,
                                photo: message.photo === null ? "" : message.photo,
                                messages: []
                            };
                            data.chats.doctors.push(lastDoctor);
                        }
                        lastDoctor.messages.push({
                            id: message.msg_id,
                            content: message.content
                        });
                        };
                        data.content.push(message);
                    }
                    // 搜索医生间的讨论组消息
                    searchRepo.searchGroupMessages(userId, keyword, function (err, messages) {
                        if (err) {
                            modelUtil.emitDbError(self.eventEmitter, "Search doctor group messages failed", err);
                            return;
                        }
                        // g.code, g.name, gm.msg_id, gm.content
                        let lastGroup;
                        let lastGroupCode = '';
                        for (let i = 0; i < messages.length; ++i) {
                            let message = messages[i];
                            if (lastGroupCode !== message.code) {
                                lastGroupCode = message.code;
                                lastGroup = {
                                    code: message.code,
                                    name: message.name,
                                    messages: []
                                };
                                data.chats.groups.push(lastGroup);
                            }
                            lastGroup.messages.push({
                                id: message.msg_id,
                                content: message.content
                            });
                        }
                        modelUtil.emitData(self.eventEmitter, data);
                    modelUtil.emitData(self.eventEmitter, data);
                    });
                });
            });
        });
    }
    searchDoctorMore(userId,keyword,type){
        let self = this;
        var data = [];
        if(type==1){
            searchRepo.searchP2Pdoctors(userId, keyword, function (err, doctors) {
                if (err) {
                    modelUtil.emitDbError(self.eventEmitter, "Search doctor on basic information failed", err);
                    return;
                }
                for (var i = 0; i < doctors.length; ++i) {
                    var doctor = doctors[i];
                    data.push({
                        code: doctor.code,
                        name: doctor.name,
                        hospitalName:doctor.name,
                        sex: doctor.sex,
                        avatar: doctor.photo === null ? "" : doctor.photo
                    });
                }
                modelUtil.emitData(self.eventEmitter, data);
            });
        }else if(type==2){
            searchRepo.searchGroupDoctors(userId, keyword, function (err, groups) {
                if (err) {
                    modelUtil.emitDbError(self.eventEmitter, "Search talk group failed", err);
                    return;
                }
                var group = null;
                for (var i = 0; i < groups.length; ++i) {
                    var t = groups[i];
                    group = {
                        code: t.code,
                        name: t.name,
                        members: t.con,
                    };
                    data.push(group);
                }
                modelUtil.emitData(self.eventEmitter, data);
            });
        }else if(type==3){
            searchRepo.searchDoctorsContent(userId, keyword, function (err, messages) {
                if (err) {
                    modelUtil.emitDbError(self.eventEmitter, "Search doctor private messages failed", err);
                    return;
                }
                var message = null;
                for (var i = 0; i < messages.length; ++i) {
                    var t = messages[i];
                    message = {
                        code: t.code,
                        name: t.name,
                        amount: t.amount,
                        content:t.content,
                        type:t.type,
                        msg_id:t.msg_id
                    };
                    data.push(message);
                }
                modelUtil.emitData(self.eventEmitter, data);
            });
        }
    }
    /**
     * 搜索医生聊天详情
     * @param userId 当前医生ID
     * @param keyword 关键字
     * @param groupcode 群组code
     * @param type type =1 p2p type = 2群组
     */
    searchDoctorContentDetail(userId,keyword,groupcode,type){
            let self = this;
            var data = [];
            searchRepo.searchDoctorsContentDetail(userId, keyword,groupcode,type, function (err, doctors) {
                if (err) {
                    modelUtil.emitDbError(self.eventEmitter, "Search doctor on basic information failed", err);
                    return;
                }
                for (var i = 0; i < doctors.length; ++i) {
                    var doctor = doctors[i];
                    data.push({
                        code: doctor.code,
                        name: doctor.name,
                        content:doctor.content,
                        msg_id:t.msg_id
                    });
                }
                modelUtil.emitData(self.eventEmitter, data);
            });
    }
}
module.exports = Search;

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 118 - 8
src/doctor/repository/search.repo.js