270 lines
9.6 KiB
JavaScript
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; |