maintain.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. * @param id
  25. * @returns {Promise<boolean>}
  26. */
  27. async syncMaintainData(id = 1) {
  28. let result = false;
  29. try {
  30. const maintainData = await this.getDataById(id);
  31. let status = maintainConst.status.notset;
  32. const thisTime = new Date().getTime();
  33. if (maintainData.maintain_time !== '') {
  34. maintainData.maintain_time = parseFloat(maintainData.maintain_time);
  35. if (maintainData.status !== maintainConst.status.notset && maintainData.maintain_time <= thisTime && maintainData.duration === maintainConst.duration.forever) {
  36. status = maintainConst.status.ongoing;
  37. } else if (maintainData.status !== maintainConst.status.notset) {
  38. const mttime = maintainData.maintain_time + await this.durationAddTime(maintainData.duration);
  39. if (maintainData.maintain_time > thisTime) {
  40. status = maintainConst.status.unstart;
  41. } else if (maintainData.maintain_time <= thisTime && mttime > thisTime) {
  42. status = maintainConst.status.ongoing;
  43. }
  44. }
  45. }
  46. if (maintainData.status === status) {
  47. if (status === maintainConst.status.ongoing && this.ctx.session !== null) {
  48. this.ctx.session = null;
  49. throw '系统维护中~';
  50. }
  51. return true;
  52. }
  53. const data = {};
  54. data.id = id;
  55. data.status = status;
  56. if (status === maintainConst.status.notset) {
  57. data.maintain_time = '';
  58. }
  59. const operate = this.db.update(this.tableName, data);
  60. if (status === maintainConst.status.ongoing && this.ctx.session !== null) {
  61. this.ctx.session = null;
  62. throw '系统维护中~';
  63. }
  64. result = operate.affectedRows > 0;
  65. } catch (error) {
  66. console.log(error);
  67. result = false;
  68. }
  69. return result;
  70. }
  71. async durationAddTime(duration) {
  72. const d = parseInt(duration);
  73. let time = 0;
  74. if (d === maintainConst.duration.min15) {
  75. time = 60 * 15 * 1000;
  76. } else if (d === maintainConst.duration.min30) {
  77. time = 60 * 30 * 1000;
  78. } else if (d === maintainConst.duration.hour1) {
  79. time = 3600 * 1000;
  80. } else if (d === maintainConst.duration.hour2) {
  81. time = 3600 * 2 * 1000;
  82. }
  83. return time;
  84. }
  85. }
  86. return Maintain;
  87. };