MASTER_4943-osticket_closeTicket #1242

Merged
joan merged 7 commits from MASTER_4943-osticket_closeTicket into master 2023-01-12 07:41:08 +00:00
1 changed files with 44 additions and 49 deletions
Showing only changes of commit 8f81aa2eeb - Show all commits

View File

@ -25,10 +25,10 @@ module.exports = Self => {
return false; return false;
const con = mysql.createConnection({ const con = mysql.createConnection({
host: config.hostDb, host: `${config.hostDb}`,
user: config.userDb, user: `${config.userDb}`,
password: config.passwordDb, password: `${config.passwordDb}`,
port: config.portDb port: `${config.portDb}`
}); });
const sql = `SELECT ot.ticket_id, ot.number const sql = `SELECT ot.ticket_id, ot.number
@ -38,23 +38,23 @@ module.exports = Self => {
JOIN ( JOIN (
SELECT ote.thread_id, MAX(ote.created) created, MAX(ote.updated) updated SELECT ote.thread_id, MAX(ote.created) created, MAX(ote.updated) updated
FROM osticket.ost_thread_entry ote FROM osticket.ost_thread_entry ote
WHERE ote.staff_id AND ote.type = 'R' WHERE ote.staff_id != 0 AND ote.type = 'R'
GROUP BY ote.thread_id GROUP BY ote.thread_id
) sub ON sub.thread_id = ot2.id ) sub ON sub.thread_id = ot2.id
WHERE ot.isanswered WHERE ot.isanswered = 1
AND ots.state = ? AND ots.state = '${config.oldStatus}'
AND IF(sub.updated > sub.created, sub.updated, sub.created) < DATE_SUB(CURDATE(), INTERVAL ? DAY)`; AND IF(sub.updated > sub.created, sub.updated, sub.created) < DATE_SUB(CURDATE(), INTERVAL ${config.day} DAY)`;
const ticketsId = []; let ticketsId = [];
con.connect(err => { con.connect(err => {
if (err) throw err; if (err) throw err;
con.query(sql, [config.oldStatus, config.day], con.query(sql, (err, results) => {
(err, results) => {
if (err) throw err; if (err) throw err;
for (const result of results) for (const result of results)
ticketsId.push(result.ticket_id); ticketsId.push(result.ticket_id);
}); });
}); });
await getRequestToken(); await getRequestToken();
async function getRequestToken() { async function getRequestToken() {
@ -94,10 +94,26 @@ module.exports = Self => {
await close(token, secondCookie); await close(token, secondCookie);
} }
async function getLockCode(token, secondCookie, ticketId) {
const ostUri = `${config.host}/ajax.php/lock/ticket/${ticketId}`;
const params = {
method: 'POST',
headers: {
'X-CSRFToken': token,
'Cookie': secondCookie
}
};
const response = await fetch(ostUri, params);
const body = await response.text();
const json = JSON.parse(body);
return json.code || json.retry;
}
async function close(token, secondCookie) { async function close(token, secondCookie) {
for (const ticketId of ticketsId) { for (const ticketId of ticketsId) {
try {
const lockCode = await getLockCode(token, secondCookie, ticketId); const lockCode = await getLockCode(token, secondCookie, ticketId);
if (lockCode == false) continue;
let form = new FormData(); let form = new FormData();
form.append('__CSRFToken__', token); form.append('__CSRFToken__', token);
form.append('id', ticketId); form.append('id', ticketId);
@ -118,29 +134,8 @@ module.exports = Self => {
'Cookie': secondCookie 'Cookie': secondCookie
} }
}; };
await fetch(ostUri, params); return fetch(ostUri, params);
} catch (e) {
const err = new Error(`${ticketId} Ticket close failed: ${e.message}`);
err.stack += e.stack;
throw err;
} }
} }
}
async function getLockCode(token, secondCookie, ticketId) {
const ostUri = `${config.host}/ajax.php/lock/ticket/${ticketId}`;
const params = {
method: 'POST',
headers: {
'X-CSRFToken': token,
'Cookie': secondCookie
}
};
const response = await fetch(ostUri, params);
const body = await response.text();
const json = JSON.parse(body);
return json.code;
}
}; };
}; };