message.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. 'use strict';
  2. /**
  3. * 消息数据模型
  4. *
  5. * @author CaiAoLin
  6. * @date 2017/11/23
  7. * @version
  8. */
  9. module.exports = app => {
  10. class Message extends app.BaseService {
  11. /**
  12. * 构造函数
  13. *
  14. * @param {Object} ctx - egg全局变量
  15. * @return {void}
  16. */
  17. constructor(ctx) {
  18. super(ctx);
  19. this.tableName = 'message';
  20. }
  21. /**
  22. * 规则
  23. *
  24. * @return {Object} - 返回规则
  25. */
  26. rule() {
  27. return {
  28. title: { type: 'string', required: true, allowEmpty: false },
  29. content: { type: 'string', required: false, allowEmpty: true },
  30. istop: { type: 'string', required: false, allowEmpty: true },
  31. };
  32. }
  33. /**
  34. * 查询过虑
  35. *
  36. * @param {Object} data - 筛选表单中的get数据
  37. * @return {void}
  38. */
  39. searchFilter(data, project_id) {
  40. this.initSqlBuilder();
  41. // 状态筛选
  42. data.type = parseInt(data.type);
  43. data.type = isNaN(data.type) || data.type <= 0 ? 1 : data.type;
  44. // 获取用户数据
  45. this.sqlBuilder.setAndWhere('type', {
  46. value: data.type,
  47. operate: '=',
  48. });
  49. this.sqlBuilder.setAndWhere('project_id', {
  50. value: project_id,
  51. operate: '=',
  52. });
  53. }
  54. /**
  55. * 获取消息数据
  56. *
  57. * @param {Number} startTime - 时间标记位(获取这个时间点之后的数据)
  58. * @return {Array} - 返回消息数据
  59. */
  60. async getMessage(startTime, project_id) {
  61. this.initSqlBuilder();
  62. this.sqlBuilder.setAndWhere('release_time', {
  63. value: startTime,
  64. operate: '>=',
  65. });
  66. // 获取用户数据
  67. this.sqlBuilder.setAndWhere('project_id', {
  68. value: project_id,
  69. operate: '=',
  70. });
  71. // 获取用户数据
  72. this.sqlBuilder.setAndWhere('type', {
  73. value: 1,
  74. operate: '=',
  75. });
  76. const [sql, sqlParam] = this.sqlBuilder.build(this.tableName);
  77. const result = await this.db.query(sql, sqlParam);
  78. return result;
  79. }
  80. /**
  81. * 修改通知信息
  82. *
  83. * @param {Object} data - post过来的数据
  84. * @return {Boolean} - 返回修改结果
  85. */
  86. async save(id, data, user, projectId) {
  87. if (data._csrf_j !== undefined) {
  88. delete data._csrf_j;
  89. }
  90. if (id > 0) {
  91. // 修改操作时
  92. data.id = id;
  93. const msgInfo = await this.getDataById(id);
  94. data.istop = parseFloat(msgInfo.istop) === 0 && parseInt(data.istop) === 1 ? data.create_time : data.istop === undefined ? 0 : msgInfo.istop;
  95. delete data.create_time;
  96. } else {
  97. data.release_time = data.create_time;
  98. data.project_id = projectId;
  99. data.create_uid = user.accountId;
  100. data.creator = user.name;
  101. data.istop = parseInt(data.istop) === 1 ? data.create_time : 0;
  102. }
  103. const operate = id === 0 ? await this.db.insert(this.tableName, data) :
  104. await this.db.update(this.tableName, data);
  105. const result = operate.affectedRows > 0;
  106. return result;
  107. }
  108. /**
  109. * 修改通知信息
  110. *
  111. * @param {Object} data - post过来的数据
  112. * @return {Boolean} - 返回修改结果
  113. */
  114. async getMsgList(projectId, limit = 5, offset = 0, type = 1) {
  115. if (type === 1) {
  116. const sql = 'SELECT * FROM ?? WHERE `project_id` = ? AND `type` = ? ORDER BY CONCAT(`istop`,`release_time`) DESC LIMIT ?,?';
  117. const sqlParam = [this.tableName, projectId, type, offset, limit];
  118. return await this.db.query(sql, sqlParam);
  119. }
  120. const sql = 'SELECT * FROM ?? WHERE `type` = ? AND `status` = ? ORDER BY `release_time` DESC LIMIT ?,?';
  121. const sqlParam = [this.tableName, type, 1, offset, limit];
  122. return await this.db.query(sql, sqlParam);
  123. }
  124. }
  125. return Message;
  126. };