123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- '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';
- }
- /**
- * 校验规则
- *
- * @return {Object} - 返回校验规则
- */
- rule() {
- return {
- maintain_time: { type: 'string', required: true, allowEmpty: false },
- duration: { type: 'string', required: true, allowEmpty: false, min: 1 },
- msg: { type: 'string', required: false, allowEmpty: true },
- };
- }
- async stop(id = 1) {
- const data = {};
- data.id = id;
- data.status = maintainConst.status.notset;
- data.maintain_time = '';
- const operate = await this.db.update(this.tableName, data);
- return operate.affectedRows > 0;
- }
- /**
- * 保存数据
- *
- * @param {Object} data - post过来的数据
- * @param {Number} id - 用于判断修改还是新增的id
- * @return {boolean} - 操作结果
- */
- async save(data = {}, id = 1) {
- delete data._csrf;
- data.maintain_time = Date.parse(data.maintain_time);
- let status = maintainConst.status.notset;
- const thisTime = new Date().getTime();
- if (data.maintain_time) {
- const endtime = data.maintain_time + await this.durationAddTime(data.duration);
- if (endtime <= thisTime) {
- throw '维护时间必须大于或等于当前时间';
- } else if (data.maintain_time > thisTime) {
- status = maintainConst.status.unstart;
- } else if (data.maintain_time <= thisTime && endtime > thisTime) {
- status = maintainConst.status.ongoing;
- }
- }
- data.id = id;
- data.status = status;
- const operate = await this.db.update(this.tableName, data);
- return operate.affectedRows > 0;
- }
- /**
- * 同步系统设置消息
- * @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.unstart && maintainData.maintain_time <= thisTime && maintainData.duration === maintainConst.duration.forever) {
- status = maintainConst.status.ongoing;
- } else if (maintainData.status !== maintainConst.status.notset && maintainData.duration !== maintainConst.duration.forever) {
- 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) {
- 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);
- 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;
- };
|