fix duplicate
This commit is contained in:
parent
e7cfe25ceb
commit
54f9313a8b
|
@ -9,6 +9,15 @@ const config = {
|
||||||
database: "intops"
|
database: "intops"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var currentIn = [];
|
||||||
|
var currentInOther = [];
|
||||||
|
var currentOut = [];
|
||||||
|
var currentOutOther = [];
|
||||||
|
var maxCompare = 5;
|
||||||
|
var maxFalse = 0;
|
||||||
|
var falseIn = 0;
|
||||||
|
var falseOut = 0;
|
||||||
|
|
||||||
function makeDb(config) {
|
function makeDb(config) {
|
||||||
const connection = mysql.createConnection(config);
|
const connection = mysql.createConnection(config);
|
||||||
return {
|
return {
|
||||||
|
@ -57,14 +66,112 @@ function levenshtein(a, b) {
|
||||||
|
|
||||||
return matrix[b.length][a.length];
|
return matrix[b.length][a.length];
|
||||||
}
|
}
|
||||||
const db = makeDb(config);
|
|
||||||
|
|
||||||
var currentIn = [];
|
function isSavePlate(type, timestamp, plate) {
|
||||||
var currentOut = [];
|
if (type === "in") {
|
||||||
var maxCompare = 5;
|
for (var i = 0; i < currentIn.length; i++) {
|
||||||
var maxFalse = 0;
|
if ((timestamp - currentIn[i].time) < 600) {
|
||||||
var falseIn = 0;
|
if (plate === currentIn[i].plate) {
|
||||||
var falseOut = 0;
|
return false;
|
||||||
|
} /*else if (levenshtein(plate, currentIn[i].plate) < 2) {
|
||||||
|
return false;
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (type === "out") {
|
||||||
|
for (var i = 0; i < currentOut.length; i++) {
|
||||||
|
if ((timestamp - currentOut[i].time) < 600) {
|
||||||
|
if (plate === currentOut[i].plate) {
|
||||||
|
return false;
|
||||||
|
} /*else if (levenshtein(plate, currentOut[i].plate) < 2) {
|
||||||
|
return false;
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isSavePlateOther(type, timestamp, plate) {
|
||||||
|
if (type === "in") {
|
||||||
|
for (var i = 0; i < currentInOther.length; i++) {
|
||||||
|
if ((timestamp - currentInOther[i].time) < 600) {
|
||||||
|
if (plate === currentInOther[i].plate) {
|
||||||
|
return false;
|
||||||
|
} else if (levenshtein(plate, currentInOther[i].plate) < 2) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (type === "out") {
|
||||||
|
for (var i = 0; i < currentOutOther.length; i++) {
|
||||||
|
if ((timestamp - currentOutOther[i].time) < 600) {
|
||||||
|
if (plate === currentOutOther[i].plate) {
|
||||||
|
return false;
|
||||||
|
} else if (levenshtein(plate, currentOutOther[i].plate) < 2) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function consoleLogPlate(type, reqPlate, currentPlate, currentTimestamp, saveType) {
|
||||||
|
if (type === "in") {
|
||||||
|
var listsIn = [];
|
||||||
|
for (var i = 0; i < currentIn.length; i++) {
|
||||||
|
listsIn.push(currentIn[i].plate);
|
||||||
|
}
|
||||||
|
console.log("req: ", reqPlate, " ", currentPlate, " ", type, " ", saveType, " ", listsIn);
|
||||||
|
|
||||||
|
if (currentIn.length >= maxCompare) {
|
||||||
|
currentIn.shift();
|
||||||
|
}
|
||||||
|
currentIn.push({"plate": currentPlate, "time": currentTimestamp});
|
||||||
|
}
|
||||||
|
if (type === "out") {
|
||||||
|
var listsOut = [];
|
||||||
|
for (var i = 0; i < currentOut.length; i++) {
|
||||||
|
listsOut.push(currentOut[i].plate);
|
||||||
|
}
|
||||||
|
console.log("req: ", reqPlate, " ", currentPlate, " ", type, " ", saveType, " ", listsOut);
|
||||||
|
if (currentOut.length >= maxCompare) {
|
||||||
|
currentOut.shift();
|
||||||
|
}
|
||||||
|
currentOut.push({"plate": currentPlate, "time": currentTimestamp});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function consoleLogPlateOther(type, reqPlate, currentPlate, currentTimestamp, saveType) {
|
||||||
|
if (type === "in") {
|
||||||
|
var listsIn = [];
|
||||||
|
for (var i = 0; i < currentInOther.length; i++) {
|
||||||
|
listsIn.push(currentInOther[i].plate);
|
||||||
|
}
|
||||||
|
console.log("req: ", reqPlate, " ", currentPlate, " ", type, " ", saveType, " ", listsIn);
|
||||||
|
|
||||||
|
if (currentInOther.length >= maxCompare) {
|
||||||
|
currentInOther.shift();
|
||||||
|
}
|
||||||
|
currentInOther.push({"plate": currentPlate, "time": currentTimestamp});
|
||||||
|
}
|
||||||
|
if (type === "out") {
|
||||||
|
var listsOut = [];
|
||||||
|
for (var i = 0; i < currentOutOther.length; i++) {
|
||||||
|
listsOut.push(currentOutOther[i].plate);
|
||||||
|
}
|
||||||
|
console.log("req: ", reqPlate, " ", currentPlate, " ", type, " ", saveType, " ", listsOut);
|
||||||
|
if (currentOutOther.length >= maxCompare) {
|
||||||
|
currentOutOther.shift();
|
||||||
|
}
|
||||||
|
currentOutOther.push({"plate": currentPlate, "time": currentTimestamp});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const db = makeDb(config);
|
||||||
|
|
||||||
exports.SaveLogs = async function (req, res) {
|
exports.SaveLogs = async function (req, res) {
|
||||||
|
|
||||||
|
@ -90,33 +197,8 @@ exports.SaveLogs = async function (req, res) {
|
||||||
fs.mkdirSync(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 currentTimestamp = Math.round(today.getTime() / 1000);
|
||||||
|
|
||||||
var canSaveLogs = true;
|
|
||||||
var vehicleInfo = {"status": false};
|
var vehicleInfo = {"status": false};
|
||||||
|
|
||||||
if (req.body.type === "in") {
|
|
||||||
for (var i = 0; i < currentIn.length; i++) {
|
|
||||||
if ((currentTimestamp - currentIn[i].time) < 600) {
|
|
||||||
if (req.body.plate === currentIn[i].plate) {
|
|
||||||
canSaveLogs = false;
|
|
||||||
} else if (levenshtein(req.body.plate, currentIn[i].plate) < 2) {
|
|
||||||
canSaveLogs = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (req.body.type === "out") {
|
|
||||||
for (var i = 0; i < currentOut.length; i++) {
|
|
||||||
if ((currentTimestamp - currentOut[i].time) < 600) {
|
|
||||||
if (req.body.plate === currentOut[i].plate) {
|
|
||||||
canSaveLogs = false;
|
|
||||||
} else if (levenshtein(req.body.plate, currentOut[i].plate) < 2) {
|
|
||||||
canSaveLogs = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (canSaveLogs) {
|
|
||||||
var currentPlate = "";
|
var currentPlate = "";
|
||||||
var fileName = req.body.plate + "_" + currentTimestamp + ".png";
|
var fileName = req.body.plate + "_" + currentTimestamp + ".png";
|
||||||
var plateSaved = currentYear + "/" + currentMonth + "/" + currentDate + "/" + req.body.type + "/plate/" + fileName;
|
var plateSaved = currentYear + "/" + currentMonth + "/" + currentDate + "/" + req.body.type + "/plate/" + fileName;
|
||||||
|
@ -129,7 +211,7 @@ exports.SaveLogs = async function (req, res) {
|
||||||
if (query_plate_raw.length > 0) {
|
if (query_plate_raw.length > 0) {
|
||||||
vehicleInfo = {"status": true, "data": query_plate_raw[0]};
|
vehicleInfo = {"status": true, "data": query_plate_raw[0]};
|
||||||
currentPlate = query_plate_raw[0].plate;
|
currentPlate = query_plate_raw[0].plate;
|
||||||
if (req.body.type == "in") {
|
if (req.body.type == "in" && isSavePlate(req.body.type, currentTimestamp, currentPlate)) {
|
||||||
var newLogs = 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 + ")");
|
var newLogs = 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 + ")");
|
||||||
io.emit('logs', {
|
io.emit('logs', {
|
||||||
id: newLogs.insertId,
|
id: newLogs.insertId,
|
||||||
|
@ -139,7 +221,7 @@ exports.SaveLogs = async function (req, res) {
|
||||||
time: currentTimestamp
|
time: currentTimestamp
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (req.body.type == "out") {
|
if (req.body.type == "out" && isSavePlate(req.body.type, currentTimestamp, currentPlate)) {
|
||||||
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");
|
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) {
|
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);
|
await db.query("UPDATE logs SET `plate_image_out`='" + plateSaved + "',`frame_image_out`='" + frameSaved + "',`time_out`=" + currentTimestamp + " WHERE id=" + checkIn[0].id);
|
||||||
|
@ -163,12 +245,13 @@ exports.SaveLogs = async function (req, res) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
consoleLogPlate(req.body.type, req.body.plate, currentPlate, currentTimestamp, "absolute");
|
||||||
} else {
|
} else {
|
||||||
var query_plate_levenshtein = await db.query("SELECT * FROM `vehicle` WHERE LENGTH(`plate`)>=" + req.body.plate.length + " AND levenshtein('" + req.body.plate + "', `plate`) BETWEEN 0 AND 1 LIMIT 0,1");
|
var query_plate_levenshtein = await db.query("SELECT * FROM `vehicle` WHERE LENGTH(`plate`)=" + req.body.plate.length + " AND levenshtein('" + req.body.plate + "', `plate`) BETWEEN 0 AND 1 LIMIT 0,1");
|
||||||
if (query_plate_levenshtein.length > 0) {
|
if (query_plate_levenshtein.length > 0) {
|
||||||
vehicleInfo = {"status": true, "data": query_plate_levenshtein[0]};
|
vehicleInfo = {"status": true, "data": query_plate_levenshtein[0]};
|
||||||
currentPlate = query_plate_levenshtein[0].plate;
|
currentPlate = query_plate_levenshtein[0].plate;
|
||||||
if (req.body.type == "in") {
|
if (req.body.type == "in" && isSavePlate(req.body.type, currentTimestamp, currentPlate)) {
|
||||||
var newLogs = 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 + ")");
|
var newLogs = 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 + ")");
|
||||||
io.emit('logs', {
|
io.emit('logs', {
|
||||||
id: newLogs.insertId,
|
id: newLogs.insertId,
|
||||||
|
@ -178,7 +261,7 @@ exports.SaveLogs = async function (req, res) {
|
||||||
time: currentTimestamp
|
time: currentTimestamp
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (req.body.type == "out") {
|
if (req.body.type == "out" && isSavePlate(req.body.type, currentTimestamp, currentPlate)) {
|
||||||
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");
|
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) {
|
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);
|
await db.query("UPDATE logs SET `plate_image_out`='" + plateSaved + "',`frame_image_out`='" + frameSaved + "',`time_out`=" + currentTimestamp + " WHERE id=" + checkIn[0].id);
|
||||||
|
@ -202,9 +285,10 @@ exports.SaveLogs = async function (req, res) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
consoleLogPlate(req.body.type, req.body.plate, currentPlate, currentTimestamp, "levenshtein");
|
||||||
} else {
|
} else {
|
||||||
currentPlate = req.body.plate;
|
currentPlate = req.body.plate;
|
||||||
if (req.body.type == "in") {
|
if (req.body.type == "in" && isSavePlateOther(req.body.type, currentTimestamp, currentPlate)) {
|
||||||
if (falseIn < maxFalse) {
|
if (falseIn < maxFalse) {
|
||||||
vehicleInfo = {"status": false};
|
vehicleInfo = {"status": false};
|
||||||
falseIn++;
|
falseIn++;
|
||||||
|
@ -215,7 +299,7 @@ exports.SaveLogs = async function (req, res) {
|
||||||
await db.query("INSERT INTO logs_unknow(`plate`,`plate_image_in`,`frame_image_in`,`time_in`) VALUES ('" + req.body.plate + "','" + plateSaved + "','" + frameSaved + "'," + currentTimestamp + ")");
|
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") {
|
if (req.body.type == "out" && isSavePlateOther(req.body.type, currentTimestamp, currentPlate)) {
|
||||||
if (falseOut < maxFalse) {
|
if (falseOut < maxFalse) {
|
||||||
vehicleInfo = {"status": false};
|
vehicleInfo = {"status": false};
|
||||||
falseOut++;
|
falseOut++;
|
||||||
|
@ -236,36 +320,8 @@ exports.SaveLogs = async function (req, res) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
consoleLogPlateOther(req.body.type, req.body.plate, currentPlate, currentTimestamp, "other");
|
||||||
}
|
|
||||||
if (req.body.type === "in") {
|
|
||||||
var lists = [];
|
|
||||||
for (var i = 0; i < currentIn.length; i++) {
|
|
||||||
lists.push(currentIn[i].plate);
|
|
||||||
}
|
|
||||||
console.log("req: ", req.body.plate, " ", currentPlate, " ", req.body.type, " ", lists, " ", vehicleInfo.status);
|
|
||||||
if (vehicleInfo.status) {
|
|
||||||
if (currentIn.length >= maxCompare) {
|
|
||||||
currentIn.shift();
|
|
||||||
}
|
|
||||||
currentIn.push({"plate": currentPlate, "time": currentTimestamp});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (req.body.type === "out") {
|
|
||||||
var lists = [];
|
|
||||||
for (var i = 0; i < currentOut.length; i++) {
|
|
||||||
lists.push(currentOut[i].plate);
|
|
||||||
}
|
|
||||||
console.log("req: ", req.body.plate, " ", currentPlate, " ", req.body.type, " ", lists, " ", vehicleInfo.status);
|
|
||||||
if (vehicleInfo.status) {
|
|
||||||
if (currentOut.length >= maxCompare) {
|
|
||||||
currentOut.shift();
|
|
||||||
}
|
|
||||||
currentOut.push({"plate": currentPlate, "time": currentTimestamp});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
res.send(vehicleInfo);
|
res.send(vehicleInfo);
|
||||||
} else {
|
|
||||||
res.send({"status": true});
|
|
||||||
}
|
|
||||||
};
|
};
|
Loading…
Reference in New Issue
Block a user