| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 | '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<boolean>}         */        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;};
 |