123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387 |
- /**
- * 患者、讨论组搜索。
- *
- * 注意:此模型效率堪忧,但为了实现先这样做。更稳妥的方案是使用Solr或Elastic Search
- * 为数据提供索引功能,JS使用搜索接口搜索之后再取得对象的ID进行获取,提高效率。
- * 后续开发都希望看到这段注释,实现此方案。
- *
- * author: Sand
- * since: 2016.11.20
- */
- "use strict";
- let BaseModel = require('./base.model');
- let searchRepo = require('../repository/search.repo');
- let modelUtil = require("../util/modelUtil");
- let objectUtil = require('../util/objectUtil');
- class Search extends BaseModel {
- constructor() {
- super();
- }
- /**
- * 搜索患者相关的数据,包括患者信息与相关的私信记录。关键词不支持空格拆分。
- */
- searchAboutPatient(userId, userRole, keyword) {
- let self = this;
- searchRepo.searchPatients(userId, userRole, keyword, function (err, patients) {
- if (err) {
- modelUtil.emitDbError(self.eventEmitter, "Search patient on basic information failed", err);
- return;
- }
- var data = {patients: [], group: [], chats: []};
- for (var i = 0; i < patients.length; ++i) {
- var patient = patients[i];
- 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) {
- modelUtil.emitDbError(self.eventEmitter, "Search patient on private messages failed", err);
- 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) {
- modelUtil.emitDbError(self.eventEmitter, "Search patient on basic information failed", err);
- 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 == 3) {
- searchRepo.searchPatientPM(userId, keyword, function (err, chats) {
- if (err) {
- modelUtil.emitDbError(self.eventEmitter, "Search patient on private messages failed", err);
- return;
- }
- for (var i = 0; i < chats.length; ++i) {
- var lastPatient = {
- code: '',
- name: '',
- sex: '',
- avatar: '',
- amount: '',
- content: '',
- chat: '',
- type: ''
- };
- var chat = chats[i];
- 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;
- data.push(lastPatient);
- }
- modelUtil.emitData(self.eventEmitter, data);
- });
- }
- if (type == 2) {
- 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);
- });
- }
- }
- /**
- * 过滤某个聊天组的详细信息
- * @param userId
- * @param keyword
- * @param groupId
- * @param type
- */
- searchAboutPatientList(userId, keyword, groupId, type) {
- let self = this;
- searchRepo.searchPatientPMList(userId, keyword, groupId, type, function (err, chats) {
- var data = [];
- if (err) {
- modelUtil.emitDbError(self.eventEmitter, "Search searchPatientPMList on private messages failed", err);
- return;
- }
- for (var i = 0; i < chats.length; ++i) {
- var lastPatient = {code: '', name: '', sex: '', avatar: '', chat: '', content: ''};
- var chat = chats[i];
- 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.chat = chat.chat;
- lastPatient.content = chat.content;
- lastPatient.msg_id = chat.msg_id;
- data.push(lastPatient);
- }
- modelUtil.emitData(self.eventEmitter, data);
- })
- }
- /**
- * 搜索医生相关的数据,包括医生信息与相关的聊天记录,包括私信与群信。
- */
- searchAboutDoctor(userId, keyword) {
- let self = this;
- //搜索单对单医生聊天
- searchRepo.searchP2Pdoctors(userId, keyword, function (err, doctors) {
- if (err) {
- modelUtil.emitDbError(self.eventEmitter, "Search doctor on basic information failed", err);
- return;
- }
- 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.hospital_name,
- sex: doctor.sex,
- avatar: doctor.photo === null ? "" : doctor.photo
- });
- }
- // 搜索讨论组名称及成员名称(讨论组)
- 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,
- groupType: t.group_type
- };
- data.groups.push(group);
- }
- // 搜索医生间的私信
- 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,
- groupType: t.group_type,
- avatar: t.photo
- };
- data.content.push(message);
- }
- 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,
- groupType: t.group_type
- };
- 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,
- groupType: t.group_type,
- avatar:t.photo
- };
- 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: doctor.msg_id,
- avatar: doctor.photo,
- groupType: doctor.group_type
- });
- }
- modelUtil.emitData(self.eventEmitter, data);
- });
- }
- }
- module.exports = Search;
|