'use strict'; /** * 系统维护数据模型 * * @author CaiAoLin * @date 2017/10/25 * @version */ const maintainConst = require('../const/maintain'); module.exports = app => { class Maintain extends app.BaseService { /** * 构造函数 * * @param {Object} ctx - egg全局变量 * @return {void} */ constructor(ctx) { super(ctx); this.tableName = 'maintain'; } /** * 同步系统设置消息 * @param id * @returns {Promise} */ async syncMaintainData(id = 1) { let result = false; try { const maintainData = await this.getDataById(id); let status = maintainConst.status.notset; const thisTime = new Date().getTime(); if (maintainData.maintain_time !== '') { maintainData.maintain_time = parseFloat(maintainData.maintain_time); if (maintainData.status !== maintainConst.status.notset && maintainData.maintain_time <= thisTime && maintainData.duration === maintainConst.duration.forever) { status = maintainConst.status.ongoing; } else if (maintainData.status !== maintainConst.status.notset) { const mttime = maintainData.maintain_time + await this.durationAddTime(maintainData.duration); if (maintainData.maintain_time > thisTime) { status = maintainConst.status.unstart; } else if (maintainData.maintain_time <= thisTime && mttime > thisTime) { status = maintainConst.status.ongoing; } } } if (maintainData.status === status) { if (status === maintainConst.status.ongoing && this.ctx.session !== null) { this.ctx.session = null; throw '系统维护中~'; } return true; } const data = {}; data.id = id; data.status = status; if (status === maintainConst.status.notset) { data.maintain_time = ''; } const operate = this.db.update(this.tableName, data); if (status === maintainConst.status.ongoing && this.ctx.session !== null) { this.ctx.session = null; throw '系统维护中~'; } result = operate.affectedRows > 0; } catch (error) { console.log(error); result = false; } return result; } async durationAddTime(duration) { const d = parseInt(duration); let time = 0; if (d === maintainConst.duration.min15) { time = 60 * 15 * 1000; } else if (d === maintainConst.duration.min30) { time = 60 * 30 * 1000; } else if (d === maintainConst.duration.hour1) { time = 3600 * 1000; } else if (d === maintainConst.duration.hour2) { time = 3600 * 2 * 1000; } return time; } } return Maintain; };