maintain.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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. return true;
  48. }
  49. const data = {};
  50. data.id = id;
  51. data.status = status;
  52. if (status === maintainConst.status.notset) {
  53. data.maintain_time = '';
  54. }
  55. const operate = this.db.update(this.tableName, data);
  56. if (status === maintainConst.status.ongoing) {
  57. this.ctx.session = null;
  58. this.ctx.redirect('/');
  59. }
  60. result = operate.affectedRows > 0;
  61. } catch (error) {
  62. console.log(error);
  63. result = false;
  64. }
  65. return result;
  66. }
  67. async durationAddTime(duration) {
  68. const d = parseInt(duration);
  69. let time = 0;
  70. if (d === maintainConst.duration.min15) {
  71. time = 60 * 15 * 1000;
  72. } else if (d === maintainConst.duration.min30) {
  73. time = 60 * 30 * 1000;
  74. } else if (d === maintainConst.duration.hour1) {
  75. time = 3600 * 1000;
  76. } else if (d === maintainConst.duration.hour2) {
  77. time = 3600 * 2 * 1000;
  78. }
  79. return time;
  80. }
  81. }
  82. return Maintain;
  83. };