123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320 |
- /**
- * 搜索功能。
- */
- "use strict";
- let ImDb = require('../oracle/db/im.db');
- let DbUtil = require('../../util/db.util');
- let log = require('../../util/log.js');
- const DB_TABLES = require('../../include/commons').DB_TABLES;
- const SESSION_USER_STATUS = require('../../include/commons').SESSION_USER_STATUS;
- const SESSION_TYPES = require('../../include/commons').SESSION_TYPES;
- const SESSION_BUSINESS_TYPE = require('../../include/commons').SESSION_BUSINESS_TYPE;
- class ParticipantRepo {
- constructor() {
- }
- /**
- * 获取会话的成员列表
- *
- * @param sessionId
- * @param handler
- */
- static findAll(sessionId, handler) {
- let sql = "SELECT U.ID, U.NAME, U.SEX, U.BIRTHDATE, U.AVATAR,U.HOSPITAL_NAME, P.PARTICIPANT_ROLE ROLE, FALSE IS_PATIENT,P.LAST_FETCH_TIME,U.LEVEL,U.MOBILE FROM SESSIONS S, PARTICIPANTS P, DOCTORS U " +
- "WHERE S.ID = ? AND S.ID = P.SESSION_ID AND P.PARTICIPANT_ID = U.ID UNION " +
- "SELECT U.ID, U.NAME, U.SEX, U.BIRTHDATE, U.AVATAR,U.HOSPITAL_NAME, P.PARTICIPANT_ROLE ROLE, TRUE IS_PATIENT,P.LAST_FETCH_TIME,0 AS LEVEL,U.MOBILE FROM SESSIONS S, PARTICIPANTS P, PATIENTS U " +
- "WHERE S.ID = ? AND S.ID = P.SESSION_ID AND P.PARTICIPANT_ID = U.ID";
- ImDb.execQuery({
- "sql": sql,
- "args": [sessionId, sessionId],
- "handler": function(err,res){
- if(res&&res.length>0){
- for(var j in res){
- if(res[j].last_fetch_time){
- res[j].last_fetch_time = res[j].last_fetch_time.getTime();
- }
- }
- }
- handler(err,res);
- }
- });
- }
- /**
- * 获取会话的成员ID列表
- *
- * @param sessionId
- * @param handler
- */
- static findIds(sessionId, handler) {
- let sql =
- "SELECT U.ID, U.NAME, FALSE IS_PATIENT, P.PARTICIPANT_ROLE,U.AVATAR FROM SESSIONS S, PARTICIPANTS P, DOCTORS U " +
- "WHERE S.ID = ? AND S.ID = P.SESSION_ID AND P.PARTICIPANT_ID = U.ID " +
- "UNION " +
- "SELECT U.ID, U.NAME, TRUE IS_PATIENT, P.PARTICIPANT_ROLE,U.AVATAR FROM SESSIONS S, PARTICIPANTS P, PATIENTS U " +
- "WHERE S.ID = ? AND S.ID = P.SESSION_ID AND P.PARTICIPANT_ID = U.ID ";
- ImDb.execQuery({
- "sql": sql,
- "args": [sessionId, sessionId],
- "handler": handler
- });
- }
- /**
- * 根据会话id查找会话成员
- * @param sessionId
- * @param handler
- */
- static findParricipantBySessionId(sessionId,handler){
- let sql = "SELECT PARTICIPANT_ID,PARTICIPANT_ROLE FROM PARTICIPANTS P WHERE P.SESSION_ID = ?";
- ImDb.execQuery({
- "sql": sql,
- "args": [sessionId],
- "handler": handler
- });
- }
- /**
- * 获取会话医生的id
- * @param sessionId
- * @param handler
- */
- static findDoctorIds(sessionId,handler){
- let sql =
- "SELECT U.ID, U.NAME, FALSE IS_PATIENT, P.PARTICIPANT_ROLE,U.AVATAR FROM SESSIONS S, PARTICIPANTS P, DOCTORS U " +
- "WHERE S.ID = ? AND S.ID = P.SESSION_ID AND P.PARTICIPANT_ID = U.ID ";
- ImDb.execQuery({
- "sql": sql,
- "args": [sessionId],
- "handler": handler
- });
- }
- /**
- * 获取会话的居民的家庭成员
- * @param sessionId
- * @param handler
- */
- static findFamilyIds(sessionId, handler){
- let sql =
- "SELECT U.ID, U.NAME, TRUE IS_PATIENT, P.PARTICIPANT_ROLE,U.AVATAR,PS.NAME PNAME,PS.ID PID " +
- "FROM SESSIONS S, PARTICIPANTS P, PATIENTS U ,WLYY.WLYY_PATIENT_FAMILY_MEMBER M,PATIENTS PS " +
- "WHERE S.ID = ? AND S.ID = P.SESSION_ID AND P.PARTICIPANT_ID = M.PATIENT AND M.FAMILY_MEMBER = U.ID AND M.IS_AUTHORIZE = 1 AND P.PARTICIPANT_ID = PS.ID ";
- //新增发送代理人
- ImDb.execQuery({
- "sql": sql,
- "args": [sessionId],
- "handler": handler
- });
- }
- /**
- * 获取会话的成员头像列表
- *
- * @param sessionId
- * @param handler
- */
- static findAllAvatars(sessionId, handler) {
- let sql = "SELECT U.ID, U.AVATAR,'0' AS ISPATIENT,U.NAME AS NAME FROM SESSIONS S, PARTICIPANTS P, DOCTORS U " +
- "WHERE S.ID = ? AND S.ID = P.SESSION_ID AND P.PARTICIPANT_ID = U.ID UNION " +
- "SELECT U.ID, U.AVATAR,'1' AS ISPATIENT,U.NAME AS NAME FROM SESSIONS S, PARTICIPANTS P, PATIENTS U " +
- "WHERE S.ID = ? AND S.ID = P.SESSION_ID AND P.PARTICIPANT_ID = U.ID";
- ImDb.execQuery({
- "sql": sql,
- "args": [sessionId, sessionId],
- "handler": handler
- });
- }
- /**
- * 获取会话的成员列表
- *
- * @param sessionId
- * @param participantId
- * @param role
- * @param handler
- */
- static updateParticipant(sessionId, participantId, role, handler) {
- let sql = "UPDATE PARTICIPANTS SET PARTICIPANT_ROLE = ? WHERE SESSION_ID = ? AND PARTICIPANT_ID = ?";
- ImDb.execQuery({
- "sql": sql,
- "args": [role, sessionId, participantId],
- "handler": handler
- });
- }
- /**
- * 获取P2P成员所在会话。将成员的ID排序后取哈希值即可。
- *
- * @param userId
- * @param anotherUserId
- * @param handler
- */
- static findSessionIdByParticipantIds(userId, anotherUserId, handler) {
- let sessionId = DbUtil.stringArrayHash([userId, anotherUserId]);
- handler(null, sessionId);
- }
- static getBusinessType(users, handler) {
- let sql = "SELECT COUNT(1) AS COUNT FROM PATIENTS P WHERE P.ID IN (?)";
- ImDb.execQuery({
- "sql": sql,
- "args": [users],
- "handler": function (err, res) {
- if (err) {
- console.log("err businessType : " + err);
- } else {
- if (res[0].count > 0) {
- handler(err, SESSION_BUSINESS_TYPE.PATIENT);
- } else {
- handler(err, SESSION_BUSINESS_TYPE.DOCTOR);
- }
- }
- }
- });
- }
- static findNameById(userId, handler) {
- let sql = "SELECT P.NAME,P.SEX,P.BIRTHDATE FROM PATIENTS P WHERE P.ID =? UNION SELECT D.NAME,D.SEX,D.BIRTHDATE FROM DOCTORS D WHERE D.ID =?";
- ImDb.execQuery({
- "sql": sql,
- "args": [userId, userId],
- "handler": function (err, res) {
- if (err) {
- console.log("err businessType : " + err);
- } else {
- handler(null, res);
- }
- }
- });
- }
- static findMucSessionIdByUser(users, handler) {
- //先匹配出在线用户
- let userTemp = [];
- users.forEach(function (user) {
- if (user == SESSION_USER_STATUS.ONLINE) {
- userTemp.push(user);
- }
- });
- let sql = "SELECT DISTINCT S.* FROM " + DB_TABLES.Participants + " P1," + DB_TABLES.Participants + " P2," +
- DB_TABLES.Sessions + " S WHERE P1.SESSION_ID = S.ID AND P2.SESSION_ID = S.ID AND S.TYPE =? " +
- "AND ((P1.PARTICIPANT_ID =? AND P2.PARTICIPANT_ID = ?) OR (P1.PARTICIPANT_ID =? AND P2.PARTICIPANT_ID = ?))";
- ImDb.execQuery({
- "sql": sql,
- "args": [SESSION_TYPES.MUC, userTemp[0], userTemp[1], userTemp[1], userTemp[0]],
- "handler": handler
- });
- }
- /**
- * 更新最后消息获取时间。
- *
- * @param lastMessageTime
- * @param sessionId
- * @param participantId
- * @param handler
- */
- static updateLastFetchTime(lastMessageTime, sessionId, participantId, handler) {
- let sql = "UPDATE " + DB_TABLES.Participants + " SET LAST_FETCH_TIME=? WHERE SESSION_ID = ? AND PARTICIPANT_ID =?";
- ImDb.execQuery({
- "sql": sql,
- "args": [lastMessageTime, sessionId, participantId],
- "handler": handler
- });
- }
- /**
- * 用户是否在指定Session中
- *
- * @param sessionId
- * @param userId
- * @param handler
- */
- static existsParticipant(sessionId, userId, handler) {
- let sql = "SELECT CASE WHEN COUNT(*) > 0 THEN TRUE ELSE FALSE END EXIST FROM PARTICIPANTS W WHERE W.SESSION_ID =? AND W.PARTICIPANT_ID = ? ";
- log.info("用户是否在指定Session中:sql:" + sql);
- log.info("用户是否在指定Session中:args:" + [sessionId, userId]);
- ImDb.execQuery({
- "sql": sql,
- "args": [sessionId, userId],
- "handler": handler
- });
- }
- /**
- * mysql成员创建
- *
- * @param sessionId
- * @param users JSON
- * @param handler
- */
- static saveParticipantsToMysql(sessionId, users, handler) {
- let sql = "INSERT INTO " + DB_TABLES.Participants + " (SESSION_ID,PARTICIPANT_ID,PARTICIPANT_ROLE,LAST_FETCH_TIME) VALUES ";
- let args = [];
- let nowDate = new Date();
- log.info("saveParticipantsToMysql:[sql] = " + sql);
- log.info("saveParticipantsToMysql:[users.length] = " + users.length);
- for (let j in users) {
- let tokens = users[j].split(":");
- sql += "(?,?,?,?)";
- args.push(sessionId);
- args.push(tokens[0]);
- args.push(tokens.length > 1 ? tokens[1] : '0');
- args.push(nowDate);
- if (j != users.length - 1) sql += ", ";
- log.info("saveParticipantsToMysql:[args] = " + args);
- }
- sql += " ON DUPLICATE KEY UPDATE PARTICIPANT_ROLE = VALUES(PARTICIPANT_ROLE)";
- ImDb.execQuery({
- "sql": sql,
- "args": args,
- "handler": handler
- });
- }
- static deleteUserFromMysql(sessionId, userId, handler) {
- let sql = "DELETE FROM " + DB_TABLES.Participants + " WHERE PARTICIPANT_ID=? AND SESSION_ID=? ";
- ImDb.execQuery({
- "sql": sql,
- "args": [userId, sessionId],
- "handler": handler || function (err, res) {
- log.info("deleteUserFromMysql");
- }
- });
- }
- static deleteAllUser(sessionId, handler) {
- let sql = "DELETE FROM " + DB_TABLES.Participants + " WHERE SESSION_ID=? ";
- ImDb.execQuery({
- "sql": sql,
- "args": [sessionId],
- "handler": handler || function (err, res) {
- log.info("deleteUserFromMysql");
- }
- });
- }
- static findLastFetchTime(sessionId,userId,handler){
- let sql = "SELECT LAST_FETCH_TIME FROM PARTICIPANTS P WHERE P.SESSION_ID = ? AND P.PARTICIPANT_ID=?";
- ImDb.execQuery({
- "sql": sql,
- "args": [sessionId,userId],
- "handler": handler
- });
- }
- }
- module.exports = ParticipantRepo;
|