notify.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. 'use strict';
  2. /**
  3. * 用户通知相关数据模型
  4. *
  5. * @author CaiAoLin
  6. * @date 2017/11/22
  7. * @version
  8. */
  9. module.exports = app => {
  10. class Notify extends app.BaseService {
  11. /**
  12. * 构造函数
  13. *
  14. * @param {Object} ctx - egg全局变量
  15. * @return {void}
  16. */
  17. constructor(ctx) {
  18. super(ctx);
  19. this.tableName = 'notify';
  20. }
  21. /**
  22. * 同步当前用户的通知数据
  23. *
  24. * @return {Boolean}
  25. */
  26. async syncNotifyData() {
  27. let result = false;
  28. // 获取session中的数据
  29. const sessionUser = this.ctx.session.sessionUser;
  30. if (sessionUser === null || sessionUser === undefined) {
  31. return result;
  32. }
  33. try {
  34. // 获取当前用户最后一条数据
  35. const condition = {
  36. where: { uid: sessionUser.accountId, type: sessionUser.loginType },
  37. orders: [['id', 'DESC']],
  38. limit: 1,
  39. };
  40. const lastData = await this.db.select(this.tableName, condition);
  41. const lastMessageTime = lastData.length <= 0 ? 0 : lastData[0].create_time;
  42. // 获取后台设置的消息数据
  43. const messageData = await this.ctx.service.message.getMessage(lastMessageTime);
  44. // 如果已经是最新的消息则直接返回
  45. if (messageData.length <= 0) {
  46. return true;
  47. }
  48. // 新增通知数据
  49. const currentTime = new Date().getTime() / 1000;
  50. const insertData = [];
  51. for (const message of messageData) {
  52. const tmp = {
  53. mid: message.id,
  54. create_time: currentTime,
  55. uid: sessionUser.accountId,
  56. type: sessionUser.loginType,
  57. };
  58. insertData.push(tmp);
  59. }
  60. const operate = this.db.insert(this.tableName, insertData);
  61. result = operate.affectedRows > 0;
  62. } catch (error) {
  63. console.log(error);
  64. result = false;
  65. }
  66. return result;
  67. }
  68. }
  69. return Notify;
  70. };