maintain.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. 'use strict';
  2. /**
  3. * 系统维护数据模型
  4. *
  5. * @author CaiAoLin
  6. * @date 2017/10/25
  7. * @version
  8. */
  9. const maintainConst = require('../const/maintain');
  10. module.exports = app => {
  11. class Maintain extends app.BaseService {
  12. /**
  13. * 构造函数
  14. *
  15. * @param {Object} ctx - egg全局变量
  16. * @return {void}
  17. */
  18. constructor(ctx) {
  19. super(ctx);
  20. this.tableName = 'maintain';
  21. }
  22. /**
  23. * 校验规则
  24. *
  25. * @return {Object} - 返回校验规则
  26. */
  27. rule() {
  28. return {
  29. maintain_time: { type: 'string', required: true, allowEmpty: false },
  30. duration: { type: 'string', required: true, allowEmpty: false, min: 1 },
  31. msg: { type: 'string', required: false, allowEmpty: true },
  32. };
  33. }
  34. async stop(id = 1) {
  35. const data = {};
  36. data.id = id;
  37. data.status = maintainConst.status.notset;
  38. data.maintain_time = '';
  39. const operate = await this.db.update(this.tableName, data);
  40. return operate.affectedRows > 0;
  41. }
  42. /**
  43. * 保存数据
  44. *
  45. * @param {Object} data - post过来的数据
  46. * @param {Number} id - 用于判断修改还是新增的id
  47. * @return {boolean} - 操作结果
  48. */
  49. async save(data = {}, id = 1) {
  50. delete data._csrf;
  51. data.maintain_time = Date.parse(data.maintain_time);
  52. let status = maintainConst.status.notset;
  53. const thisTime = new Date().getTime();
  54. if (data.maintain_time) {
  55. const endtime = data.maintain_time + await this.durationAddTime(data.duration);
  56. if (endtime <= thisTime) {
  57. throw '维护时间必须大于或等于当前时间';
  58. } else if (data.maintain_time > thisTime) {
  59. status = maintainConst.status.unstart;
  60. } else if (data.maintain_time <= thisTime && endtime > thisTime) {
  61. status = maintainConst.status.ongoing;
  62. }
  63. }
  64. data.id = id;
  65. data.status = status;
  66. const operate = await this.db.update(this.tableName, data);
  67. return operate.affectedRows > 0;
  68. }
  69. /**
  70. * 同步系统设置消息
  71. * @param id
  72. * @returns {Promise<boolean>}
  73. */
  74. async syncMaintainData(id = 1) {
  75. let result = false;
  76. try {
  77. const maintainData = await this.getDataById(id);
  78. let status = maintainConst.status.notset;
  79. const thisTime = new Date().getTime();
  80. if (maintainData.maintain_time !== '') {
  81. maintainData.maintain_time = parseFloat(maintainData.maintain_time);
  82. if (maintainData.status === maintainConst.status.unstart && maintainData.maintain_time <= thisTime && maintainData.duration === maintainConst.duration.forever) {
  83. status = maintainConst.status.ongoing;
  84. } else if (maintainData.status !== maintainConst.status.notset && maintainData.duration !== maintainConst.duration.forever) {
  85. const mttime = maintainData.maintain_time + await this.durationAddTime(maintainData.duration);
  86. if (maintainData.maintain_time > thisTime) {
  87. status = maintainConst.status.unstart;
  88. } else if (maintainData.maintain_time <= thisTime && mttime > thisTime) {
  89. status = maintainConst.status.ongoing;
  90. }
  91. }
  92. }
  93. if (maintainData.status === status) {
  94. return true;
  95. }
  96. const data = {};
  97. data.id = id;
  98. data.status = status;
  99. if (status === maintainConst.status.notset) {
  100. data.maintain_time = '';
  101. }
  102. const operate = this.db.update(this.tableName, data);
  103. result = operate.affectedRows > 0;
  104. } catch (error) {
  105. console.log(error);
  106. result = false;
  107. }
  108. return result;
  109. }
  110. async durationAddTime(duration) {
  111. const d = parseInt(duration);
  112. let time = 0;
  113. if (d === maintainConst.duration.min15) {
  114. time = 60 * 15 * 1000;
  115. } else if (d === maintainConst.duration.min30) {
  116. time = 60 * 30 * 1000;
  117. } else if (d === maintainConst.duration.hour1) {
  118. time = 3600 * 1000;
  119. } else if (d === maintainConst.duration.hour2) {
  120. time = 3600 * 2 * 1000;
  121. }
  122. return time;
  123. }
  124. }
  125. return Maintain;
  126. };