session.repo.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492
  1. /**
  2. * 会话库。
  3. */
  4. "use strict";
  5. let log = require('../../util/log.js');
  6. //oracle工具类
  7. let oracledbUtil = require('../../util/oracledb.util');
  8. const DB_TABLES = require('../../include/commons').DB_TABLES;
  9. const PARTICIPANT_ROLES = require('../../include/commons').PARTICIPANT_ROLES;
  10. const SESSION_STATUS = require('../../include/commons').SESSION_STATUS;
  11. const SESSION_BUSINESS_TYPE = require('../../include/commons').SESSION_BUSINESS_TYPE;
  12. class SessionRepo {
  13. constructor() {
  14. }
  15. /**
  16. * 获取单个session对象
  17. *
  18. * @param sessionId
  19. * @param handler
  20. */
  21. static findOne(sessionId, handler) {
  22. let sessionSQL = "SELECT S.\"ID\" AS \"id\",S.\"NAME\" AS \"name\",S.\"TYPE\" AS \"type\",S.\"CREATE_DATE\" AS \"create_date\",S.\"BUSINESS_TYPE\" as \"business_type\" FROM " + DB_TABLES.Sessions + " S WHERE S.ID = :ID";
  23. oracledbUtil.query({
  24. "sql": sessionSQL,
  25. "args": [sessionId],
  26. "handler": handler || function (err, res) {
  27. if(err) log.error(err);
  28. }
  29. });
  30. }
  31. /**
  32. * 获取用户指定会话类型会话不包含角色未1的会话
  33. *
  34. * @param userId
  35. * @param handler
  36. * @param type
  37. */
  38. static findAllBySessionType(userId,type , handler) {
  39. let sql = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = :PARTICIPANT_ID AND PARTICIPANT_ROLE =0 GROUP BY W.SESSION_ID";
  40. let sys_session = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = 'system' AND PARTICIPANT_ROLE =0 GROUP BY W.SESSION_ID";
  41. let sessionSQL = "SELECT S.\"ID\" AS \"id\",S.\"NAME\" AS \"name\",S.\"TYPE\" AS \"type\",S.\"BUSINESS_TYPE\" AS \"business_type\",S.\"STATUS\" AS \"status\",S.\"CREATE_DATE\" AS \"create_date\",S.\"LAST_SENDER_ID\" AS \"last_sender_id\",S.\"LAST_SENDER_NAME\" AS \"last_sender_name\",S.\"LAST_CONTENT_TYPE\" AS \"last_content_type\",S.\"LAST_CONTENT\" AS \"last_content\",S.\"LAST_MESSAGE_TIME\" AS \"last_message_time\",S.\"BAK_ID\" AS \"bak_id\" FROM "
  42. + DB_TABLES.Sessions + " S WHERE S.ID IN(" + sql + ") AND S.TYPE IN(" + type + ")AND S.ID NOT IN ("+sys_session+")";
  43. oracledbUtil.query({
  44. "sql": sessionSQL,
  45. "args": [userId],
  46. "handler": handler || function (err, res) {
  47. if(err) log.error(err);
  48. }
  49. });
  50. }
  51. /**
  52. * 获取用户全部会话不包含角色未1的会话
  53. *
  54. * @param userId
  55. * @param handler
  56. */
  57. static findAll(userId, handler) {
  58. let sql = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = :PARTICIPANT_ID AND PARTICIPANT_ROLE =0 GROUP BY W.SESSION_ID";
  59. let sys_session = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = 'system' AND PARTICIPANT_ROLE =0 GROUP BY W.SESSION_ID";
  60. let sessionSQL = "SELECT S.\"ID\" AS \"id\",S.\"NAME\" AS \"name\",S.\"TYPE\" AS \"type\",S.\"BUSINESS_TYPE\" AS \"business_type\",S.\"STATUS\" AS \"status\",S.\"CREATE_DATE\" AS \"create_date\",S.\"LAST_SENDER_ID\" AS \"last_sender_id\",S.\"LAST_SENDER_NAME\" AS \"last_sender_name\",S.\"LAST_CONTENT_TYPE\" AS \"last_content_type\",S.\"LAST_CONTENT\" AS \"last_content\",S.\"LAST_MESSAGE_TIME\" AS \"last_message_time\",S.\"BAK_ID\" AS \"bak_id\" FROM "
  61. + DB_TABLES.Sessions + " S WHERE S.ID IN(" + sql + ") AND S.ID NOT IN ("+sys_session+")";
  62. oracledbUtil.query({
  63. "sql": sessionSQL,
  64. "args": [userId],
  65. "handler": handler || function (err, res) {
  66. if(err) log.error(err);
  67. }
  68. });
  69. }
  70. /**
  71. * 获取用户全部(未结束的)会话不包含角色未1的会话
  72. * @param userId
  73. * @param handler
  74. */
  75. static findUnEndAll(userId, handler) {
  76. let sql = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = :PARTICIPANT_ID AND PARTICIPANT_ROLE =0 GROUP BY W.SESSION_ID";
  77. let sys_session = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = 'SYSTEM' AND PARTICIPANT_ROLE =0 GROUP BY W.SESSION_ID";
  78. let sessionSQL = "SELECT S.\"ID\" AS \"id\",S.\"NAME\" AS \"name\",S.\"TYPE\" AS \"type\",S.\"BUSINESS_TYPE\" AS \"business_type\",S.\"STATUS\" AS \"status\",S.\"CREATE_DATE\" AS \"create_date\",S.\"LAST_SENDER_ID\" AS \"last_sender_id\",S.\"LAST_SENDER_NAME\" AS \"last_sender_name\",S.\"LAST_CONTENT_TYPE\" AS \"last_content_type\",S.\"LAST_CONTENT\" AS \"last_content\",S.\"LAST_MESSAGE_TIME\" AS \"last_message_time\",S.\"BAK_ID\" AS \"bak_id\" FROM "
  79. + DB_TABLES.Sessions + " S WHERE S.ID IN(" + sql + ") AND S.ID NOT IN ("+sys_session+") AND S.STATUS = 0";
  80. oracledbUtil.query({
  81. "sql": sessionSQL,
  82. "args": [userId],
  83. "handler": handler || function (err, res) {
  84. if(err) log.error(err);
  85. }
  86. });
  87. }
  88. /**
  89. * 获取用户全部会话忽略角色
  90. *
  91. * @param userId
  92. * @param handler
  93. */
  94. static findAllIgnoreRole(userId, handler) {
  95. let sql = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = :PARTICIPANT_ID GROUP BY W.SESSION_ID";
  96. let sys_session = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = 'SYSTEM' AND PARTICIPANT_ROLE =0 GROUP BY W.SESSION_ID";
  97. let sessionSQL = "SELECT S.\"ID\" AS \"id\",S.\"NAME\" AS \"name\",S.\"TYPE\" AS \"type\",S.\"BUSINESS_TYPE\" AS \"business_type\",S.\"STATUS\" AS \"status\",S.\"CREATE_DATE\" AS \"create_date\",S.\"LAST_SENDER_ID\" AS \"last_sender_id\",S.\"LAST_SENDER_NAME\" AS \"last_sender_name\",S.\"LAST_CONTENT_TYPE\" AS \"last_content_type\",S.\"LAST_CONTENT\" AS \"last_content\",S.\"LAST_MESSAGE_TIME\" AS \"last_message_time\",S.\"BAK_ID\" AS \"bak_id\" FROM "
  98. + DB_TABLES.Sessions + " S WHERE S.ID IN(" + sql + ") AND S.ID NOT IN ("+sys_session+")";
  99. oracledbUtil.query({
  100. "sql": sessionSQL,
  101. "args": [userId],
  102. "handler": handler || function (err, res) {
  103. if(err) log.error(err);
  104. }
  105. });
  106. }
  107. /**
  108. * 获取用户全部会话
  109. *
  110. * @param userId
  111. * @param type
  112. * @param handler
  113. */
  114. static findAllByType(userId, type, handler) {
  115. let sql = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = :PARTICIPANT_ID AND TYPE=:TYPE GROUP BY W.SESSION_ID";
  116. let sessionSQL = "SELECT S.\"ID\" AS \"id\",S.\"NAME\" AS \"name\",S.\"TYPE\" AS \"type\",S.\"BUSINESS_TYPE\" AS \"business_type\",S.\"STATUS\" AS \"status\",S.\"CREATE_DATE\" AS \"create_date\",S.\"LAST_SENDER_ID\" AS \"last_sender_id\",S.\"LAST_SENDER_NAME\" AS \"last_sender_name\",S.\"LAST_CONTENT_TYPE\" AS \"last_content_type\",S.\"LAST_CONTENT\" AS \"last_content\",S.\"LAST_MESSAGE_TIME\" AS \"last_message_time\",S.\"BAK_ID\" AS \"bak_id\" FROM "
  117. + DB_TABLES.Sessions + " S WHERE S.ID IN(" + sql + ") ";
  118. oracledbUtil.query({
  119. "sql": sessionSQL,
  120. "args": [userId, type],
  121. "handler": handler || function (err, res) {
  122. if(err) log.error(err);
  123. }
  124. });
  125. }
  126. /**
  127. * 查找某类型的用户的会话数量
  128. * @param userId
  129. * @param type
  130. * @param handler
  131. */
  132. static findSessionCountByType(userId,type,status,handler){
  133. let sql = "SELECT \"SESSION_ID\" as \"session_id\" FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = :PARTICIPANT_ID GROUP BY W.SESSION_ID";
  134. let sessionSQL = "SELECT COUNT(ID) as \"count\" FROM " + DB_TABLES.Sessions + " S WHERE S.ID IN(" + sql + ") AND S.TYPE=:TYPE ";
  135. if(status != null){
  136. sessionSQL = sessionSQL + " AND S.STATUS="+status;
  137. }
  138. oracledbUtil.query({
  139. "sql": sessionSQL,
  140. "args": [userId, type],
  141. "handler": handler || function (err, res) {
  142. if(err) log.error(err);
  143. }
  144. });
  145. }
  146. /**
  147. * 分页获取用户会话列表
  148. * @param userId
  149. * @param type
  150. * @param handler
  151. */
  152. static findListByType(userId, type,page,pagesize, status,handler) {
  153. log.info("type="+type);
  154. if (page > 0) {
  155. if (page == 1) {
  156. page = 0;
  157. }else{
  158. page = (parseInt(page)-1) * parseInt(pagesize);
  159. }
  160. }
  161. let sqlTemp = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID IN(:USER_ID) GROUP BY W.SESSION_ID";
  162. let sessionSQL = "SELECT rownum r, \"ID\" as \"id\", \"NAME\" as \"name\", \"TYPE\" as \"type\", \"CREATE_DATE\" as \"create_date\", \"LAST_SENDER_ID\" as \"last_sender_id\", \"LAST_SENDER_NAME\" as \"last_sender_name\",\"LAST_CONTENT_TYPE\" as \"last_contnet_type\", \"LAST_CONTENT\" as \"last_content\", \"LAST_MESSAGE_TIME\" as \"last_message_time\" FROM "
  163. + DB_TABLES.Sessions + " S WHERE S.ID IN(" + sqlTemp + ") AND S.TYPE IN("+type+") ";
  164. if(status != null && status != ""){
  165. sessionSQL += " AND S.STATUS="+status
  166. }
  167. let sql = "SELECT * FROM ( "+sessionSQL+" AND rownum<="+pagesize+" ORDER BY S.LAST_MESSAGE_TIME DESC ) WHERE r>="+page
  168. // log.info(sessionSQL)
  169. oracledbUtil.query({
  170. "sql": sql,
  171. "args": [userId],
  172. "handler": handler || function (err, res) {
  173. if(err) log.error(err);
  174. }
  175. });
  176. }
  177. static findAllByTypeAndStatus(userId, businessType,status,page,pagesize, handler) {
  178. if (page > 0) {
  179. if (page == 1) {
  180. page = 0;
  181. }else{
  182. page = (parseInt(page)-1) * parseInt(pagesize);
  183. }
  184. }
  185. let sessionSQL ="";
  186. let sql ="";
  187. if(status == SESSION_STATUS.ENDED){
  188. if(businessType == SESSION_BUSINESS_TYPE.PATIENT){//区分居民,有未读消息的置顶排列
  189. //找出已经结束的咨询
  190. sql = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = :PARTICIPANT_ID GROUP BY W.SESSION_ID";
  191. //找出角色讨论组中为旁听且未结束的咨询
  192. let sql1 = ("SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = :PARTICIPANT_ID AND PARTICIPANT_ROLE ="+PARTICIPANT_ROLES.REGULAR+" GROUP BY W.SESSION_ID")
  193. sessionSQL = "SELECT rownum r, S.\"ID\" AS \"id\",S.\"NAME\" AS \"name\",S.\"TYPE\" AS \"type\",S.\"BUSINESS_TYPE\" AS \"business_type\",S.\"STATUS\" AS \"status\",S.\"CREATE_DATE\" AS \"create_date\",S.\"LAST_SENDER_ID\" AS \"last_sender_id\",S.\"LAST_SENDER_NAME\" AS \"last_sender_name\",S.\"LAST_CONTENT_TYPE\" AS \"last_content_type\",S.\"LAST_CONTENT\" AS \"last_content\",S.\"LAST_MESSAGE_TIME\" AS \"last_message_time\",S.\"BAK_ID\" AS \"bak_id\" FROM " + DB_TABLES.Sessions + " S, " + DB_TABLES.Participants + " P " +
  194. " WHERE ((S.ID IN(" + sql + ") AND S.BUSINESS_TYPE = :BUSINESS_TYPE AND S.STATUS = 1) OR (S.ID IN(" + sql1 + ") AND S.BUSINESS_TYPE = :BUSINESS_TYPE AND S.STATUS = 0)) " +
  195. // " and s.id = p.session_id and p.participant_id = ? ORDER BY (p.last_fetch_time - s.last_message_time+1)>0,s.create_date desc limit "+page+","+pagesize;
  196. " AND S.ID = P.SESSION_ID AND P.PARTICIPANT_ID = :PARTICIPANT_ID ";
  197. sessionSQL = "SELECT*FROM ( " + sessionSQL +" AND rownum<="+pagesize+" ORDER BY S.LAST_MESSAGE_TIME DESC ) WHERE r>="+page;
  198. oracledbUtil.query({
  199. "sql": sessionSQL,
  200. "args": [userId, businessType,userId,businessType,userId],
  201. "handler": handler || function (err, res) {
  202. if(err) log.error(err);
  203. }
  204. });
  205. }else{
  206. //找出已经结束的咨询
  207. sql = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = :PARTICIPANT_ID GROUP BY W.SESSION_ID";
  208. //找出角色讨论组中为旁听且未结束的咨询
  209. let sql1 = ("SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = :PARTICIPANT_ID AND PARTICIPANT_ROLE ="+PARTICIPANT_ROLES.REGULAR+" GROUP BY W.SESSION_ID")
  210. sessionSQL = "SELECT rownum r, S.\"ID\" AS \"id\",S.\"NAME\" AS \"name\",S.\"TYPE\" AS \"type\",S.\"BUSINESS_TYPE\" AS \"business_type\",S.\"STATUS\" AS \"status\",S.\"CREATE_DATE\" AS \"create_date\",S.\"LAST_SENDER_ID\" AS \"last_sender_id\",S.\"LAST_SENDER_NAME\" AS \"last_sender_name\",S.\"LAST_CONTENT_TYPE\" AS \"last_content_type\",S.\"LAST_CONTENT\" AS \"last_content\",S.\"LAST_MESSAGE_TIME\" AS \"last_message_time\",S.\"BAK_ID\" AS \"bak_id\" FROM "
  211. + DB_TABLES.Sessions + " S WHERE (S.ID IN(" + sql + ") AND S.BUSINESS_TYPE = :BUSINESS_TYPE AND S.STATUS = 1) OR (S.ID IN(" + sql1 + ") AND S.BUSINESS_TYPE = :BUSINESS_TYPE AND S.STATUS = 0) ";
  212. sessionSQL = "SELECT*FROM ( " + sessionSQL +" AND rownum<="+pagesize+") WHERE r>="+page;
  213. log.info("findAllByTypeAndStatus: sql " + sessionSQL);
  214. log.info("findAllByTypeAndStatus: args " + [userId, businessType,userId,businessType]);
  215. oracledbUtil.query({
  216. "sql": sessionSQL,
  217. "args": [userId, businessType,userId,businessType],
  218. "handler": handler || function (err, res) {
  219. if(err) log.error(err);
  220. }
  221. });
  222. }
  223. }else{
  224. sql = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = :PARTICIPANT_ID AND PARTICIPANT_ROLE ="+PARTICIPANT_ROLES.HOST+" GROUP BY W.SESSION_ID";
  225. sessionSQL = "SELECT rownum r, S.\"ID\" AS \"id\",S.\"NAME\" AS \"name\",S.\"TYPE\" AS \"type\",S.\"BUSINESS_TYPE\" AS \"business_type\",S.\"STATUS\" AS \"status\",S.\"CREATE_DATE\" AS \"create_date\",S.\"LAST_SENDER_ID\" AS \"last_sender_id\",S.\"LAST_SENDER_NAME\" AS \"last_sender_name\",S.\"LAST_CONTENT_TYPE\" AS \"last_content_type\",S.\"LAST_CONTENT\" AS \"last_content\",S.\"LAST_MESSAGE_TIME\" AS \"last_message_time\",S.\"BAK_ID\" AS \"bak_id\" FROM "
  226. + DB_TABLES.Sessions + " S WHERE S.ID IN(" + sql + ") AND S.BUSINESS_TYPE = :BUSINESS_TYPE AND S.STATUS = :STATUS ";
  227. sessionSQL = "SELECT*FROM ( " + sessionSQL +" AND rownum<="+pagesize+") WHERE r>="+page;
  228. log.info("findAllByTypeAndStatus: sql : "+sessionSQL);
  229. log.info("findAllByTypeAndStatus: args : "+[userId, businessType,status]);
  230. oracledbUtil.query({
  231. "sql": sessionSQL,
  232. "args": [userId, businessType,status],
  233. "handler": handler || function (err, res) {
  234. if(err) log.error(err);
  235. }
  236. });
  237. }
  238. }
  239. static findAllByType(userId, businessType,page,pagesize, handler) {
  240. if (page > 0) {
  241. if (page == 1) {
  242. page = 0;
  243. }else{
  244. page = (parseInt(page)-1) * parseInt(pagesize);
  245. }
  246. }
  247. // MDT 不执行 businessType 的过滤查询 20191028
  248. if(businessType){
  249. let sessionSQL ="";
  250. let sql ="";
  251. //sql = "select session_id from " + DB_TABLES.Participants + " w where w.participant_id = ? and participant_role ="+PARTICIPANT_ROLES.HOST+" group by w.session_id";
  252. //中山医院无法查询到所有会话记录,暂时取消participant_role的判断条件 20190619
  253. sql = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = :PARTICIPANT_ID GROUP BY W.SESSION_ID";
  254. sessionSQL = "SELECT S.\"ID\" AS \"id\",S.\"NAME\" AS \"name\",S.\"TYPE\" AS \"type\",S.\"BUSINESS_TYPE\" AS \"business_type\",S.\"STATUS\" AS \"status\",S.\"CREATE_DATE\" AS \"create_date\",S.\"LAST_SENDER_ID\" AS \"last_sender_id\",S.\"LAST_SENDER_NAME\" AS \"last_sender_name\",S.\"LAST_CONTENT_TYPE\" AS \"last_content_type\",S.\"LAST_CONTENT\" AS \"last_content\",S.\"LAST_MESSAGE_TIME\" AS \"last_message_time\",S.\"BAK_ID\" AS \"bak_id\" FROM "
  255. + DB_TABLES.Sessions + " S WHERE S.ID IN(" + sql + ") AND S.BUSINESS_TYPE = :BUSINESS_TYPE AND S.TYPE!=0 LIMIT "+page+","+pagesize;
  256. oracledbUtil.query({
  257. "sql": sessionSQL,
  258. "args": [userId, businessType],
  259. "handler": handler || function (err, res) {
  260. if(err) log.error(err);
  261. }
  262. });
  263. }else{
  264. let sessionSQL ="";
  265. let sql ="";
  266. //sql = "select session_id from " + DB_TABLES.Participants + " w where w.participant_id = ? and participant_role ="+PARTICIPANT_ROLES.HOST+" group by w.session_id";
  267. //中山医院无法查询到所有会话记录,暂时取消participant_role的判断条件 20190619
  268. sql = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = :userId GROUP BY W.SESSION_ID";
  269. sessionSQL = "SELECT S.\"ID\" AS \"id\",S.\"NAME\" AS \"name\",S.\"TYPE\" AS \"type\",S.\"BUSINESS_TYPE\" AS \"business_type\",S.\"STATUS\" AS \"status\",S.\"CREATE_DATE\" AS \"create_date\",S.\"LAST_SENDER_ID\" AS \"last_sender_id\",S.\"LAST_SENDER_NAME\" AS \"last_sender_name\",S.\"LAST_CONTENT_TYPE\" AS \"last_content_type\",S.\"LAST_CONTENT\" AS \"last_content\",S.\"LAST_MESSAGE_TIME\" AS \"last_message_time\",S.\"BAK_ID\" AS \"bak_id\" FROM "
  270. + DB_TABLES.Sessions + " S WHERE S.ID IN(" + sql + ") AND S.TYPE!=0 LIMIT "+page+","+pagesize;
  271. oracledbUtil.query({
  272. "sql": sessionSQL,
  273. "args": [userId],
  274. "handler": handler || function (err, res) {
  275. if(err) log.error(err);
  276. }
  277. });
  278. }
  279. }
  280. /**
  281. * 按时间跨度查询会话。
  282. *
  283. * TODO: 暂时屏蔽与患者相关的会话,包括MUC与患者名医咨询
  284. *
  285. * @param userId
  286. * @param dateSpan
  287. * @param handler
  288. */
  289. static findAllByTimestampAndType(userId, dateSpan, handler) {
  290. let sql = "SELECT DISTINCT S.\"ID\" AS \"id\",CASE WHEN TYPE=2 THEN D.\"NAME\" AS \"name\" ELSE S.\"NAME\" AS \"name\" END 'NAME' AS \"name\",S.\"LAST_CONTENT_TYPE\" AS \"last_content_type\",S.\"TYPE\" AS \"type\",S.\"CREATE_DATE\" AS \"create_date\",S.\"BUSINESS_TYP\" E AS \"business_type\" " +
  291. "FROM SESSIONS S, PARTICIPANTS P " +
  292. "LEFT JOIN DOCTORS D ON P.PARTICIPANT_ID = D.ID " +
  293. "WHERE S.ID = P.SESSION_ID AND S.LAST_SENDER_ID <> 'system' " +
  294. "AND UNIX_TIMESTAMP(S.LAST_MESSAGE_TIME) > UNIX_TIMESTAMP(NOW()) - "+dateSpan * 3600 * 24+" " +
  295. "AND P.PARTICIPANT_ID <> :PARTICIPANT_ID AND S.TYPE <> 1 AND S.BUSINESS_TYPE = 1 " +
  296. "AND S.ID IN (SELECT S.ID FROM SESSIONS S, PARTICIPANTS P WHERE S.ID = P.SESSION_ID AND P.PARTICIPANT_ID = :PARTICIPANT_ID) " +
  297. "ORDER BY S.LAST_MESSAGE_TIME DESC";
  298. oracledbUtil.query({
  299. sql: sql,
  300. args: [ userId, userId],
  301. handler: handler || function (err, res) {
  302. if(err) log.error(err);
  303. }
  304. });
  305. }
  306. /**
  307. * 获取用户置顶会话
  308. *
  309. * @param userId
  310. * @param handler
  311. */
  312. static findStickySessions(userId, handler) {
  313. let sql = "SELECT SESSION_ID FROM " + DB_TABLES.Participants + " W WHERE W.PARTICIPANT_ID = :PARTICIPANT_ID GROUP BY W.SESSION_ID";
  314. let sessionSQL = "SELECT S.\"ID\" AS \"id\",S.\"NAME\" AS \"name\",S.\"TYPE\" AS \"type\",S.\"CREATE_DATE\" AS \"create_date\" FROM " + DB_TABLES.Sessions + " S," + DB_TABLES.StickySessions + " SS WHERE S.ID = SS.SESSION_ID S.ID IN(" + sql + ")";
  315. oracledbUtil.query({
  316. "sql": sessionSQL,
  317. "args": [userId],
  318. "handler": handler || function (err, res) {
  319. if(err) log.error(err);
  320. }
  321. });
  322. }
  323. /**
  324. * 保存session。若会话重复创建,则更新会话名称。
  325. *
  326. * @param sessionId
  327. * @param name
  328. * @param type
  329. * @param createDate
  330. * @param businessType
  331. * @param handler
  332. */
  333. static saveSession(sessionId, name, type, createDate, businessType, handler) {
  334. let sql = "INSERT INTO " + DB_TABLES.Sessions + " (ID, NAME, TYPE, CREATE_DATE,BUSINESS_TYPE) VALUES (:ID,:NAME,:TYPE,:CREATE_DATE,:BUSINESS_TYPE) ";
  335. oracledbUtil.query({
  336. "sql": sql,
  337. "args": [sessionId, name, type,createDate,businessType],
  338. "handler": handler || function (err, res) {
  339. if(err) log.error(err);
  340. }
  341. });
  342. }
  343. /**
  344. * 保存session。若会话重复创建,则更新会话名称。
  345. *
  346. * @param sessionId
  347. * @param name
  348. * @param type
  349. * @param createDate
  350. * @param businessType
  351. * @param handler
  352. */
  353. static updateSessionToMySQL(sessionId, name, type, createDate, businessType, handler) {
  354. let sql = "UPDATE " + DB_TABLES.Sessions + " SET NAME = :NAME , TYPE = :NAME, CREATE_DATE=:CREATE_DATE,businessType=:BUSINESS_TYPE, STATUS=0 WHERE ID=:ID ";
  355. oracledbUtil.query({
  356. "sql": sql,
  357. "args": [name, type,createDate,businessType,sessionId],
  358. "handler": handler || function (err, res) {
  359. if(err) log.error(err);
  360. }
  361. });
  362. }
  363. /**
  364. * 更新会话的最终状态。
  365. *
  366. * @param lastSenderId
  367. * @param lastSenderName
  368. * @param lastMessageTime
  369. * @param lastContent
  370. * @param lastContentType
  371. * @param sessionId
  372. * @param handler
  373. */
  374. static updateSessionLastStatus(lastSenderId, lastSenderName, lastMessageTime, lastContent, lastContentType, sessionId, handler) {
  375. let sql = "UPDATE " + DB_TABLES.Sessions + " SET LAST_SENDER_ID=:LAST_SENDER_ID,LAST_SENDER_NAME=:LAST_SENDER_NAME,LAST_MESSAGE_TIME=:LAST_MESSAGE_TIME,LAST_CONTENT=:LAST_CONTENT,LAST_CONTENT_TYPE=:LAST_CONTENT_TYPE WHERE ID = :ID";
  376. oracledbUtil.query({
  377. "sql": sql,
  378. "args": [lastSenderId, lastSenderName, lastMessageTime, lastContent, lastContentType, sessionId],
  379. "handler": handler || function (err, res) {
  380. if(err) log.error(err);
  381. }
  382. });
  383. }
  384. /**
  385. * 保存置顶会话。
  386. *
  387. * @param sessionId
  388. * @param user
  389. * @param score
  390. */
  391. static saveStickySession(sessionId, user, score) {
  392. let sql = "INSERT INTO " + DB_TABLES.StickySessions + " (USER_ID,SESSION_ID,SCORE) VALUES (:USER_ID,:SESSION_ID,:SCORE) ";
  393. oracledbUtil.query({
  394. "sql": sql,
  395. "args": [user, sessionId, score],
  396. "handler": function (err, res) {
  397. if (err) {
  398. log.error("sql:" + sql + "data:sessionId:" + sessionId + ",user:" + user + ",score:" + score);
  399. }
  400. }
  401. });
  402. }
  403. /**
  404. * 取消会话置顶。
  405. *
  406. * @param sessionId
  407. * @param userId
  408. */
  409. static unStickySession(sessionId, userId) {
  410. let sql = "DELETE FROM " + DB_TABLES.StickySessions + " WHERE USER_ID=:USER_ID AND SESSION_ID=:SESSION_ID ";
  411. oracledbUtil.query({
  412. "sql": sql,
  413. "args": [userId, sessionId],
  414. "handler": function (err, res) {
  415. if (err) {
  416. log.error("sql:" + sql + "data:sessionId:" + sessionId + ",user:" + userId);
  417. }
  418. }
  419. });
  420. }
  421. static updateSessionStatus(sessionId,status,handler){
  422. let sql = "UPDATE " + DB_TABLES.Sessions + " SET STATUS=:STATUS WHERE ID = :ID";
  423. oracledbUtil.query({
  424. "sql": sql,
  425. "args": [status, sessionId],
  426. "handler": handler || function (err, res) {
  427. if(err) log.error(err);
  428. }
  429. });
  430. }
  431. static updateSessionName(sessionId,name,handler){
  432. let sql = "UPDATE " + DB_TABLES.Sessions + " SET NAME=:NAME WHERE ID = :ID";
  433. oracledbUtil.query({
  434. "sql": sql,
  435. "args": [name, sessionId],
  436. "handler": handler || function (err, res) {
  437. if(err) log.error(err);
  438. }
  439. });
  440. }
  441. }
  442. module.exports = SessionRepo;