|
@@ -0,0 +1,140 @@
|
|
|
+'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;
|
|
|
+};
|