/*! \fn void Middleware::checkAut(int nGroup) \brief Función que comprueba si la matrícula reconocida a la salida del grupo sin báscula está autorizada. \param int nGroup [Contiene el número del grupo en el que hay que comprobar si está autorizada la mátricula reconocida] */ void Middleware::checkAut(int nGroup) { if (lstGroup.at(nGroup).szNameVehiculo.size() <= 0) { //PARCHE NEW:06/07/2020-Carlos (ORIGINAL) //lstGroup[nGroup].szNameVehiculo = "NO AUTORIZADO"; //PARCHE NEW: 06/10/2020-Carlos //DESCRIPCION: Comprobamos si en la lista de sensores del grupo hay definida //una barrera. Si el punto de tránsito tiene barrera, comprobamos si la //matrícula está autorizada. En caso contrario omitimos el chequeo de //matrícula y mostramos un mensaje de "TRANSITO DETECTADO" bool checkBarr = false; for (int b = 0; b < lstGroup.at(nGroup).lstSensor.size(); ++b) { if (lstGroup.at(nGroup).lstSensor.at(b)->bBarrera) { checkBarr = true; break; } } if (checkBarr) { lstGroup[nGroup].szNameVehiculo = "NO AUTORIZADO"; } else { lstGroup[nGroup].szNameVehiculo = "TRANSITO DETECTADO"; } } lstGroup[nGroup].szPlateRec = lstGroup.at(nGroup).szPlate; for (int i = 0; (i < lstMatAut.size()) && !lstGroup.at(nGroup).bAut; ++i) { QMap mapData = lstMatAut.at(i); if (mapData["MAT"].toString().trimmed() == lstGroup.at(nGroup).szPlate) { bool bAut = true; //Comprobar autorización de vehículos dados de alta en puntos de gestión. for (int j = 0; (j < lstGroup.at(nGroup).lstCam.size()) && (lstGroup.at(nGroup).bascula == NULL); ++j) { if (lstGroup.at(nGroup).lstCam.at(j)->szRef == lstGroup.at(nGroup).szNameCamRec) { if (lstGroup.at(nGroup).lstCam.at(j)->szTipoPunto == GESTION) bAut = mapData["GES"].toBool(); } } lstGroup[nGroup].bAut = bAut; lstGroup[nGroup].nPlateId = mapData["ID"].toInt(); lstGroup[nGroup].szPlate = mapData["MAT_REAL"].toString(); lstGroup[nGroup].szNameVehiculo = mapData["NAME"].toString(); //Esto es para que suba y baje el pistón de la pantalla de LIMASA. if (lstGroup.at(nGroup).bPiston && mapData.contains("TARA")) checkPiston(nGroup, mapData["TARA"].toInt()); if (!bAut && (lstGroup.at(nGroup).bascula == NULL)) lstGroup[nGroup].szNameVehiculo = lstGroup.at(nGroup).szNameVehiculo + " (NO AUTORIZADO A GESTION)"; } //PARCHE NEW: 06/10/2020-Carlos //DESCRIPCION: Limpiamos estructura QMap de memoria mapData.clear(); } //Si la matrícula no se encuentra entre las autorizadas permanentemente, busco si hay orden de carga para ella. for (int i = 0; (i < lstGroup.at(nGroup).lstCam.size()) && !lstGroup.at(nGroup).bAut && (lstGroup.at(nGroup).bascula == NULL); ++i) { if (lstGroup.at(nGroup).lstCam.at(i)->szRef == lstGroup.at(nGroup).szNameCamRec) { for (int j = 0; (j < lstGroup.at(nGroup).lstCam.at(i)->lstLoadOrders.size()) && !lstGroup.at(nGroup).bAut; ++j) { QMap mapData; QStringList lstAlbaranInfo; if (lstGroup.at(nGroup).lstCam.at(i)->szTipoPunto == GESTION) { if (lstGroup.at(nGroup).lstCam.at(i)->lstLoadOrders.at(j).contains("situacion")) { if (lstGroup.at(nGroup).lstCam.at(i)->lstLoadOrders.at(j)["situacion"].toString() == ACTIVA) mapData = lstGroup.at(nGroup).lstCam.at(i)->lstLoadOrders.at(j); } } else mapData = lstGroup.at(nGroup).lstCam.at(i)->lstLoadOrders.at(j); if (mapData.contains("matricula")) { if (mapData["matricula"].toString().trimmed() == lstGroup.at(nGroup).szPlate || mapData["matricula"].toString().trimmed().contains(lstGroup.at(nGroup).szPlate)) { lstGroup[nGroup].bAut = true; lstGroup[nGroup].szPlate = mapData["matricula"].toString().trimmed(); lstGroup[nGroup].szNameVehiculo = "TRANSPORTE CON ORDEN DE CARGA"; //Recoger la información del albarán que viene en la orden de carga. if (mapData.contains("marcaAgua")) { if (mapData["marcaAgua"].toString().size() > 0) lstAlbaranInfo = mapData["marcaAgua"].toString().split("|"); for (int i = 0; i < lstAlbaranInfo.size(); ++i) lstGroup[nGroup].mapAlbaran[i] = lstAlbaranInfo.at(i); } } } //PARCHE NEW: 06/10/2020-Carlos //DESCRIPCION: Limpiamos estructuras de memoria mapData.clear(); lstAlbaranInfo.clear(); } } } //Si tras todos los reintentos no se ha conseguido autorizar el transito, indicamos que se autorice la matrícula del vehículo. if (!lstGroup.at(nGroup).bAut && lstGroup.at(nGroup).bTransito && (lstGroup.at(nGroup).nIntento == lstGroup.at(nGroup).nReintentos) && (lstGroup.at(nGroup).bascula == NULL)) { //Comprobar autorización de vehículos dados de alta en puntos de gestión. for (int j = 0; j < lstGroup.at(nGroup).lstCam.size(); ++j) { if (lstGroup.at(nGroup).lstCam.at(j)->szRef == lstGroup.at(nGroup).szNameCamRec) { if (lstGroup.at(nGroup).lstCam.at(j)->szTipoPunto != GESTION) { if (lstGroup.at(nGroup).szNameVehiculo == "NO AUTORIZADO") lstGroup[nGroup].szNameVehiculo = "INTENTOS AGOTADOS, AUTORICE MANUALMENTE!"; } } } } if (lstGroup.at(nGroup).bTransito) { //PARCHE NEW: 06/10/2020-Carlos //DESCRIPCION: Abrimos la barrera si la matrícula está autorizada if (lstGroup.at(nGroup).bAut) { if (lstGroup.at(nGroup).bascula == NULL) { //PARCHE NEW:06/10/2020-Carlos (ORIGINAL) //saveFrames(nGroup); //PARCHE NEW:06/10/2020-Carlos //DESCRIPCION: Permitimos el tránsito del vehículo qDebug() << "TRANSITO PERMITIDO EN " << lstGroup[nGroup].szGroupName << ": VEHICULO AUTORIZADO (MATR.:"<< lstGroup.at(nGroup).szPlate << ")"; autTransit(nGroup, lstGroup.at(nGroup).lstSensor.size(), lstGroup.at(nGroup).bAut); } } else { //Reintentamos el reconocimiento de la mátricula aunque no esté autorizada por si no se ha reconocido correctamente. if (lstGroup.at(nGroup).nIntento < lstGroup.at(nGroup).nReintentos) { lstGroup[nGroup].nIntento++; //PARCHE NEW: 06/10/2020-Carlos //DESCRIPCION: Si la cámara tiene activada la opción de abrir barrera aunque la matrícula //no esté autorizada, abrimos la barrera transcurridos 2 intentos if ((lstGroup.at(nGroup).nIntento == 2) && lstGroup.at(nGroup).bAbrBarNoAut) { qDebug() << "TRANSITO PERMITIDO EN " << lstGroup[nGroup].szGroupName << ": ABRIR BARRERA AUTO (MATR. NO AUTORIZADA:"<< lstGroup.at(nGroup).szPlate << ")"; autTransit(nGroup, lstGroup.at(nGroup).lstSensor.size(), true); return; } //PARCHE NEW:06/10/2020-Carlos //DESCRIPCION: Se comprueba si el número de reintentos ha llegado a la mitad //para enviar una señal al cliente. A través de un formulario el cliente podrá //abrir barrera y autorizar al vehículo temporalmente o permanentemente. if (lstGroup.at(nGroup).nIntento == (lstGroup.at(nGroup).nReintentos / 2)) { sendNoAut(nGroup); } for (int i = 0; i < lstGroup.at(nGroup).lstCam.size(); ++i) { if (lstGroup.at(nGroup).lstCam.at(i)->bAlpr) { if (lstGroup.at(nGroup).szNameCamRec == lstGroup.at(nGroup).lstCam.at(i)->szRef) { //Guardo el último frame que se reconoció y limpio la lista de frames reconocidos. if (lstGroup.at(nGroup).lstCam.at(i)->lstFramePlate.size() > 0) { lstGroup[nGroup].lastFramePlate = lstGroup.at(nGroup).lstCam.at(i)->lstFramePlate.at(0); lstGroup.at(nGroup).lstCam[i]->lstFramePlate.clear(); } lstGroup.at(nGroup).lstCam[i]->lstFrames.clear(); lstGroup.at(nGroup).lstCam[i]->bAlprActive = true; //PARCHE NEW:06/10/2020-Carlos //break; } } } //PARCHE DEBUG: qDebug() << "[CHECKAUT] --> VEHICULO NO AUTORIZADO! Reintento:" << lstGroup.at(nGroup).nIntento << "en grupo" << lstGroup.at(nGroup).szGroupName; } } } }