private.msg.repo.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. /**
  2. * P2P消息库。
  3. */
  4. "use strict";
  5. var ImDb = require("../oracle/db/im.db.js");
  6. let oracledbUtil = require('../../util/oracledb.util');
  7. class PrivateMsgRepo {
  8. constructor() {
  9. }
  10. /**
  11. * 保存消息。
  12. *
  13. * @param to
  14. * @param from
  15. * @param type
  16. * @param content
  17. * @param handler
  18. */
  19. static save(to, from, type, content, handler) {
  20. oracledbUtil.query({
  21. "sql": "INSERT INTO MSG_P2P (TO_UID,FROM_UID,TYPE,CONTENT) VALUES (:TO_UID,:FROM_UID,:TYPE,:CONTENT)",
  22. "args": [to, from, type, content],
  23. "handler": handler
  24. });
  25. };
  26. static findOneMessage(messageId, handler) {
  27. oracledbUtil.query({
  28. "sql": "SELECT MSG_ID, TO_UID, FROM_UID, TYPE, CONTENT, TIMESTAMP FROM MSG_P2P WHERE MSG_ID = :MSG_ID",
  29. "args": [messageId],
  30. "handler": handler
  31. });
  32. };
  33. static findOnePatientMessage(messageId, handler) {
  34. oracledbUtil.query({
  35. "sql": "SELECT M.*,D.NAME,D.PHOTO FROM MSG_P2P M, WLYY.WLYY_DOCTOR D, WLYY.WLYY_PATIENT P WHERE M.FROM_UID = D. CODE AND M.TO_UID = P. CODE AND M.MSG_ID =:MSG_ID",
  36. "args": [messageId],
  37. "handler": handler
  38. });
  39. };
  40. /**
  41. * 查找所有消息。
  42. *
  43. * @param to
  44. * @param from
  45. * @param contentType
  46. * @param start
  47. * @param end
  48. * @param count
  49. * @param closedInterval
  50. * @param handler
  51. */
  52. static findAllMessages(to, from, contentType, start, end, count, closedInterval, handler) {
  53. var sql = "SELECT MSG_ID, TO_UID, FROM_UID, TYPE, CONTENT, TIMESTAMP FROM MSG_P2P " +
  54. "WHERE ((TO_UID=:TO_UID AND FROM_UID=:FROM_UID) OR (TO_UID=:TO_UID AND FROM_UID=:FROM_UID)) " +
  55. " AND TYPE IN (" + contentType + ") AND MSG_ID BETWEEN '"+closedInterval ? end : end + 1+"' AND '"+closedInterval ? start : start - 1+"' ORDER BY MSG_ID DESC ";
  56. oracledbUtil.query({
  57. "sql": sql,
  58. "args": [to, from, from, to],
  59. "handler": handler
  60. });
  61. };
  62. /**
  63. * 查找用户聊天过的医生列表。
  64. *
  65. * @param userId 指定的用户
  66. * @param handler
  67. */
  68. static findAllP2PWithDoctor(userId, handler) {
  69. //var sql = "SELECT DISTINCT d.code, d.name, d.sex, d.photo, ms3.last_content_type, ms3.last_content, ms3.timestamp, ms3.new_msg_count " +
  70. // "FROM (SELECT DISTINCT CASE WHEN ms1.timestamp > ms2.timestamp THEN ms1.id ELSE ms2.id END id " +
  71. // " FROM msg_statistic ms1, msg_statistic ms2 " +
  72. // " WHERE ms1.from_gid IS NULL AND ms2.from_gid IS NULL " +
  73. // " AND ms1.uid = ms2.peer_uid AND ms1.peer_uid = ms2.uid) x, msg_statistic ms3, wlyy.wlyy_doctor d " +
  74. // "WHERE x.id = ms3.id AND ms3.last_content_type in (1,2,3,5,6) AND " +
  75. // "(ms3.uid = ? AND ms3.peer_uid = d.code) GROUP BY d.code, d.name ORDER BY ms3.timestamp DESC";
  76. var sql = "SELECT D. CODE AS CODE, D. NAME AS NAME, D.SEX, D.PHOTO, S.LAST_CONTENT_TYPE, S.LAST_CONTENT, S. TIMESTAMP AS TIMESTAMP, S.NEW_MSG_COUNT " +
  77. "FROM MSG_P2P P, WLYY.WLYY_DOCTOR D, MSG_STATISTIC S " +
  78. "WHERE (( P.FROM_UID = D. CODE AND P.TO_UID = :TO_UID ) OR ( P.TO_UID = D. CODE AND P.FROM_UID = :FROM_UID )) " +
  79. "AND S.FROM_GID IS NULL AND S.UID = :UID " +
  80. "AND S.PEER_UID = D. CODE " +
  81. "GROUP BY D. NAME, D. CODE, D.HOSPITAL_NAME, D.JOB_NAME, D.SEX, D.PHOTO ORDER BY P.MSG_ID DESC"
  82. oracledbUtil.query({
  83. "sql": sql,
  84. "args": [userId, userId, userId],
  85. "handler": handler
  86. });
  87. };
  88. /**
  89. * 查找用户聊天过的患者列表。
  90. *
  91. * @param userId
  92. * @param handler
  93. */
  94. static findAllP2PWithPatient(userId, handler) {
  95. //var sql = "SELECT p.code, p.name, p.birthday, p.sex, p.photo, ms.last_content_type, ms.last_content, ms.timestamp, ms.new_msg_count " +
  96. // "FROM msg_statistic ms, wlyy.wlyy_patient p " +
  97. // "WHERE ms.msg_type = 1 AND ms.last_content_type in (1,2,3,5,6) " +
  98. // "AND ((ms.from_uid = ? AND ms.uid = p.code) OR (ms.uid = ? AND ms.from_uid = p.code)) ORDER BY ms.timestamp";
  99. var sql = "SELECT P1. CODE AS CODE , P1. NAME AS NAME, P1.BIRTHDAY, P1.SEX, P1.PHOTO, W.LAST_CONTENT, W.LAST_CONTENT_TYPE, W. TIMESTAMP AS TIMESTAMP, W.NEW_MSG_COUNT " +
  100. "FROM MSG_P2P P, WLYY.WLYY_PATIENT P1, MSG_STATISTIC W " +
  101. "WHERE (( P.TO_UID = P1.`CODE` AND P.FROM_UID = :FROM_UID ) OR ( P.FROM_UID = P1.`CODE` AND P.TO_UID = :TO_UID )) " +
  102. "AND W.LAST_CONTENT_TYPE IN (1, 2, 3, 5, 6) AND W.UID = :UID AND W.PEER_UID = P1.`CODE` AND W.FROM_GID IS NULL " +
  103. "GROUP BY P1. CODE, P1. NAME, P1.BIRTHDAY, P1.SEX, P1.PHOTO " +
  104. "UNION ALL " +
  105. "SELECT P1. CODE AS CODE, P1. NAME AS NAME, P1.BIRTHDAY, P1.SEX, P1.PHOTO, W.LAST_CONTENT, T.TYPE, W. TIMESTAMP AS TIMESTAMP, W.NEW_MSG_COUNT " +
  106. "FROM MSG_P2P P, WLYY.WLYY_PATIENT P1, MSG_STATISTIC W, WLYY.WLYY_CONSULT_TEAM T " +
  107. "WHERE (( P.TO_UID = P1.`CODE` AND P.FROM_UID = :FROM_UID ) OR ( P.FROM_UID = P1.`CODE` AND P.TO_UID = :TO_UID )) " +
  108. "AND W.LAST_CONTENT_TYPE = 7 AND T.TYPE = 6 " +
  109. "AND (( T.PATIENT = P.FROM_UID AND T.DOCTOR = P.TO_UID ) OR ( T.PATIENT = P.TO_UID AND T.DOCTOR = P.FROM_UID )) " +
  110. "AND W.UID = :UID AND W.PEER_UID = P1.`CODE` AND W.FROM_GID IS NULL GROUP BY P1. CODE, P1. NAME, P1.BIRTHDAY, P1.SEX, P1.PHOTO;";
  111. oracledbUtil.query({
  112. "sql": sql,
  113. "args": [userId, userId, userId, userId, userId, userId],
  114. "handler": handler
  115. });
  116. };
  117. /**
  118. * 查找未读消息。
  119. *
  120. * @param from
  121. * @param to
  122. * @param start
  123. * @param count
  124. * @param handler
  125. */
  126. static findUnread (from, to, start, count, handler) {
  127. var sql = "SELECT MSG_ID, TO_UID, FROM_UID, TYPE, CONTENT, TIMESTAMP FROM MSG_P2P " +
  128. "WHERE FROM_UID = :FROM_UID AND TO_UID = :TO_UID AND MSG_ID < :MSG_ID ORDER BY TIMESTAMP DESC rownum <= "+count+" ";
  129. oracledbUtil.query({
  130. "sql": sql,
  131. "args": [from, to, start],
  132. "handler": handler
  133. });
  134. };
  135. static isCurrentSessionFinished(doctorId, patientId, handler) {
  136. var sql = "SELECT C.CONSULT CONSULT_ID, CASE WHEN C.END_MSG_ID IS NOT NULL THEN 1 ELSE 0 END FINISHED " +
  137. "FROM WLYY.WLYY_CONSULT_TEAM C WHERE C.DOCTOR=:DOCTOR AND C.PATIENT = :PATIENT ORDER BY ID DESC rownum = 1";
  138. oracledbUtil.query({
  139. "sql": sql,
  140. "args": [doctorId, patientId],
  141. "handler": handler
  142. });
  143. };
  144. }
  145. module.exports = PrivateMsgRepo;