system.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /**
  2. * 系统消息。
  3. */
  4. "use strict";
  5. let PLATFORMS = require('../include/commons').PLATFORM;
  6. let BaseModel = require('./base.model');
  7. let log = require("../util/log.js");
  8. let modelUtil = require('../util/modelUtil');
  9. let getui = require('getui');
  10. let userRepo = require('../repository/doctor.repo.js');
  11. let smRepo = require("../repository/system.msg.repo.js");
  12. let nmRepo = require("../repository/notify.msg.repo.js");
  13. class SystemMessage extends BaseModel{
  14. constructor() {
  15. super();
  16. }
  17. /**
  18. * 发送消息。
  19. *
  20. * @param message
  21. */
  22. send(message) {
  23. let self = this;
  24. userRepo.getUserStatus(message.to, function (err, rows) {
  25. if (err) {
  26. console.log("Lookup system message receiver failed: ", err);
  27. modelUtil.emitDbError(self.eventEmitter, "Lookup system message receiver failed.", err);
  28. return;
  29. }
  30. if (rows.length == 0) {
  31. modelUtil.emitDataNotFound(self.eventEmitter, "User not found: " + message.to);
  32. return;
  33. }
  34. let userStatus = rows[0];
  35. let isOnline = userStatus.is_online;
  36. let notifyMessage = JSON.stringify({type: 'system_msg', data: message.content});
  37. // 保存该条推送信息
  38. smRepo.save(message.to,
  39. message.contentType,
  40. message.title,
  41. message.summary,
  42. message.content,
  43. function (err, result) {
  44. if (err) {
  45. modelUtil.emitDbError(self.eventEmitter, "Save system notify message failed.", err);
  46. return;
  47. }
  48. // 先通知外层操作已经完成,再处理后续操作。客户可先结束网络连接,减少客户端等待。
  49. modelUtil.emitData(self.eventEmitter, {});
  50. // 保存通知到数据库中
  51. nmRepo.save(message.to,
  52. message.contentType,
  53. message.title,
  54. message.summary,
  55. notifyMessage,
  56. isOnline,
  57. function (err, result) {
  58. if (err) {
  59. modelUtil.logError("Save system notify message failed", err);
  60. return;
  61. }
  62. if (!isOnline) return;
  63. if (userStatus.platform === PLATFORMS.iOS) {
  64. getui.pushAPN(message.to, userStatus.token, message.contentType, message.title, message.content, notifyMessage,
  65. function (err, result) {
  66. err != null ? console.log(err) : console.log(result);
  67. });
  68. } else if (userStatus.platform === PLATFORMS.Android) {
  69. getui.pushAndroid(userStatus.client_id, message.contentType, message.title, message.content, notifyMessage, userStatus.status,
  70. function (err, result) {
  71. err != null ? console.log(err) : console.log(result);
  72. });
  73. }
  74. });
  75. });
  76. });
  77. }
  78. }
  79. module.exports = SystemMessage;