webio-node/route/api/schedule.js

270 lines
9.6 KiB
JavaScript

const express = require('express');
const router = express.Router();
const rt = require('../ResTool');
const config = require('../../config.json');
const fs = require('fs');
const mysql = require('../../libs/mysql_pool');
const tool = require('../../includes/apiTool');
const exec = require('child_process').exec;
const so = require('../../includes/storeObject');
const crypt = require('../../libs/crypto');
router
.get('/', (req, res) => {
res.send({ name: 'WebIO Schedule API' });
})
.post('*', async(req,res,n) => {
try{
res.db = await mysql.getConn();
}catch(e){
console.log(`Get DB Connection ERROR ${e}`);
return n('ERR8100');
}
n();
})
.post(['/getschedulelist', '/getschedule'], (req, res, n) => {
if (!config.permission.schedule) return n('ERR9000');
let s = false;
let arr = req.body;
if (req.url == '/getschedule') {
s = true;
if (!arr.data) return n('ERR0000');
if (!arr.data.id) return n('ERR0028');
}
let query = "select * from ??.?? ";
let order = " order by `ioscheduleuid` desc ";
let param = [config.db.db1, 'ioschedulet'];
if (s) {
query += " where `ioschedulet` = ? ";
param.push(arr.data.id);
}
res.db.query(query + order, param, (err, row) => {
if (err) return rt.err(res,err,n,'ERR8000');
res.api_res = {
record: tool.checkArray(row),
rt: {
'do': [],
'leone': [],
'iogroup': []
}
};
let dos = [];
let les = [];
let ios = [];
let regex = {
do: /^do([0-9]+)$/,
leone: /^leone([0-9]+)$/,
iogroup: /^iogroup([0-9]+)$/
}
for (let i in row) {
let str = row[i].ioscheduleio;
let t = str.split(',');
if (t.length == 0) continue;
for (let j in t) {
if (regex.do.test(t[j])) {
dos.push(t[j].replace(regex.do, '$1'));
} else if (regex.leone.test(t[j])) {
les.push(t[j].replace(regex.leone, '$1'));
} else if (regex.iogroup.test(t[j])) {
ios.push(t[j].replace(regex.iogroup, '$1'));
}
}
}
let pros = [];
if (dos.length > 0) {
let query = "select * from ??.?? where `douid` in (?)";
let param = [config.db.db1, 'dolist', dos];
pros.push(tool.promiseQuery(res, query, param, 'do'));
}
if (les.length > 0) {
let query = "select * from ??.?? where `leonelistuid` in (?)";
let param = [config.db.db1, 'leonelist', les];
pros.push(tool.promiseQuery(res, query, param, 'leone'));
}
if (ios.length > 0) {
let query = "select * from ??.?? where `iogroupuid` in (?)";
let param = [config.db.db1, 'iogroup', ios];
pros.push(tool.promiseQuery(res, query, param, 'iogroup'));
}
Promise.all(pros)
.then(r => {
for (let i in r) {
if (r[i].key == 'do') {
res.api_res.rt.do = r[i].data;
} else if (r[i].key == 'leone') {
res.api_res.rt.leone = r[i].data;
} else if (r[i].key == 'iogroup') {
res.api_res.rt.iogroup = r[i].data;
}
}
return n();
})
.catch(err => {
return rt.err(res,err,n);
})
});
})
.post('/delschedule', (req, res, n) => {
if (!config.permission.schedule) return n('ERR9000');
if (!tool.checkPermission(req)) return n('ERR9000');
let arr = req.body;
if (!arr.data) return n('ERR0000');
if (!arr.data.id) return n('ERR0028');
let query = "delete from ??.?? where `ioscheduleuid` = ? ";
let param = [config.db.db1, 'ioschedulet', arr.data.id];
res.db.query(query, param, (err, row) => {
if (err) return rt.err(res,err,n,'ERR8003');
res.api_res = {
record: []
};
return n();
});
})
.post('/swschedule', (req, res, n) => {
if (!config.permission.schedule) return n('ERR9000');
if (!tool.checkPermission(req)) return n('ERR9000');
let arr = req.body;
if (!arr.data) return n('ERR0000');
if (!arr.data.id) return n('ERR0028');
// let active = arr.data.active == 1 ? 1 : 0;
let query = "update ??.?? set `ioscheduleactive` = (case when `ioscheduleactive` = '1' then '0' else '1' end) where `ioscheduleuid` = ? ";
let param = [config.db.db1, 'ioschedulet', arr.data.id];
res.db.query(query, param, (err, row) => {
if (err) return rt.err(res,err,n,'ERR8002');
res.api_res = {
record: []
};
return n();
});
})
.post('/addschedule', (req, res, n) => {
if (!config.permission.schedule) return n('ERR9000');
if (!tool.checkPermission(req)) return n('ERR9000');
let arr = req.body;
if (!arr.data) return n('ERR0000');
if (!arr.data.name) return n('ERR0026');
if (!('active' in arr.data)) return n('ERR0032');
if (!arr.data.devs) return n('ERR0029');
if (!arr.data.action) return n('ERR0030');
if (!('min' in arr.data) || !isFinite(arr.data.min) || !(arr.data.min >= 0 && arr.data.min < 60)) return n('ERR0033');
if (!('hour' in arr.data) || !isFinite(arr.data.hour) || !(arr.data.hour >= 0 && arr.data.hour < 24)) return n('ERR0034');
if (!arr.data.week) {
if (!arr.data.day || !isFinite(arr.data.day) || !(arr.data.day > 0 && arr.data.day <= 31)) return n('ERR0035');
if (!arr.data.month || !isFinite(arr.data.month) || !(arr.data.month > 0 && arr.data.month <= 12)) return n('ERR0036');
}
let tmp = arr.data.action.split(',');
if (tmp.length != 2) return n('ERR0030');
let active = arr.data.active == 1 ? 1 : 0;
let d = '';
let m = '';
let w = '';
if (arr.data.week) {
w = arr.data.week;
d = '-';
m = '-';
} else {
w = '-';
d = arr.data.day;
m = arr.data.month;
}
let query = "insert into ??.?? (\
`ioschedulename`, \
`ioscheduleactive`, \
`ioscheduleio`, \
`ioschedulecmd`, \
`ioscheduleparam1`, \
`ioscheduleparam2`, \
`ioscheduleparam3`, \
`ioscheduleparam4`, \
`ioscheduleparam5`, \
`ioschedule_add_date`) values (?,?,?,?,?,?,?,?,?,unix_timestamp())";
let param = [config.db.db1, 'ioschedulet', arr.data.name, active, arr.data.devs, arr.data.action, arr.data.min, arr.data.hour, d, m, w];
res.db.query(query, param, (err, row) => {
if (err) return rt.err(res,err,n,'ERR8001');
res.api_res = {
record: []
};
return n();
});
})
.post('/editschedule', (req,res,n) => {
if(!config.permission.schedule) return n('ERR9000');
if(!tool.checkPermission(req)) return n('ERR9000');
let arr = req.body;
if (!arr.data) return n('ERR0000');
if(!arr.data.id) return n('ERR0028');
if (!arr.data.name) return n('ERR0026');
if (!('active' in arr.data)) return n('ERR0032');
if (!arr.data.devs) return n('ERR0029');
if (!arr.data.action) return n('ERR0030');
if (!('min' in arr.data) || !isFinite(arr.data.min) || !(arr.data.min >= 0 && arr.data.min < 60)) return n('ERR0033');
if (!('hour' in arr.data) || !isFinite(arr.data.hour) || !(arr.data.hour >= 0 && arr.data.hour < 24)) return n('ERR0034');
if (!arr.data.week) {
if (!arr.data.day || !isFinite(arr.data.day) || !(arr.data.day > 0 && arr.data.day <= 31)) return n('ERR0035');
if (!arr.data.month || !isFinite(arr.data.month) || !(arr.data.month > 0 && arr.data.month <= 12)) return n('ERR0036');
}
let tmp = arr.data.action.split(',');
if (tmp.length != 2) return n('ERR0030');
let active = arr.data.active == 1 ? 1 : 0;
let d = '';
let m = '';
let w = '';
if (arr.data.week) {
w = arr.data.week;
d = '-';
m = '-';
} else {
w = '-';
d = arr.data.day;
m = arr.data.month;
}
let query = "update ??.?? set \
`ioschedulename` = ? , \
`ioscheduleactive` = ? , \
`ioscheduleio` = ? , \
`ioschedulecmd` = ? , \
`ioscheduleparam1` = ? , \
`ioscheduleparam2` = ? , \
`ioscheduleparam3` = ? , \
`ioscheduleparam4` = ? , \
`ioscheduleparam5` = ? , \
`ioschedule_add_date` = unix_timestamp() \
where \
`ioscheduleuid` = ?";
let param = [config.db.db1, 'ioschedulet', arr.data.name, active, arr.data.devs, arr.data.action, arr.data.min, arr.data.hour, d, m, w, arr.data.id];
res.db.query(query, param, (err, row) => {
if (err) return rt.err(res,err,n,'ERR8002');
res.api_res = {
record: []
};
return n();
});
})
.all('*', rt.send);
module.exports = router;