push.job.loader.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /**
  2. * 推送消息加载器。应用启动时使用此加载器将将来需要推送的消息加入消息调度中。
  3. *
  4. * author: Sand
  5. * since: 2016/11/28
  6. */
  7. "use strict";
  8. let Schedule = require('./schedule');
  9. let Doctor = require("../user/doctor.js");
  10. const nmRepo = require('../../repository/mysql/notify.msg.repo');
  11. const doctorRepo = require('../../repository/mysql/doctor.repo');
  12. const log = require("../../util/log.js");
  13. class PushJobLoader{
  14. constructor(){}
  15. static load(){
  16. nmRepo.findUnpushedMessages(function (err, rows) {
  17. if(err){
  18. log.error('Load schedule jobs failed: ', err);
  19. return;
  20. }
  21. for(let i = 0; i < rows.length; ++i){
  22. let row = rows[i];
  23. let delay = new Date(Date.parse(row.delay));
  24. let userId = row.to_uid;
  25. let title = row.title;
  26. let contentType = row.type;
  27. let content = row.content;
  28. let notifyMessage = row.data;
  29. Schedule.dateSchedule(delay, function (userId, title, contentType, content, notifyMessage) {
  30. doctorRepo.getUserStatus(userId, function (err, result) {
  31. if(err) {
  32. log.error('Get user status failed in schedule: ', err);
  33. return;
  34. }
  35. if(result.length > 0){
  36. let userStatus = result[0];
  37. Doctor.pushToClient(userId, userStatus.client_id, userStatus.status, userStatus.token, contentType,
  38. title, content, notifyMessage, userStatus.platform, function (err, result) {
  39. if (err != null) {
  40. log.error(err);
  41. } else {
  42. log.info(result);
  43. }
  44. });
  45. } else {
  46. log.warn('User is not online, scheduled pushing job omitted.');
  47. }
  48. })
  49. }.bind(null, userId, title, contentType, content, notifyMessage));
  50. }
  51. });
  52. }
  53. }
  54. module.exports = PushJobLoader;