topics.repo.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499
  1. /**
  2. * 搜索功能。
  3. */
  4. "use strict";
  5. let ImDb = require('../oracle/db/im.db');
  6. let log = require('../../util/log.js');
  7. const DB_TABLES = require('../../include/commons').DB_TABLES;
  8. //oracle工具类
  9. let oracledbUtil = require('../../util/oracledb.util');
  10. class TopicRepo {
  11. constructor() {
  12. }
  13. /**
  14. * 查找议题.
  15. *
  16. * @param topicId
  17. * @param handler
  18. */
  19. static findOne(topicId, handler) {
  20. let sql = "SELECT \"ID\" AS \"id\",\"SESSION_ID\" AS \"session_id\",\"NAME\" AS \"name\",\"CREATE_TIME\" AS \"create_time\",\"END_BY\" AS \"end_by\",\"END_TIME\" AS \"end_time\"," +
  21. "\"START_MESSAGE_ID\" AS \"start_message_id\",\"END_MESSAGE_ID\" AS \"end_message_id\",\"DESCRIPTION\" AS \"description\",\"STATUS\" AS \"status\" FROM " + DB_TABLES.Topics + " WHERE ID = :ID";
  22. oracledbUtil.query({
  23. sql: sql,
  24. args: [topicId],
  25. handler: handler || function (err, res) {
  26. if (err) log.error(err);
  27. }
  28. });
  29. }
  30. static findLastTopicStatus(sessionId, handler) {
  31. let sql = "SELECT \"ID\" AS \"id\" FROM " + DB_TABLES.Topics + " WHERE SESSION_ID = :SESSION_ID AND rownum = 1 ORDER BY CREATE_TIME DESC ";
  32. oracledbUtil.query({
  33. sql: sql,
  34. args: [sessionId],
  35. handler: function (err, res) {
  36. if (res && res.length == 0) {
  37. handler(null, null);
  38. } else {
  39. TopicRepo.findTopicStatus(res[0].id, handler);
  40. }
  41. }
  42. });
  43. }
  44. static findLastBySessionId(sessionId, handler) {
  45. let sql = "SELECT \"ID\" AS \"id\",\"SESSION_ID\" AS \"session_id\",\"NAME\" AS \"name\",\"CREATE_TIME\" AS \"create_time\",\"END_BY\" AS \"end_by\",\"END_TIME\" AS \"end_time\",\"START_MESSAGE_ID\" AS \"start_message_id\",\"END_MESSAGE_ID\" AS \"end_message_id\",\"STATUS\" AS \"status\",\"DESCRIPTION\" AS \"description\",\"REPLY\" AS \"reply\",\"REPLY_TIME\" AS \"reply_time\",\"REPLY_USER\" AS \"reply_user\",\"REPLY_MESSAGE_ID\" AS \"reply_message_id\",\"EVALUATE\" AS \"evaluate\",\"EVALUATE_TIME\" AS \"evaluate_time\",\"AGENT\" AS \"agent\" FROM " + DB_TABLES.Topics + " WHERE SESSION_ID = :SESSION_ID AND rownum = 1 ORDER BY CREATE_TIME DESC ";
  46. oracledbUtil.query({
  47. sql: sql,
  48. args: [sessionId],
  49. handler: function (err, res) {
  50. handler(err, res);
  51. }
  52. });
  53. }
  54. static findAllByUserAndReplyAndStatus(userId,reply,status,page,size,handler){
  55. let sql = "";
  56. var args =[];
  57. if(status==10){
  58. args.push(userId,status);
  59. sql = " SELECT * FROM ( SELECT rownum r, T.\"ID\" AS \"id\",T.\"SESSION_ID\" AS \"session_id\",T.\"NAME\" AS \"name\",T.\"CREATE_TIME\" AS \"create_time\",T.\"END_BY\" AS \"end_by\",T.\"END_TIME\" AS \"end_time\",T.\"START_MESSAGE_ID\" AS \"start_message_id\",T.\"END_MESSAGE_ID\" AS \"end_message_id\",T.\"STATUS\" AS \"status\",T.\"DESCRIPTION\" AS \"description\",T.\"REPLY\" AS \"reply\",T.\"REPLY_TIME\" AS \"reply_time\",T.\"REPLY_USER\" AS \"reply_user\",T.\"REPLY_MESSAGE_ID\" AS \"reply_message_id\",T.\"EVALUATE\" AS \"evaluate\",T.\"EVALUATE_TIME\" AS \"evaluate_time\",T.\"AGENT\" AS \"agent\", " +
  60. "S.\"AVATAR\" AS \"avatar\",S.\"SEX\" AS \"sex\",S.\"BIRTHDATE\" AS \"birthdate\",S.\"NAME\" AS \"patient_name\",C.\"DOCTOR\" AS \"doctor\" FROM "+
  61. DB_TABLES.Topics+" T,"+DB_TABLES.Participants+" P,"+DB_TABLES.Doctors+" D,"+DB_TABLES.WlyyConsult+" C,"+DB_TABLES.Patients+" S "+
  62. "WHERE D.ID = P.PARTICIPANT_ID AND C.ID = T.ID AND C.PATIENT = S.ID AND P.SESSION_ID = T.SESSION_ID "+
  63. "AND D.ID IN (:ID) AND T. STATUS = :STATUS ORDER BY CREATE_TIME DESC";
  64. sql += " AND rownum<="+size+") WHERE r>="+page+" ";
  65. }else{
  66. args.push(userId,status,reply);
  67. sql = " SELECT * FROM ( SELECT rownum r, T.\"ID\" AS \"id\",T.\"SESSION_ID\" AS \"session_id\",T.\"NAME\" AS \"name\",T.\"CREATE_TIME\" AS \"create_time\",T.\"END_BY\" AS \"end_by\",T.\"END_TIME\" AS \"end_time\",T.\"START_MESSAGE_ID\" AS \"start_message_id\",T.\"END_MESSAGE_ID\" AS \"end_message_id\",T.\"STATUS\" AS \"status\",T.\"DESCRIPTION\" AS \"description\",T.\"REPLY\" AS \"reply\",T.\"REPLY_TIME\" AS \"reply_time\",T.\"REPLY_USER\" AS \"reply_user\",T.\"REPLY_MESSAGE_ID\" AS \"reply_message_id\",T.\"EVALUATE\" AS \"evaluate\",T.\"EVALUATE_TIME\" AS \"evaluate_time\",T.\"AGENT\" AS \"agent\", " +
  68. "S.\"AVATAR\" AS \"avatar\",S.\"SEX\" AS \"sex\",S.\"BIRTHDATE\" AS \"birthdate\",S.\"NAME\" AS \"patient_name\",C.\"DOCTOR\" AS \"doctor\" FROM "+
  69. DB_TABLES.Topics+" T,"+DB_TABLES.Participants+" P,"+DB_TABLES.Doctors+" D,"+DB_TABLES.WlyyConsult+" C,"+DB_TABLES.Patients+" S "+
  70. "WHERE D.ID = P.PARTICIPANT_ID AND C.ID = T.ID AND C.PATIENT = S.ID AND P.SESSION_ID = T.SESSION_ID "+
  71. "AND D.ID IN (:ID) AND T. STATUS = :STATUS AND T.REPLY=:REPLY ORDER BY CREATE_TIME DESC ";
  72. sql += " AND rownum<="+size+") WHERE r>="+page+" ";
  73. }
  74. oracledbUtil.query({
  75. sql: sql,
  76. args: args,
  77. handler: function (err, res) {
  78. handler(err, res);
  79. }
  80. });
  81. }
  82. /**
  83. * 过滤名医咨询和续方咨询
  84. * @param userId
  85. * @param reply
  86. * @param status
  87. * @param page
  88. * @param size
  89. * @param handler
  90. */
  91. static findAllByUserAndReplyAndStatusHealthTopic(userId,reply,status,page,size,handler){
  92. let sql = "";
  93. var args =[];
  94. if(status==10){
  95. args.push(userId,status);
  96. sql = " SELECT * FROM ( SELECT rownum r, T.\"ID\" AS \"id\",T.\"SESSION_ID\" AS \"session_id\",T.\"NAME\" AS \"name\",T.\"CREATE_TIME\" AS \"create_time\",T.\"END_BY\" AS \"end_by\",T.\"END_TIME\" AS \"end_time\",T.\"START_MESSAGE_ID\" AS \"start_message_id\",T.\"END_MESSAGE_ID\" AS \"end_message_id\",T.\"STATUS\" AS \"status\",T.\"DESCRIPTION\" AS \"description\",T.\"REPLY\" AS \"reply\",T.\"REPLY_TIME\" AS \"reply_time\",T.\"REPLY_USER\" AS \"reply_user\",T.\"REPLY_MESSAGE_ID\" AS \"reply_message_id\",T.\"EVALUATE\" AS \"evaluate\",T.\"EVALUATE_TIME\" AS \"evaluate_time\",T.\"AGENT\" AS \"agent\", " +
  97. "S.\"AVATAR\" AS \"avatar\",S.\"SEX\" AS \"sex\",S.\"BIRTHDATE\" AS \"birthdate\",S.\"NAME\" AS \"patient_name\",C.\"DOCTOR\" AS \"doctor\" FROM "+
  98. DB_TABLES.Topics+" T,"+DB_TABLES.Participants+" P,"+DB_TABLES.Doctors+" D,"+DB_TABLES.WlyyConsult+" C,"+DB_TABLES.Patients+" S "+
  99. "WHERE D.ID = P.PARTICIPANT_ID AND C.ID = T.ID AND C.PATIENT = S.ID AND P.SESSION_ID = T.SESSION_ID "+
  100. "AND D.ID IN (:ID) AND T. STATUS = :STATUS AND C.TYPE NOT IN ('6','8') ORDER BY CREATE_TIME DESC ";
  101. sql += " AND rownum<="+size+") WHERE r>="+page+" ";
  102. }else{
  103. args.push(userId,status,reply);
  104. sql = " SELECT * FROM ( SELECT rownum r, T.\"ID\" AS \"id\",T.\"SESSION_ID\" AS \"session_id\",T.\"NAME\" AS \"name\",T.\"CREATE_TIME\" AS \"create_time\",T.\"END_BY\" AS \"end_by\",T.\"END_TIME\" AS \"end_time\",T.\"START_MESSAGE_ID\" AS \"start_message_id\",T.\"END_MESSAGE_ID\" AS \"end_message_id\",T.\"STATUS\" AS \"status\",T.\"DESCRIPTION\" AS \"description\",T.\"REPLY\" AS \"reply\",T.\"REPLY_TIME\" AS \"reply_time\",T.\"REPLY_USER\" AS \"reply_user\",T.\"REPLY_MESSAGE_ID\" AS \"reply_message_id\",T.\"EVALUATE\" AS \"evaluate\",T.\"EVALUATE_TIME\" AS \"evaluate_time\",T.\"AGENT\" AS \"agent\", " +
  105. "S.\"AVATAR\" AS \"avatar\",S.\"SEX\" AS \"sex\",S.\"BIRTHDATE\" AS \"birthdate\",S.\"NAME\" AS \"patient_name\",C.\"DOCTOR\" AS \"doctor\" FROM "+
  106. DB_TABLES.Topics+" T,"+DB_TABLES.Participants+" P,"+DB_TABLES.Doctors+" D,"+DB_TABLES.WlyyConsult+" C,"+DB_TABLES.Patients+" S "+
  107. "WHERE D.ID = P.PARTICIPANT_ID AND C.ID = T.ID AND C.PATIENT = S.ID AND P.SESSION_ID = T.SESSION_ID "+
  108. "AND D.ID IN (:ID) AND T. STATUS = :STATUS AND T.REPLY=? AND C.TYPE NOT IN ('6','8') ORDER BY CREATE_TIME DESC ";
  109. sql += " AND rownum<="+size+") WHERE r>="+page+" ";
  110. }
  111. oracledbUtil.query({
  112. sql: sql,
  113. args: args,
  114. handler: function (err, res) {
  115. handler(err, res);
  116. }
  117. });
  118. }
  119. /**
  120. * 按类型查找医生的未回复,进行中,已完成的咨询
  121. * @param userId
  122. * @param reply
  123. * @param status
  124. * @param type
  125. * @param page
  126. * @param size
  127. * @param handler
  128. */
  129. static findAllTopicByType(userId,reply,status,type,patientName,startTime,endTime,page,size,handler){
  130. let sql = "";
  131. var args =[];
  132. var tempParms = "";
  133. if(patientName){
  134. tempParms += " AND S.NAME LIKE '%"+patientName+"%' ";
  135. }
  136. if(startTime){
  137. tempParms += " AND T.CREATE_TIME >= '"+startTime+"' ";
  138. }
  139. if(endTime){
  140. tempParms += " AND T.CREATE_TIME <= '"+endTime+"' ";
  141. }
  142. if(status==10){
  143. args.push(userId,status,type);
  144. sql = " SELECT * FROM ( SELECT rownum r, T.\"ID\" AS \"id\",T.\"SESSION_ID\" AS \"session_id\",T.\"NAME\" AS \"name\",T.\"CREATE_TIME\" AS \"create_time\",T.\"END_BY\" AS \"end_by\",T.\"END_TIME\" AS \"end_time\",T.\"START_MESSAGE_ID\" AS \"start_message_id\",T.\"END_MESSAGE_ID\" AS \"end_message_id\",T.\"STATUS\" AS \"status\",T.\"DESCRIPTION\" AS \"description\",T.\"REPLY\" AS \"reply\",T.\"REPLY_TIME\" AS \"reply_time\",T.\"REPLY_USER\" AS \"reply_user\",T.\"REPLY_MESSAGE_ID\" AS \"reply_message_id\",T.\"EVALUATE\" AS \"evaluate\",T.\"EVALUATE_TIME\" AS \"evaluate_time\",T.\"AGENT\" AS \"agent\", " +
  145. "S.\"AVATAR\" AS \"avatar\",S.\"SEX\" AS \"sex\",S.\"BIRTHDATE\" AS \"birthdate\",S.\"NAME\" AS \"patient_name\",C.\"DOCTOR\" AS \"doctor\" FROM "+
  146. DB_TABLES.Topics+" T,"+DB_TABLES.Participants+" P,"+DB_TABLES.Doctors+" D,"+DB_TABLES.WlyyConsult+" D,"+DB_TABLES.Patients+" S "+
  147. "WHERE D.ID = P.PARTICIPANT_ID AND C.ID = T.ID AND C.PATIENT = S.ID AND P.SESSION_ID = T.SESSION_ID "+
  148. "AND D.ID IN (:ID) AND T. STATUS = :STATUS AND C.TYPE =:TYPE "+tempParms+" ORDER BY CREATE_TIME DESC ";
  149. sql += " AND rownum<="+size+") WHERE r>="+page+" ";
  150. }else{
  151. args.push(userId,status,reply,type);
  152. sql = " SELECT * FROM ( SELECT rownum r, T.\"ID\" AS \"id\",T.\"SESSION_ID\" AS \"session_id\",T.\"NAME\" AS \"name\",T.\"CREATE_TIME\" AS \"create_time\",T.\"END_BY\" AS \"end_by\",T.\"END_TIME\" AS \"end_time\",T.\"START_MESSAGE_ID\" AS \"start_message_id\",T.\"END_MESSAGE_ID\" AS \"end_message_id\",T.\"STATUS\" AS \"status\",T.\"DESCRIPTION\" AS \"description\",T.\"REPLY\" AS \"reply\",T.\"REPLY_TIME\" AS \"reply_time\",T.\"REPLY_USER\" AS \"reply_user\",T.\"REPLY_MESSAGE_ID\" AS \"reply_message_id\",T.\"EVALUATE\" AS \"evaluate\",T.\"EVALUATE_TIME\" AS \"evaluate_time\",T.\"AGENT\" AS \"agent\", " +
  153. "S.\"AVATAR\" AS \"avatar\",S.\"SEX\" AS \"sex\",S.\"BIRTHDATE\" AS \"birthdate\",S.\"NAME\" AS \"patient_name\",C.\"DOCTOR\" AS \"doctor\" FROM "+
  154. DB_TABLES.Topics+" T,"+DB_TABLES.Participants+" P,"+DB_TABLES.Doctors+" D,"+DB_TABLES.WlyyConsult+" C,"+DB_TABLES.Patients+" S "+
  155. "WHERE D.ID = P.PARTICIPANT_ID AND C.ID = T.ID AND C.PATIENT = S.ID AND P.SESSION_ID = T.SESSION_ID "+
  156. "AND D.ID IN (:ID) AND T. STATUS = :STATUS AND T.REPLY=:REPLY AND C.TYPE =:TYPE "+tempParms+" ORDER BY CREATE_TIME DESC ";
  157. sql += " AND rownum<="+size+") WHERE r>="+page+" ";
  158. }
  159. oracledbUtil.query({
  160. sql: sql,
  161. args: args,
  162. handler: function (err, res) {
  163. handler(err, res);
  164. }
  165. });
  166. }
  167. /**
  168. * 按类型查找医生的未回复,进行中,已完成的咨询 总数
  169. * @param userId
  170. * @param reply
  171. * @param status
  172. * @param type
  173. * @param handler
  174. */
  175. static topicListCountByType(userId,reply,status,type,patientName,startTime,endTime,handler){
  176. let sql = "";
  177. var args =[];
  178. var tempParms = "";
  179. if(patientName){
  180. tempParms += " AND S.NAME LIKE '%"+patientName+"%' ";
  181. }
  182. if(startTime){
  183. tempParms += " AND T.CREATE_TIME >= '"+startTime+"' ";
  184. }
  185. if(endTime){
  186. tempParms += " AND T.CREATE_TIME <= '"+endTime+"' ";
  187. }
  188. if(status==10){
  189. args.push(userId,status,type);
  190. sql = "SELECT COUNT(T.ID) \"COUNT\" as \"count\" FROM "+
  191. DB_TABLES.Topics+" T,"+DB_TABLES.Participants+" P,"+DB_TABLES.Doctors+" D,"+DB_TABLES.WlyyConsult+" D,"+DB_TABLES.Patients+" S "+
  192. "WHERE D.ID = P.PARTICIPANT_ID AND C.ID = T.ID AND C.PATIENT = S.ID AND P.SESSION_ID = T.SESSION_ID "+
  193. "AND D.ID IN (:ID) AND T. STATUS = :STATUS AND C.TYPE =:TYPE "+tempParms;
  194. }else{
  195. args.push(userId,status,reply,type);
  196. sql = "SELECT COUNT(T.ID) \"COUNT\" as \"count\" FROM "+
  197. DB_TABLES.Topics+" T,"+DB_TABLES.Participants+" P,"+DB_TABLES.Doctors+" D,"+DB_TABLES.WlyyConsult+" C,"+DB_TABLES.Patients+" S "+
  198. "WHERE D.ID = P.PARTICIPANT_ID AND C.ID = T.ID AND C.PATIENT = S.ID AND P.SESSION_ID = T.SESSION_ID "+
  199. "AND D.ID IN (:ID) AND T. STATUS = :STATUS AND T.REPLY=:REPLY AND C.TYPE = :TYPE "+tempParms;
  200. }
  201. oracledbUtil.query({
  202. sql: sql,
  203. args: args,
  204. handler: function (err, res) {
  205. handler(err, res);
  206. }
  207. });
  208. }
  209. /**
  210. * 过滤名医咨询和续方咨询(区分团队)
  211. * @param userId
  212. * @param reply
  213. * @param status
  214. * @param page
  215. * @param size
  216. * @param handler
  217. */
  218. static findAllByUserAndReplyAndStatusHealthTeamTopic(userId,reply,status,adminTeamCode,page,size,handler){
  219. let sql = "";
  220. var args =[];
  221. if(status==10){
  222. args.push(adminTeamCode,userId,status);
  223. sql = " SELECT * FROM ( SELECT rownum r, T.\"ID\" AS \"id\",T.\"SESSION_ID\" AS \"session_id\",T.\"NAME\" AS \"name\",T.\"CREATE_TIME\" AS \"create_time\",T.\"END_BY\" AS \"end_by\",T.\"END_TIME\" AS \"end_time\",T.\"START_MESSAGE_ID\" AS \"start_message_id\",T.\"END_MESSAGE_ID\" AS \"end_message_id\",T.\"STATUS\" AS \"status\",T.\"DESCRIPTION\" AS \"description\",T.\"REPLY\" AS \"reply\",T.\"REPLY_TIME\" AS \"reply_time\",T.\"REPLY_USER\" AS \"reply_user\",T.\"REPLY_MESSAGE_ID\" AS \"reply_message_id\",T.\"EVALUATE\" AS \"evaluate\",T.\"EVALUATE_TIME\" AS \"evaluate_time\",T.\"AGENT\" AS \"agent\", " +
  224. "S.\"AVATAR\" AS \"avatar\",S.\"SEX\" AS \"sex\",S.\"BIRTHDATE\" AS \"birthdate\",S.\"NAME\" AS \"patient_name\",C.\"DOCTOR\" AS \"doctor\" FROM "+
  225. DB_TABLES.Topics+" T,"+DB_TABLES.Participants+" P,"+DB_TABLES.Doctors+" D,"+DB_TABLES.WlyyConsultTeam+" C,"+DB_TABLES.Patients+" S "+
  226. "WHERE D.ID = P.PARTICIPANT_ID AND C.CONSULT = T.ID AND C.PATIENT = S.ID AND P.SESSION_ID = T.SESSION_ID "+
  227. "AND C.ADMIN_TEAM_CODE =? AND D.ID IN (:ID) AND T. STATUS = :STATUS AND C.TYPE NOT IN ('6','8') ORDER BY CREATE_TIME DESC ";
  228. sql += " AND rownum<="+size+") WHERE r>="+page+" ";
  229. }else{
  230. args.push(adminTeamCode,userId,status,reply);
  231. sql = " SELECT * FROM ( SELECT rownum r, T.\"ID\" AS \"id\",T.\"SESSION_ID\" AS \"session_id\",T.\"NAME\" AS \"name\",T.\"CREATE_TIME\" AS \"create_time\",T.\"END_BY\" AS \"end_by\",T.\"END_TIME\" AS \"end_time\",T.\"START_MESSAGE_ID\" AS \"start_message_id\",T.\"END_MESSAGE_ID\" AS \"end_message_id\",T.\"STATUS\" AS \"status\",T.\"DESCRIPTION\" AS \"description\",T.\"REPLY\" AS \"reply\",T.\"REPLY_TIME\" AS \"reply_time\",T.\"REPLY_USER\" AS \"reply_user\",T.\"REPLY_MESSAGE_ID\" AS \"reply_message_id\",T.\"EVALUATE\" AS \"evaluate\",T.\"EVALUATE_TIME\" AS \"evaluate_time\",T.\"AGENT\" AS \"agent\", " +
  232. "S.\"AVATAR\" AS \"avatar\",S.\"SEX\" AS \"sex\",S.\"BIRTHDATE\" AS \"birthdate\",S.\"NAME\" AS \"patient_name\",C.\"DOCTOR\" AS \"doctor\" FROM "+
  233. DB_TABLES.Topics+" T,"+DB_TABLES.Participants+" P,"+DB_TABLES.Doctors+" D,"+DB_TABLES.WlyyConsultTeam+" C,"+DB_TABLES.Patients+" S "+
  234. "WHERE D.ID = P.PARTICIPANT_ID AND C.CONSULT = T.ID AND C.PATIENT = S.ID AND P.SESSION_ID = T.SESSION_ID "+
  235. "AND C.ADMIN_TEAM_CODE =? AND D.ID IN (?) AND T. STATUS = ? AND T.REPLY=? AND C.TYPE NOT IN ('6','8') ORDER BY CREATE_TIME DESC";
  236. sql += " AND rownum<="+size+") WHERE r>="+page+" ";
  237. }
  238. oracledbUtil.query({
  239. sql: sql,
  240. args: args,
  241. handler: function (err, res) {
  242. handler(err, res);
  243. }
  244. });
  245. }
  246. static findReplyCount(userId,reply,status,adminTeamCode,handler){
  247. let sql = "";
  248. var args =[];
  249. if(status==10){
  250. args.push(adminTeamCode,userId,status);
  251. sql = "SELECT COUNT(1) AS \"count\" FROM "+
  252. DB_TABLES.Topics+" T,"+DB_TABLES.Participants+" P,"+DB_TABLES.Doctors+" D,"+DB_TABLES.WlyyConsultTeam+" C,"+DB_TABLES.Patients+" S "+
  253. "WHERE D.ID = P.PARTICIPANT_ID AND C.CONSULT = T.ID AND C.PATIENT = S.ID AND P.SESSION_ID = T.SESSION_ID "+
  254. "AND C.ADMIN_TEAM_CODE=:ADMIN_TEAM_CODE AND C.TYPE!=8 AND D.ID IN (:ID) AND T. STATUS = :STATUS ";
  255. }else if(status){
  256. args.push(adminTeamCode,userId,status,reply);
  257. sql = "SELECT count(1) AS \"count\" FROM "+
  258. DB_TABLES.Topics+" T,"+DB_TABLES.Participants+" P,"+DB_TABLES.Doctors+" D,"+DB_TABLES.WlyyConsultTeam+" C,"+DB_TABLES.Patients+" S "+
  259. "WHERE D.ID = P.PARTICIPANT_ID AND C.CONSULT = T.ID AND C.PATIENT = S.ID AND P.SESSION_ID = T.SESSION_ID "+
  260. "AND C.ADMIN_TEAM_CODE=:ADMIN_TEAM_CODE AND C.TYPE!=8 AND D.ID IN (:ID) AND T. STATUS = :STATUS AND T.REPLY=:REPLY ";
  261. }else{
  262. args.push(adminTeamCode,userId);
  263. sql = "SELECT COUNT(1) AS \"count\" FROM "+
  264. DB_TABLES.Topics+" T,"+DB_TABLES.Participants+" P,"+DB_TABLES.Doctors+" D,"+DB_TABLES.WlyyConsultTeam+" C,"+DB_TABLES.Patients+" S "+
  265. "WHERE D.ID = P.PARTICIPANT_ID AND C.CONSULT = T.ID AND C.PATIENT = S.ID AND P.SESSION_ID = T.SESSION_ID "+
  266. "AND C.ADMIN_TEAM_CODE=:ADMIN_TEAM_CODE AND C.TYPE!=8 AND D.ID IN (:ID)";
  267. }
  268. oracledbUtil.query({
  269. sql: sql,
  270. args: args,
  271. handler: function (err, res) {
  272. if(err){
  273. log.error("get topic count error");
  274. handler(err,0);
  275. return;
  276. }
  277. handler(err, res[0].count);
  278. }
  279. });
  280. }
  281. static findLastTopicStatusAndType(sessionId, handler) {
  282. let sqlTemp = "SELECT rownum r, \"ID\" as \"id\" FROM " + DB_TABLES.Topics + " WHERE SESSION_ID = ? ORDER BY CREATE_TIME DESC ";
  283. let sql = "SELECT*FROM ( "+sqlTemp+" AND rownum<=1) WHERE r>=0"
  284. oracledbUtil.query({
  285. sql: sql,
  286. args: [sessionId],
  287. handler: function (err, res) {
  288. if (res && res.length == 0) {
  289. handler(null, null);
  290. } else {
  291. TopicRepo.findTopicStatusAndType(res[0].id, handler);
  292. }
  293. }
  294. });
  295. }
  296. static findTopicStatus(topicId, handler) {
  297. let sql = "SELECT \"ID\" as \"id\", \"NAME\" as \"name\", \"DESCRIPTION\" as \"description\", \"STATUS\" as \"status\",\"AGENT\" as \"agent\" FROM " + DB_TABLES.Topics + " WHERE ID = ?";
  298. oracledbUtil.query({
  299. sql: sql,
  300. args: [topicId],
  301. handler: handler || function (err, res) {
  302. if (err) log.error(err);
  303. }
  304. });
  305. }
  306. static findTopicStatusAndType(topicId, handler) {
  307. let sql = "SELECT T.\"ID\" as \"id\", T.\"NAME\" as \"name\", T.\"DESCRIPTION\" as \"description\", T.\"STATUS\" as \"status\",T.\"AGENT\" as \"agent\",C.\"TYPE\" as \"type\" FROM TOPICS T,BASE.WLYY_CONSULT C WHERE T.ID = :ID AND T.ID = C.ID";
  308. oracledbUtil.query({
  309. sql: sql,
  310. args: [topicId],
  311. handler: handler || function (err, res) {
  312. if (err) log.error(err);
  313. }
  314. });
  315. }
  316. /**
  317. * 获取会话中的议题。
  318. *
  319. * @param sessionId
  320. * @param handler
  321. */
  322. static findAllBySessionId(sessionId, handler) {
  323. let sql = "SELECT \"ID\" AS \"id\",\"SESSION_ID\" AS \"session_id\",\"NAME\" AS \"name\",\"CREATE_TIME\" AS \"create_time\",\"END_BY\" AS \"end_by\",\"END_TIME\" AS \"end_time\",\"START_MESSAGE_ID\" AS \"start_message_id\",\"END_MESSAGE_ID\" AS \"end_message_id\",\"DESCRIPTION\" AS \"description\",\"STATUS\" AS \"status\" FROM " + DB_TABLES.Topics + " WHERE SESSION_ID = :SESSION_ID ORDER BY ID";
  324. oracledbUtil.query({
  325. sql: sql,
  326. args: [sessionId],
  327. handler: handler || function (err, res) {
  328. if (err) log.error(err);
  329. }
  330. });
  331. }
  332. /**
  333. * 获取会话中的议题。
  334. *
  335. * @param id
  336. * @param handler
  337. */
  338. static findAllByTopicId(id, handler) {
  339. let sql = "SELECT \"ID\" AS \"id\",\"SESSION_ID\" AS \"session_id\",\"NAME\" AS \"name\",\"CREATE_TIME\" AS \"create_time\",\"END_BY\" AS \"end_by\",\"END_TIME\" AS \"end_time\",\"START_MESSAGE_ID\" AS \"start_message_id\",\"END_MESSAGE_ID\" AS \"end_message_id\",\"DESCRIPTION\" AS \"description\",\"STATUS\" AS \"status\" FROM " + DB_TABLES.Topics + " WHERE ID = :ID ORDER BY ID";
  340. oracledbUtil.query({
  341. sql: sql,
  342. args: [id],
  343. handler: handler || function (err, res) {
  344. if (err) log.error(err);
  345. }
  346. });
  347. }
  348. static findAllBySessionIdsAndStatus(sessionIds, status, page, pagesize, handler) {
  349. let sql = "SELECT*FROM ( SELECT rownum r, \"ID\" AS \"id\",\"SESSION_ID\" AS \"session_id\",\"NAME\" AS \"name\",\"CREATE_TIME\" AS \"create_time\",\"END_BY\" AS \"end_by\",\"END_TIME\" AS \"end_time\",\"START_MESSAGE_ID\" AS \"start_message_id\",\"END_MESSAGE_ID\" AS \"end_message_id\",\"DESCRIPTION\" AS \"description\",\"STATUS\" AS \"status\" FROM " + DB_TABLES.Topics + " WHERE SESSION_ID IN ('" + sessionIds + "') AND STATUS IN (" + status + ") ORDER BY STATUS DESC";
  350. sql += " AND rownum<="+pagesize+") WHERE r>="+page+" ";
  351. oracledbUtil.query({
  352. sql: sql,
  353. handler: handler || function (err, res) {
  354. if (err) log.error(err);
  355. }
  356. });
  357. }
  358. /**
  359. * 保存议题
  360. *
  361. * @param topicName
  362. * @param topicId
  363. * @param sessionId
  364. * @param messageId
  365. * @param date
  366. * @param description
  367. * @param status
  368. * @param agent
  369. * @param handler
  370. */
  371. static saveTopic(topicName, topicId, sessionId, messageId, date, description, status, agent, handler) {
  372. let sql = "INSERT INTO " + DB_TABLES.Topics + " (ID,SESSION_ID,NAME,CREATE_TIME,START_MESSAGE_ID,DESCRIPTION,STATUS,AGENT)" +
  373. " VALUES (:ID,:SESSION_ID,:NAME,:CREATE_TIME,:START_MESSAGE_ID,:DESCRIPTION,:STATUS,:AGENT)";
  374. oracledbUtil.query({
  375. "sql": sql,
  376. "args": [topicId, sessionId, topicName, date, messageId, description, status, agent],
  377. "handler": function (err, res) {
  378. handler(err, res);
  379. }
  380. });
  381. }
  382. /**
  383. * 结束议题
  384. *
  385. * @param topicId
  386. * @param endUser
  387. * @param date
  388. * @param messageId
  389. * @param status
  390. */
  391. static endTopic(topicId, endUser, date, messageId, status) {
  392. let sql = "UPDATE " + DB_TABLES.Topics + " SET END_BY = :END_BY,END_TIME=:END_TIME,END_MESSAGE_ID=:END_MESSAGE_ID,STATUS =:STATUS WHERE ID = :ID";
  393. oracledbUtil.query({
  394. "sql": sql,
  395. "args": [endUser, date, messageId, status, topicId],
  396. "handler": function (err, res) {
  397. if (err) {
  398. log.error("endTopic is fail error: " + err);
  399. } else {
  400. log.info("endTopic is success");
  401. }
  402. }
  403. });
  404. }
  405. /**
  406. * 医生第一次回复咨询
  407. * @param reply_user
  408. * @param reply_message_id
  409. * @param topicId
  410. */
  411. static replyTopic(reply_user,reply_message_id,topicId,handler){
  412. let sql = "UPDATE " + DB_TABLES.Topics + " SET REPLY = 1,REPLY_TIME = NOW(),REPLY_USER = :REPLY_USER,REPLY_MESSAGE_ID = :REPLY_MESSAGE_ID WHERE ID = :ID";
  413. oracledbUtil.query({
  414. "sql": sql,
  415. "args": [reply_user, reply_message_id, topicId],
  416. "handler": handler
  417. });
  418. }
  419. /**
  420. * 更新议题状态。
  421. *
  422. * @param topicId
  423. * @param jsonValue
  424. * @param handler
  425. */
  426. static updateTopics(topicId, jsonValue, handler) {
  427. let values = [];
  428. let sql = "UPDATE TOPICS SET ";
  429. let key = [];
  430. for (let j in jsonValue) {
  431. key.push(j + " = :"+j+" ");
  432. values.push(jsonValue[j]);
  433. }
  434. sql = sql + key.join(",");
  435. sql = sql + " WHERE ID = :ID";
  436. values.push(topicId);
  437. oracledbUtil.query({
  438. "sql": sql,
  439. "args": values,
  440. "handler": handler
  441. });
  442. }
  443. /**
  444. * 搜索最后回复时间超过指定时限的议题,此议题最后一条消息的回复者必须是医生,即医生发送消息后,患者未理睬的,关闭。
  445. *
  446. * @param timespan 时限,以小时计
  447. * @param handler
  448. */
  449. static findAllBySessionLastActiveTime(timespan, handler) {
  450. let sql = "S.\"ID\" AS \"session_id\",S.\"NAME\" AS \"session_name\",S.\"CREATE_DATE\" AS \"session_create_time\",S.\"LAST_MESSAGE_TIME\" AS \"last_message_time\",T.\"ID\" AS \"topic_id\",T.\"NAME\" AS \"topic_name\",T.\"CREATE_TIME\" AS \"topic_create_time\",T.\"START_MESSAGE_ID\" AS \"start_message_id\" " +
  451. "FROM SESSIONS S, WLYY_CONSULTS T " +
  452. "WHERE S.ID = T.SESSION_ID AND T.END_MESSAGE_ID IS NULL AND S.LAST_CONTENT_TYPE IN(1,2,3,4) AND S.LAST_SENDER_ID IN (SELECT ID FROM DOCTORS D WHERE D.ID<>T.PATIENT) " +
  453. "AND UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(S.LAST_MESSAGE_TIME) > :LAST_MESSAGE_TIME " +
  454. "ORDER BY T.CREATE_TIME";
  455. oracledbUtil.query({
  456. sql: sql,
  457. args: [timespan * 3600],
  458. handler: handler
  459. });
  460. }
  461. }
  462. module.exports = TopicRepo;