'use strict'; const util = require('util'); var mysql = require('mysql'); var fs = require('fs'); const config = { host: "localhost", user: "root", password: "", database: "intops" }; function makeDb(config) { const connection = mysql.createConnection(config); return { query(sql, args) { return util.promisify(connection.query) .call(connection, sql, args); }, close() { return util.promisify(connection.end).call(connection); } }; } exports.SaveLogs = async function (req, res) { console.log("req: ", req.body.plate); var today = new Date(); var currentDate = today.getDate(); var currentMonth = today.getMonth() + 1; var currentYear = today.getFullYear(); var rootDir = "/mnt/c/xampp/htdocs/AIParking_Intops_Server/web/data/uploads/"; if (!fs.existsSync(rootDir + currentYear)) fs.mkdirSync(rootDir + currentYear); if (!fs.existsSync(rootDir + currentYear + "/" + currentMonth)) fs.mkdirSync(rootDir + currentYear + "/" + currentMonth); if (!fs.existsSync(rootDir + currentYear + "/" + currentMonth + "/" + currentDate)) fs.mkdirSync(rootDir + currentYear + "/" + currentMonth + "/" + currentDate); if (!fs.existsSync(rootDir + currentYear + "/" + currentMonth + "/" + currentDate + "/" + req.body.type)) fs.mkdirSync(rootDir + currentYear + "/" + currentMonth + "/" + currentDate + "/" + req.body.type); if (!fs.existsSync(rootDir + currentYear + "/" + currentMonth + "/" + currentDate + "/" + req.body.type + "/plate")) fs.mkdirSync(rootDir + currentYear + "/" + currentMonth + "/" + currentDate + "/" + req.body.type + "/plate"); if (!fs.existsSync(rootDir + currentYear + "/" + currentMonth + "/" + currentDate + "/" + req.body.type + "/frame")) fs.mkdirSync(rootDir + currentYear + "/" + currentMonth + "/" + currentDate + "/" + req.body.type + "/frame"); var currentTimestamp = Math.round(today.getTime() / 1000); var fileName = req.body.plate + "_" + currentTimestamp + ".png"; var plateSaved = currentYear + "/" + currentMonth + "/" + currentDate + "/" + req.body.type + "/plate/" + fileName; var frameSaved = currentYear + "/" + currentMonth + "/" + currentDate + "/" + req.body.type + "/frame/" + fileName; await fs.writeFileSync(rootDir + plateSaved, req.body.plate_image, 'base64'); await fs.writeFileSync(rootDir + frameSaved, req.body.frame_image, 'base64'); const db = makeDb(config); var vehicleInfo = {"status": false}; var query_plate_raw = await db.query("SELECT * FROM vehicle WHERE plate='" + req.body.plate + "'"); if (query_plate_raw.length > 0) { vehicleInfo = {"status": true, "data": query_plate_raw[0]}; if (req.body.type == "in") { await db.query("INSERT INTO logs(`vehicle_id`,`plate_image_in`,`frame_image_in`,`time_in`) VALUES ('" + query_plate_raw[0].id + "','" + plateSaved + "','" + frameSaved + "'," + currentTimestamp + ")"); } if (req.body.type == "out") { var checkIn = await db.query("SELECT * FROM logs WHERE vehicle_id=" + query_plate_raw[0].id + " AND time_out=0 ORDER BY time_in DESC LIMIT 0,1"); if (checkIn.length > 0) { await db.query("UPDATE logs SET `plate_image_out`='" + plateSaved + "',`frame_image_out`='" + frameSaved + "',`time_out`=" + currentTimestamp + " WHERE id=" + checkIn[0].id); } else { await db.query("INSERT INTO logs(`vehicle_id`,`plate_image_out`,`frame_image_out`,`time_out`) VALUES ('" + query_plate_raw[0].id + "','" + plateSaved + "','" + frameSaved + "'," + currentTimestamp + ")"); } } } else { var query_plate_levenshtein = await db.query("SELECT * FROM `vehicle` WHERE levenshtein('" + req.body.plate + "', `plate`) BETWEEN 0 AND 2 LIMIT 0,1"); if (query_plate_levenshtein.length > 0) { vehicleInfo = {"status": true, "data": query_plate_levenshtein[0]}; if (req.body.type == "in") { await db.query("INSERT INTO logs(`vehicle_id`,`plate_image_in`,`frame_image_in`,`time_in`) VALUES ('" + query_plate_levenshtein[0].id + "','" + plateSaved + "','" + frameSaved + "'," + currentTimestamp + ")"); } if (req.body.type == "out") { var checkIn = await db.query("SELECT * FROM logs WHERE vehicle_id=" + query_plate_levenshtein[0].id + " AND time_out=0 ORDER BY time_in DESC LIMIT 0,1"); if (checkIn.length > 0) { await db.query("UPDATE logs SET `plate_image_out`='" + plateSaved + "',`frame_image_out`='" + frameSaved + "',`time_out`=" + currentTimestamp + " WHERE id=" + checkIn[0].id); } else { await db.query("INSERT INTO logs(`vehicle_id`,`plate_image_out`,`frame_image_out`,`time_out`) VALUES ('" + query_plate_levenshtein[0].id + "','" + plateSaved + "','" + frameSaved + "'," + currentTimestamp + ")"); } } } else { if (req.body.type == "in") { await db.query("INSERT INTO logs_unknow(`plate`,`plate_image_in`,`frame_image_in`,`time_in`) VALUES ('" + req.body.plate + "','" + plateSaved + "','" + frameSaved + "'," + currentTimestamp + ")"); } if (req.body.type == "out") { var checkIn_raw = await db.query("SELECT * FROM logs_unknow WHERE plate=" + req.body.plate + " AND time_out=0 ORDER BY time_in DESC LIMIT 0,1"); if (checkIn_raw.length > 0) { await db.query("UPDATE logs_unknow SET `plate_image_out`='" + plateSaved + "',`frame_image_out`='" + frameSaved + "',`time_out`=" + currentTimestamp + " WHERE id=" + checkIn_raw[0].id); } else { var checkIn_levenshtein = await db.query("SELECT * FROM `logs_unknow` WHERE levenshtein('" + req.body.plate + "', `plate`) BETWEEN 0 AND 2 AND time_out=0 ORDER BY time_in DESC LIMIT 0,1"); if (checkIn_levenshtein.length > 0) { await db.query("UPDATE logs_unknow SET `plate_image_out`='" + plateSaved + "',`frame_image_out`='" + frameSaved + "',`time_out`=" + currentTimestamp + " WHERE id=" + checkIn_levenshtein[0].id); } else { await db.query("INSERT INTO logs_unknow(`plate`,`plate_image_out`,`frame_image_out`,`time_out`) VALUES ('" + req.body.plate + "','" + plateSaved + "','" + frameSaved + "'," + currentTimestamp + ")"); } } } } } res.send(vehicleInfo); };