diff --git a/api/controllers/ApiController.js b/api/controllers/ApiController.js index cdf969e..08738ed 100644 --- a/api/controllers/ApiController.js +++ b/api/controllers/ApiController.js @@ -1,81 +1,105 @@ 'use strict'; +const util = require('util'); var mysql = require('mysql'); -const random = require('random'); -var fs = require("fs"); -var check; -var con = mysql.createConnection({ +var fs = require('fs'); +const config = { host: "localhost", user: "root", password: "", database: "intops" -}); +}; - - -// console.log(sql_levenshtein_cmd); -con.connect(function (err) { - if (err) throw err; - console.log("Connected!!!") -}); +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) { - var sql_cmd = "SELECT * FROM vehicle WHERE plate=\"" + req.body.plate + "\""; - var sql_query_cmd = "select * from vehicle where levenshtein('" + req.body.plate + "',`plate`) BETWEEN 0 AND 2"; console.log("req: ", req.body.plate); - con.connect(function (err) { - // if (err) - // throw err; - if (check != req.body.plate) { - con.query(sql_query_cmd, function (err, result, fields) { - console.log("levenshtein"); - console.log(result); - var result_vehicle_id; - var sql_insert_logs_cmd, sql_insert_logs_unknow_cmd; - //if levenshtein not found plate - if (result == "") { - console.log("Nothing to show"); - //timestamp in seconds - var today = new Date(); - var currentTimeInInt = Math.round(today.getTime() / 1000); - sql_insert_logs_unknow_cmd = "INSERT INTO logs_unknow(`id`,`plate`,`plate_image_in`,`frame_image_in`,`time_in`,`plate_image_out`,`frame_image_out`,`time_out`,`seal_no`,`note`,`factory`) VALUES (" + random.int(1, 1000) + ",'" + req.body.plate + "','1','1'," + currentTimeInInt + ",'1','1',11,'1','1','1')"; - con.query(sql_insert_logs_unknow_cmd, function (err, result, fields) { - if (err) - throw err; - }); - console.log("Log unknown done"); - } + 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 levenshtein found plate - else { - console.log("Log to logs table"); - //get vehicle id in vehicle table - con.query("SELECT id FROM vehicle where `plate`='" + result[0].plate + "'", function (err, result_vehicle_id) { - if (err) - throw err; - console.log("result_vehicle_id"); - console.log(result_vehicle_id[0].id); - var today = new Date(); - var currentTimeInInt = Math.round(today.getTime() / 1000); - sql_insert_logs_cmd = "INSERT INTO logs(`id`,`vehicle_id`,`plate_image_in`,`frame_image_in`,`time_in`,`plate_image_out`,`frame_image_out`,`time_out`,`seal_no`,`note`,`factory`) VALUES (" + random.int(1, 1000) + "," + result_vehicle_id[0].id + ",'1','1'," + currentTimeInInt + ",'1','1',11,'1','1','1')"; - con.query(sql_insert_logs_cmd, function (err, result, fields) { - if (err) - throw err; - console.log("Log done"); - }); - }); - } - }); - const base64Image = req.body.plate_image; - const imageBuffer = new Buffer(base64Image, "base64"); - fs.writeFileSync("image.jpg", imageBuffer); - console.log("wrote image"); - check = req.body.plate; + 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 + ")"); } - else { - console.log("conflic plate"); + 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 + ")"); + } } - }); - - res.send({ "status": "Done!" }); -}; + } 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); +}; \ No newline at end of file diff --git a/api/routes/ApiRoutes.js b/api/routes/ApiRoutes.js index fca9a45..5928d33 100644 --- a/api/routes/ApiRoutes.js +++ b/api/routes/ApiRoutes.js @@ -3,5 +3,5 @@ module.exports = function (app) { var Api = require('../controllers/ApiController'); - app.route('/logs').post(Api.SaveLogs); + app.route('/logs').post(Api.SaveLogs); }; diff --git a/package.json b/package.json index 7f97a7c..af2a58a 100644 --- a/package.json +++ b/package.json @@ -8,11 +8,7 @@ }, "dependencies": { "cookie-parser": "^1.4.3", - "cors": "^2.8.5", - "express": "^4.17.1", - "jsonwebtoken": "^8.5.1", - "mysql": "^2.18.1", - "random": "^2.1.1", + "express": "^4.13.3", "socket.io": "^2.1.1" }, "engines": {