chats.endpoint.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657
  1. /**
  2. * 消息端点。
  3. *
  4. * 此控制器处理点对点,组及消息消息。为三类消息提供发送及查询功能。
  5. */
  6. "use strict";
  7. let express = require('express');
  8. let router = express.Router();
  9. let http = require('http');
  10. let log = require('../util/log.js');
  11. let objectUtil = require("../util/objectUtil.js");
  12. let controllerUtil = require('../util/controllerUtil');
  13. let Patient = require("../models/patient");
  14. let Doctor = require('../models/doctor');
  15. let Group = require('../models/group');
  16. let Search = require('../models/search');
  17. const APIv1 = require('../include/endpoints').APIv1;
  18. const CONTENT_TYPES = require('../include/commons').CONTENT_TYPE;
  19. const MAX_INT = require('../include/commons').MAX_INT;
  20. const DEFAULT_PAGE_SIZE = require('../include/commons').DEFAULT_PAGE_SIZE;
  21. //--------------------------------------------------------------//
  22. //----------------------------消息发送----------------------------//
  23. //--------------------------------------------------------------//
  24. /**
  25. * 发送System消息。
  26. *
  27. * 请求URL:
  28. * /chats/sm
  29. *
  30. * 消息格式:
  31. * {
  32. * to: "Rose",
  33. * title: "System Message",
  34. * summary: "You have new job",
  35. * contentType: "1",
  36. * content: "The patient has been followed in the scheduler, please make new follow plan as soon as possible.",
  37. * delay: 986123465
  38. * }
  39. *
  40. * @param message
  41. */
  42. router.post(APIv1.Chats.SM, function (req, res) {
  43. // 检查消息体及消息格式是否正确
  44. let message = req.body;
  45. if (!objectUtil.isJsonObject(message)) {
  46. throw {httpStatus: 406, message: 'Problems parsing JSON.'}
  47. }
  48. // 字段判断
  49. let testing = objectUtil.fieldsCheck(message, "to", "title", "summary", "contentType", "content");
  50. if (!testing.pass) {
  51. throw {httpStatus: 406, message: testing.message}
  52. }
  53. // 消息处理
  54. let doctor = new Doctor();
  55. controllerUtil.regModelEventHandler(doctor, res);
  56. doctor.sendSystemMessage(message);
  57. });
  58. /**
  59. * 处理Private消息。处理流程分:
  60. * 1 解析消息,并保存到数据库
  61. * 2 更新消息统计数据
  62. * 3 获取目标的状态并构建通知消息,如果用户在线就推送通知消息
  63. *
  64. * 请求URL:
  65. * /chats/pm
  66. *
  67. * 消息格式:
  68. * {
  69. * from: sand,
  70. * to: Rose,
  71. * contentType: "1,2,3,4",
  72. * content: "Please follow the patient as soon as possible."
  73. * }
  74. *
  75. * @param message
  76. */
  77. router.post(APIv1.Chats.PM, function (req, res) {
  78. // 检查消息体及消息格式是否正确
  79. let message = req.body;
  80. if (!objectUtil.isJsonObject(message)) {
  81. throw {httpStatus: 406, message: 'Problems parsing JSON.'}
  82. }
  83. // 字段判断
  84. let testing = objectUtil.fieldsCheck(message, "from", "to", "contentType", "content");
  85. if (!testing.pass) {
  86. throw {httpStatus: 406, message: testing.message};
  87. }
  88. // 消息处理,患者与医生分开发送
  89. Patient.isPatientCode(message.to,
  90. function () {
  91. let patient = new Patient();
  92. controllerUtil.regModelEventHandler(patient, res);
  93. patient.sendMessage(message);
  94. }, function () {
  95. let doctor = new Doctor();
  96. controllerUtil.regModelEventHandler(doctor, res);
  97. doctor.sendMessage(message);
  98. });
  99. });
  100. /**
  101. * 处理讨论组消息。
  102. *
  103. * 请求URL:
  104. * /chats/gm
  105. *
  106. * 消息格式:
  107. * {
  108. * from: "sand", // 发送者id
  109. * at: "Rose", // @人
  110. * group: "DiscussionGroupId", // 所在组
  111. * groupType: "1 or 2", // 组类型:行政团队或讨论组
  112. * contentType: "1,2,3", // 内容类型
  113. * content: "The patient mess me up" // 内容
  114. * }
  115. *
  116. * @param message
  117. */
  118. router.post(APIv1.Chats.GM, function (req, res) {
  119. // 检查消息体及消息格式是否正确
  120. let message = req.body;
  121. if (!objectUtil.isJsonObject(message)) {
  122. throw {httpStatus: 406, message: 'Problems parsing JSON.'};
  123. }
  124. // 字段判断
  125. let testing = objectUtil.fieldsCheck(message, 'from', 'at', 'group', 'groupType', 'contentType', 'content');
  126. if (!testing.pass) {
  127. throw {httpStatus: 406, message: testing.message}
  128. }
  129. // 消息处理
  130. let group = new Group();
  131. controllerUtil.regModelEventHandler(group, res);
  132. group.sendMessage(message);
  133. });
  134. //--------------------------------------------------------------//
  135. //----------------------------消息提取----------------------------//
  136. //--------------------------------------------------------------//
  137. /**
  138. * 获取参与的聊天列表,包括:点对点,@我,参与的讨论组,系统消息等。
  139. *
  140. * 请求URL:
  141. * /chats/list?user_id=sand
  142. */
  143. router.get(APIv1.Chats.List, function (req, res) {
  144. let userId = req.query.user_id;
  145. if (userId === null) {
  146. throw {httpStatus: 406, message: 'Missing fields.'};
  147. }
  148. let doctor = new Doctor();
  149. controllerUtil.regModelEventHandler(doctor, res);
  150. doctor.getChatList(userId);
  151. });
  152. /**
  153. * 获取参与的聊天列表,包括:点对点,@我,参与的讨论组,系统消息等。
  154. *
  155. * 请求URL:
  156. * /chats/ydf/list?user_id=sand
  157. */
  158. router.get(APIv1.Chats.YdfList, function (req, res) {
  159. let userId = req.query.user_id;
  160. if (userId === null) {
  161. throw {httpStatus: 406, message: 'Missing fields.'};
  162. }
  163. let doctor = new Doctor();
  164. controllerUtil.regModelEventHandler(doctor, res);
  165. doctor.getYdfList(userId);
  166. });
  167. /**
  168. * 获取与患者的聊天列表,包括:P2P,参与的讨论组和行政团队。
  169. *
  170. * 请求URL:
  171. * /chats/list/patient
  172. */
  173. router.get(APIv1.Chats.ListWithPatient, function (req, res) {
  174. let userId = req.query.user_id;
  175. if (userId === null) {
  176. throw {httpStatus: 406, message: 'Missing fields.'};
  177. }
  178. let doctor = new Doctor();
  179. controllerUtil.regModelEventHandler(doctor, res);
  180. doctor.getChatsListWithPatient(userId);
  181. });
  182. /**
  183. * 获取与医生的聊天列表,包括:点对点,参与的讨论组。
  184. *
  185. * 请求URL:
  186. * /chats/list/doctor
  187. */
  188. router.get(APIv1.Chats.ListWithDoctor, function (req, res) {
  189. let userId = req.query.user_id;
  190. if (userId === null) {
  191. throw {httpStatus: 406, message: 'Missing fields.'};
  192. }
  193. let doctor = new Doctor();
  194. controllerUtil.regModelEventHandler(doctor, res);
  195. doctor.getChatListWithDoctor(userId);
  196. });
  197. router.get(APIv1.Chats.MsgAmount, function (req, res) {
  198. let userId = req.query.user_id;
  199. if (userId === null) {
  200. throw {httpStatus: 406, message: 'Missing fields.'};
  201. }
  202. let doctor = new Doctor();
  203. controllerUtil.regModelEventHandler(doctor, res);
  204. doctor.getChatListMsgAmount(userId);
  205. });
  206. /**
  207. * 获取最近聊天对象:包括患者,医生与讨论组。客户端自行根据需要提取患者、医生或讨论组数据。
  208. *
  209. * 请求URL:
  210. * /chats/recent?user_id=0de7295862dd11e69faffa163e8aee56&days=7
  211. *
  212. * 参数:
  213. * user_id: 用户ID
  214. * target_type: 对象类型,1患者,2医生,3讨论组
  215. * days: 最近天数,默认7天
  216. */
  217. router.get(APIv1.Chats.Recent, function (req, res) {
  218. let userId = req.query.user_id;
  219. let days = req.query.days;
  220. if (userId === null) {
  221. throw {httpStatus: 406, message: 'Missing field: user_id'};
  222. }
  223. if (days === null) {
  224. days = 7;
  225. }
  226. let doctor = new Doctor();
  227. controllerUtil.regModelEventHandler(doctor, res);
  228. doctor.getRecentChatList(userId, days);
  229. });
  230. /**
  231. * 获取私信。倒序排列。
  232. *
  233. * 参数:
  234. * user_id 必须,医生ID
  235. * peer_id 必须,对方医生ID
  236. * content_type 必须,消息类型
  237. * message_start_id 可选,消息的起始ID,如果为空从最新的一条开始获取
  238. * message_end_id 可选,消息的结束ID,如果为空从第一条开始获取
  239. * count 可选,消息数量,如果不指定、小于零或大于50,默认为100条。若message_start_id与message_end_id均不为空,则此参数无效,方法是设置为10000条
  240. * closed_interval 消息范围是否使用闭区间
  241. *
  242. * 请求URL:
  243. * /chats/pm?user_id=sand&peer_id=Rose&content_type=2&message_start_id=10000&message_end_id=0&count=20&closed_interval=false
  244. */
  245. router.get(APIv1.Chats.PM, function (req, res) {
  246. let userId = req.query.user_id;
  247. let peerId = req.query.peer_id;
  248. let contentType = req.query.content_type;
  249. let msgStartId = !req.query.message_start_id ? MAX_INT : parseInt(req.query.message_start_id);
  250. let msgEndId = !req.query.message_end_id || req.query.message_end_id === 'null' ? 0 : parseInt(req.query.message_end_id);
  251. let count = req.query.count === undefined ? DEFAULT_PAGE_SIZE : parseInt(req.query.count);
  252. let closedInterval = (req.query.closed_interval != false && req.query.closed_interval === "true");
  253. if (contentType !== undefined && parseInt(contentType) === CONTENT_TYPES.Image) count = DEFAULT_PAGE_SIZE;
  254. if (req.query.message_start_id && req.query.message_end_id) count = 10000;
  255. if (!userId) {
  256. throw {httpStatus: 400, message: "Missing field: user_id."};
  257. }
  258. let doctor = new Doctor();
  259. controllerUtil.regModelEventHandler(doctor, res);
  260. doctor.getPrivateMessages(userId, peerId, contentType, msgStartId, msgEndId, count, closedInterval);
  261. });
  262. /**
  263. * 获取未读私信。倒序排列。
  264. *
  265. * 参数:
  266. * user_id 必须,医生ID
  267. * peer_id 必须,对方医生ID
  268. *
  269. * 请求URL:
  270. * /chats/pm/unread?user_id=sand&peer_id=Rose
  271. */
  272. router.get(APIv1.Chats.PMUnread, function (req, res) {
  273. let userId = req.query.user_id;
  274. let peerId = req.query.peer_id;
  275. if (userId === undefined) {
  276. throw {httpStatus: 400, message: "Missing field: user_id."};
  277. }
  278. let doctor = new Doctor();
  279. controllerUtil.regModelEventHandler(doctor, res);
  280. doctor.getUnreadPrivateMessages(userId, peerId);
  281. });
  282. /**
  283. * 按时间倒序获取群消息。
  284. *
  285. * 参数:
  286. * user_id 必须,医生ID
  287. * group_id 必须,组ID
  288. * message_start_id 可选,消息的起始ID,如果为空从最新的一条开始获取
  289. * count 可选,消息数量,如果不指定、小于零或大于50,默认为50条
  290. *
  291. * 请求URL:
  292. * /chats/gm?user_id=D2016008240002&group_id=494&content_type=2&message_start_id=0&message_end_id=0&count=20
  293. */
  294. router.get(APIv1.Chats.GM, function (req, res) {
  295. let groupId = req.query.group_id;
  296. let memberId = req.query.user_id;
  297. let contentType = req.query.content_type;
  298. let msgStartId = !req.query.message_start_id ? MAX_INT : parseInt(req.query.message_start_id);
  299. let msgEndId = !req.query.message_end_id ? 0 : parseInt(req.query.message_end_id);
  300. let count = req.query.count === undefined ? DEFAULT_PAGE_SIZE : parseInt(req.query.count);
  301. if (groupId === undefined) {
  302. throw {httpStatus: 400, message: "Missing field: group_id."};
  303. }
  304. if (contentType !== undefined && parseInt(contentType) === CONTENT_TYPES.Image) count = DEFAULT_PAGE_SIZE;
  305. if (req.query.message_start_id && req.query.message_end_id) count = 100000;
  306. let group = new Group();
  307. controllerUtil.regModelEventHandler(group, res);
  308. group.getMessages(groupId, memberId, contentType, msgStartId, msgEndId, count);
  309. });
  310. /**
  311. * 获取未读群消息。
  312. *
  313. * 请求URL:
  314. * /chats/gm/unread?group_id=discussionGroupId&user_id=sand
  315. */
  316. router.get(APIv1.Chats.GMUnread, function (req, res) {
  317. let memberId = req.query.user_id;
  318. let groupId = req.query.group_id;
  319. if (memberId === undefined) {
  320. throw {httpStatus: 400, message: "Missing field: user_id."};
  321. }
  322. if (groupId === undefined) {
  323. throw {httpStatus: 400, message: "Missing field: group_id."};
  324. }
  325. let group = new Group();
  326. controllerUtil.regModelEventHandler(group, res);
  327. group.getUnreadMessages(groupId, memberId);
  328. });
  329. //--------------------------------------------------------------//
  330. //----------------------------消息统计----------------------------//
  331. //--------------------------------------------------------------//
  332. /**
  333. * 获取所有群组未读消息总数。
  334. *
  335. * 请求URL:
  336. * /chats/gm/unread_count?user_id=sand
  337. *
  338. * 参数:
  339. * user_id:医生ID
  340. */
  341. router.get(APIv1.Chats.GMUnreadCount, function (req, res) {
  342. let memberId = req.query.user_id;
  343. if (memberId === null) {
  344. throw {httpStatus: 406, message: 'Missing fields.'};
  345. }
  346. let group = new Group();
  347. controllerUtil.regModelEventHandler(group, res);
  348. group.getUnreadMessageCount(memberId);
  349. });
  350. /**
  351. * 获取特定群组消息统计情况。
  352. *
  353. * /chats/gm/statistic?group_id=GGG&&user_id=sand
  354. *
  355. * 参数:
  356. * user_id:信息所有者id
  357. * group_id:群组id
  358. */
  359. router.get(APIv1.Chats.GMStats, function (req, res) {
  360. let memberId = req.query.user_id;
  361. let groupId = req.query.group_id;
  362. if (memberId === null || groupId === null) {
  363. throw {httpStatus: 406, message: 'Miss fields.'};
  364. }
  365. let group = new Group();
  366. controllerUtil.regModelEventHandler(group, res);
  367. group.getChatSummary(groupId, memberId);
  368. });
  369. /**
  370. * 获取与某人的私信统计。
  371. *
  372. * /chats/pm/statistic?user_id=sand&&peer_id=rose
  373. *
  374. * 参数:
  375. * user_id:信息所有者id
  376. * peer_id:聊天对端id
  377. */
  378. router.get(APIv1.Chats.PMStats, function (req, res) {
  379. let userId = req.query.user_id;
  380. let peerId = req.query.peer_id;
  381. if (userId == null || peerId == null) {
  382. throw {httpStatus: 406, message: "Missing fields."};
  383. }
  384. let doctor = new Doctor();
  385. controllerUtil.regModelEventHandler(doctor, res);
  386. doctor.getChatSummary(userId, peerId);
  387. });
  388. /**
  389. * 获取所有未读私信总数。
  390. *
  391. * /chats/pm/unread_count?user_id=sand
  392. *
  393. * 参数:
  394. * uid:信息所有者id
  395. */
  396. router.get(APIv1.Chats.PMUnreadCount, function (req, res) {
  397. let userId = req.query.user_id;
  398. let doctor = new Doctor();
  399. controllerUtil.regModelEventHandler(doctor, res);
  400. doctor.getUnreadPrivateMessages(userId);
  401. });
  402. /**
  403. * 所有聊天消息未读数。
  404. *
  405. * 请求URL:
  406. * /chats/chats/unread_count?user_id=sand
  407. *
  408. * 参数:
  409. * user_id:信息所有者id
  410. */
  411. router.get(APIv1.Chats.UnreadMsgCount, function (req, res) {
  412. let userId = req.query.user_id;
  413. if (userId === null) {
  414. throw {httpStatus: 406, message: "Missing fields."};
  415. }
  416. let doctor = new Doctor();
  417. controllerUtil.regModelEventHandler(doctor, res);
  418. doctor.getAllUnreadMessageCount(userId);
  419. });
  420. /**
  421. * 搜索患者相关的数据,包括患者信息与相关的私信记录。关键词不支持空格拆分。
  422. *
  423. * 请求URL:
  424. * http://192.168.131.107:3000/api/v1/chats/search/patient?user_id=D2016008240003&user_role=3&keyword=fa
  425. *
  426. * 参数:
  427. * keywords: 关键词
  428. */
  429. router.get(APIv1.Chats.SearchAboutPatient, function (req, res) {
  430. var userId = req.query.user_id;
  431. var userRole = req.query.user_role;
  432. var keyword = req.query.keyword;
  433. if (!userId) throw {httpStatus: 406, message: "Missing fields: user_id."};
  434. if (!userRole) throw {httpStatus: 406, message: "Missing fields: user_role."};
  435. if (!keyword) throw {httpStatus: 406, message: "Missing fields: keyword."};
  436. let search = new Search();
  437. controllerUtil.regModelEventHandler(search, res);
  438. search.searchAboutPatient(userId, userRole, keyword);
  439. });
  440. /**
  441. * 获取某个聊天的关键字搜索记录列表
  442. * 请求URL:
  443. *http://192.168.131.107:3000/api/v1/chats/search/patient/list?user_id=D2016008240003&keyword=f&group_id=e2b695b9daf74d0faeb90a304ae587a0&type=1
  444. */
  445. router.get(APIv1.Chats.SearchAboutPatientList, function (req, res) {
  446. var userId = req.query.user_id;
  447. var groupId = req.query.group_id;
  448. var keyword = req.query.keyword;
  449. var type = req.query.type;
  450. if (!userId) throw {httpStatus: 406, message: "Missing fields: user_id."};
  451. if (!groupId) throw {httpStatus: 406, message: "Missing fields: group_id."};
  452. if (!keyword) throw {httpStatus: 406, message: "Missing fields: keyword."};
  453. if (!type) throw {httpStatus: 406, message: "Missing fields: type."};
  454. let search = new Search();
  455. controllerUtil.regModelEventHandler(search, res);
  456. search.searchAboutPatientList(userId, keyword,groupId,type);
  457. });
  458. /**
  459. * http://192.168.131.107:3000/api/v1/chats/search/patient/all?user_id=D2016008240003&keyword=f&type=2&user_role=3
  460. * 患者消息查询查看更多
  461. */
  462. router.get(APIv1.Chats.SearchAbountPatientMore, function (req, res) {
  463. var userId = req.query.user_id;
  464. var keyword = req.query.keyword;
  465. var type = req.query.type;
  466. var userRole= req.query.user_role;
  467. if (!userId) throw {httpStatus: 406, message: "Missing fields: user_id."};
  468. if (!keyword) throw {httpStatus: 406, message: "Missing fields: keyword."};
  469. if (!type) throw {httpStatus: 406, message: "Missing fields: type."};
  470. if (!userRole) throw {httpStatus: 406, message: "Missing fields: userRole."};
  471. let search = new Search();
  472. controllerUtil.regModelEventHandler(search, res);
  473. search.searchAboutPatientAll(userId,userRole, keyword,type);
  474. });
  475. /**
  476. * 搜索医生相关的数据,包括医生信息与相关的聊天记录,包括私信与群信。
  477. *
  478. * 请求URL:
  479. * /search/doctor?user_id=D2016008240003&keyword=黄
  480. *
  481. * 参数:
  482. * keywords: 关键词
  483. */
  484. router.get(APIv1.Chats.SearchAboutDoctor, function (req, res) {
  485. let userId = req.query.user_id;
  486. let keyword = req.query.keyword;
  487. if (!userId) throw {httpStatus: 406, message: "Missing fields: user_id."};
  488. if (!keyword) throw {httpStatus: 406, message: "Missing fields: keyword."};
  489. let search = new Search();
  490. controllerUtil.regModelEventHandler(search, res);
  491. search.searchAboutDoctor(userId, keyword);
  492. });
  493. /**
  494. * http://192.168.131.107:3000/api/v1/chats/search/doctor/list?user_id=D2016008240003&keyword=%E9%BB%84&type=2
  495. * 医生搜索查看更多
  496. * type = 1 查询聊过的医生
  497. * type = 2 查询群组标题和人员包含的群聊
  498. * type = 3 查询聊天关键字
  499. */
  500. router.get(APIv1.Chats.SearchAboutDoctorList, function (req, res) {
  501. let userId = req.query.user_id;
  502. let keyword = req.query.keyword;
  503. let type = req.query.type;
  504. if (!userId) throw {httpStatus: 406, message: "Missing fields: user_id."};
  505. if (!keyword) throw {httpStatus: 406, message: "Missing fields: keyword."};
  506. if (!type) throw {httpStatus: 406, message: "Missing fields: type."};
  507. let search = new Search();
  508. controllerUtil.regModelEventHandler(search, res);
  509. search.searchDoctorMore(userId, keyword,type);
  510. });
  511. /**
  512. * 查询医生聊天记录详情(单个聊天记录包含关键字的)
  513. *http://192.168.131.107:3000/api/v1/chats/search/doctor/content/list?user_id=D2016008240003&keyword=f&type=2&groupcode=0381288df51b434795b6946bb63d90b8
  514. */
  515. router.get(APIv1.Chats.SearchAbountDoctorContentDetail, function (req, res) {
  516. let userId = req.query.user_id;
  517. let keyword = req.query.keyword;
  518. let type = req.query.type;
  519. let groupcode = req.query.groupcode;
  520. if (!userId) throw {httpStatus: 406, message: "Missing fields: user_id."};
  521. if (!keyword) throw {httpStatus: 406, message: "Missing fields: keyword."};
  522. if (!type) throw {httpStatus: 406, message: "Missing fields: type."};
  523. if (!groupcode) throw {httpStatus: 406, message: "Missing fields: groupcode."};
  524. let search = new Search();
  525. controllerUtil.regModelEventHandler(search, res);
  526. search.searchDoctorContentDetail(userId, keyword,groupcode,type);
  527. });
  528. /**
  529. * 获取单条消息。
  530. *
  531. * URL:
  532. * /chats/message?id=1234&type=1
  533. */
  534. router.get(APIv1.Chats.Message, function (req, res) {
  535. let messageId = req.query.id;
  536. let messageType = req.query.type;
  537. let doctor = new Doctor();
  538. controllerUtil.regModelEventHandler(doctor, res);
  539. doctor.getMessage(messageId, messageType);
  540. });
  541. /**
  542. * 判断当前会话是否已经结束。
  543. *
  544. * 请求URL:
  545. * /chats/pm/finished?user_id=sand&peer_id=rose
  546. */
  547. router.get(APIv1.Chats.PMFinished, function (req, res) {
  548. let doctorId = req.query.doctor_id;
  549. let patientId = req.query.patient_id;
  550. if (!doctorId) {
  551. throw {httpStatus: 406, message: "Missing field: doctor_id"};
  552. }
  553. if (!patientId) {
  554. throw {httpStatus: 406, message: "Missing field: patient_id"};
  555. }
  556. let doctor = new Doctor();
  557. controllerUtil.regModelEventHandler(doctor, res);
  558. doctor.isConsultFinished(doctorId, patientId);
  559. });
  560. module.exports = router;