Skip to content

Instantly share code, notes, and snippets.

@Toilal
Last active November 19, 2020 14:18
Show Gist options
  • Save Toilal/1da690ffc85f29758677ec1a4d8646f7 to your computer and use it in GitHub Desktop.
Save Toilal/1da690ffc85f29758677ec1a4d8646f7 to your computer and use it in GitHub Desktop.
public List<DoublonPP> findNombreDoublonPP(boolean nomPatronymique,
boolean prenom, boolean dateNaissance, boolean telephoneDomicile,
boolean telephonePortable, boolean rue, boolean codePostal) {
if (!nomPatronymique && !prenom && !dateNaissance && !telephoneDomicile
&& !telephonePortable && !rue && !codePostal) {
return null;
}
try {
StringBuilder queryString = new StringBuilder();
queryString.append("SELECT COUNT('x'), ");
if (nomPatronymique) {
queryString.append("nom ");
}
if (prenom) {
if (nomPatronymique) {
queryString.append(", ");
}
queryString.append("prenom ");
}
if (dateNaissance) {
if (prenom || nomPatronymique) {
queryString.append(", ");
}
queryString.append("date_naissance ");
}
if (telephoneDomicile) {
if (prenom || nomPatronymique || dateNaissance) {
queryString.append(", ");
}
queryString.append("domicile ");
}
if (telephonePortable) {
if (prenom || nomPatronymique || dateNaissance
|| telephoneDomicile) {
queryString.append(", ");
}
queryString.append("mobile ");
}
if (rue) {
if (prenom || nomPatronymique || dateNaissance
|| telephoneDomicile || telephonePortable) {
queryString.append(", ");
}
queryString.append("rue ");
}
if (codePostal) {
if (prenom || nomPatronymique || dateNaissance
|| telephoneDomicile || telephonePortable || rue) {
queryString.append(", ");
}
queryString.append("code_postal ");
}
queryString.append("FROM (SELECT DISTINCT id_personne_pp, ");
if (nomPatronymique) {
queryString.append("nom ");
}
if (prenom) {
if (nomPatronymique) {
queryString.append(", ");
}
queryString.append("prenom ");
}
if (dateNaissance) {
if (prenom || nomPatronymique) {
queryString.append(", ");
}
queryString.append("date_naissance ");
}
if (telephoneDomicile) {
if (prenom || nomPatronymique || dateNaissance) {
queryString.append(", ");
}
queryString.append("domicile ");
}
if (telephonePortable) {
if (prenom || nomPatronymique || dateNaissance
|| telephoneDomicile) {
queryString.append(", ");
}
queryString.append("mobile ");
}
if (rue) {
if (prenom || nomPatronymique || dateNaissance
|| telephoneDomicile || telephonePortable) {
queryString.append(", ");
}
queryString.append("rue ");
}
if (codePostal) {
if (prenom || nomPatronymique || dateNaissance
|| telephoneDomicile || telephonePortable || rue) {
queryString.append(", ");
}
queryString.append("code_postal ");
}
queryString
.append("FROM (SELECT pp.id_personne AS id_personne_pp, ");
if (nomPatronymique) {
queryString.append("pp.nom_patronymique AS nom ");
}
if (prenom) {
if (nomPatronymique) {
queryString.append(", ");
}
queryString.append("pp.prenom AS prenom ");
}
if (dateNaissance) {
if (prenom || nomPatronymique) {
queryString.append(", ");
}
queryString.append("pp.date_naissance AS date_naissance ");
}
if (telephoneDomicile) {
if (prenom || nomPatronymique || dateNaissance) {
queryString.append(", ");
}
queryString
.append("coord_domicile.info_coordonnee AS domicile ");
}
if (telephonePortable) {
if (prenom || nomPatronymique || dateNaissance
|| telephoneDomicile) {
queryString.append(", ");
}
queryString.append("coord_mobile.info_coordonnee AS mobile ");
}
if (rue) {
if (prenom || nomPatronymique || dateNaissance
|| telephoneDomicile || telephonePortable) {
queryString.append(", ");
}
queryString.append("IFNULL(adr.voie,adr_porteur.voie) AS rue ");
}
if (codePostal) {
if (prenom || nomPatronymique || dateNaissance
|| telephoneDomicile || telephonePortable || rue) {
queryString.append(", ");
}
queryString
.append("IFNULL(adr.code_postal,adr_porteur.code_postal) AS code_postal ");
}
queryString.append("FROM personne_physique AS pp ");
if (rue || codePostal) {
queryString
.append("LEFT OUTER JOIN adresse adr ON (adr.id_personne=pp.id_personne) "
+ "LEFT OUTER JOIN groupe_personne adr_liee "
+ "ON (adr_liee.id_personne2=pp.id_personne AND adr_liee.code_nature_lien= '"
+ Constants.CODE_NATURE_LIEN_ADRESSE
+ "') "
+ "LEFT OUTER JOIN adresse adr_porteur ON (adr_porteur.id_personne=adr_liee.id_personne1) ");
}
if (telephoneDomicile) {
queryString
.append("LEFT OUTER JOIN coordonnee coord_domicile "
+ "ON (coord_domicile.id_personne=pp.id_personne AND coord_domicile.code_coordonnee= '"
+ Constants.CODE_COORDONNEE_DOMICILE + "') ");
}
if (telephonePortable) {
queryString
.append("LEFT OUTER JOIN coordonnee coord_mobile "
+ "ON (coord_mobile.id_personne=pp.id_personne AND coord_mobile.code_coordonnee= '"
+ Constants.CODE_COORDONNEE_MOBILE + "') ");
}
// on récupère l'objet personne pour vérifier que celle-ci n'est pas logiquement supprimée
queryString.append("LEFT OUTER JOIN personne p ON (p.id_personne = pp.id_personne ) " +
"WHERE p.code_etat_personne != '" + Constants.CODE_ETAT_PERSONNE_SUPPRIMEE + "' ");
queryString.append(") AS selection1) AS selection2 ");
queryString.append("WHERE ( ");
if (nomPatronymique) {
queryString.append("nom IS NOT NULL ");
}
if (prenom) {
if (nomPatronymique) {
queryString.append("AND ");
}
queryString.append("prenom IS NOT NULL ");
}
if (dateNaissance) {
if (prenom || nomPatronymique) {
queryString.append("AND ");
}
queryString.append("date_naissance IS NOT NULL ");
}
if (telephoneDomicile) {
if (prenom || nomPatronymique || dateNaissance) {
queryString.append("AND ");
}
queryString.append("domicile IS NOT NULL ");
}
if (telephonePortable) {
if (prenom || nomPatronymique || dateNaissance
|| telephoneDomicile) {
queryString.append("AND ");
}
queryString.append("mobile IS NOT NULL ");
}
if (rue) {
if (prenom || nomPatronymique || dateNaissance
|| telephoneDomicile || telephonePortable) {
queryString.append("AND ");
}
queryString.append("rue IS NOT NULL ");
}
if (codePostal) {
if (prenom || nomPatronymique || dateNaissance
|| telephoneDomicile || telephonePortable || rue) {
queryString.append("AND ");
}
queryString.append("code_postal IS NOT NULL ");
}
queryString.append(") ");
queryString.append("GROUP BY ");
if (nomPatronymique) {
queryString.append("nom ");
}
if (prenom) {
if (nomPatronymique) {
queryString.append(", ");
}
queryString.append("prenom ");
}
if (dateNaissance) {
if (prenom || nomPatronymique) {
queryString.append(", ");
}
queryString.append("date_naissance ");
}
if (telephoneDomicile) {
if (prenom || nomPatronymique || dateNaissance) {
queryString.append(", ");
}
queryString.append("domicile ");
}
if (telephonePortable) {
if (prenom || nomPatronymique || dateNaissance
|| telephoneDomicile) {
queryString.append(", ");
}
queryString.append("mobile ");
}
if (rue) {
if (prenom || nomPatronymique || dateNaissance
|| telephoneDomicile || telephonePortable) {
queryString.append(", ");
}
queryString.append("rue ");
}
if (codePostal) {
if (prenom || nomPatronymique || dateNaissance
|| telephoneDomicile || telephonePortable || rue) {
queryString.append(", ");
}
queryString.append("code_postal ");
}
queryString.append("HAVING(COUNT('x')>1) ");
Query query = entityManager.createNativeQuery(queryString
.toString());
//query.setMaxResults(Constants.MAX_SEARCH_RESULTS);
List<Object[]> listeTemp = query.getResultList();
// Conversion de l'objet récupéré en sortie en DoublonPP
if (!CollectionUtils.isEmpty(listeTemp)) {
List<DoublonPP> listeNombreDoublons = new ArrayList<DoublonPP>();
for (Object[] doublon : listeTemp) {
DoublonPP doublonPP = new DoublonPP();
doublonPP.setNombreOccurences(((BigInteger) doublon[0]).intValueExact());
if (nomPatronymique) {
String nomPP = (String) doublon[1];
doublonPP.setNom(nomPP);
}
if (prenom) {
String prenomPP = null;
if (nomPatronymique) {
prenomPP = (String) doublon[2];
} else {
prenomPP = (String) doublon[1];
}
doublonPP.setPrenom(prenomPP);
}
if (dateNaissance) {
Date dateNaissancePP = null;
if (nomPatronymique) {
if (prenom) {
dateNaissancePP = (Date) doublon[3];
} else {
dateNaissancePP = (Date) doublon[2];
}
} else if (prenom) {
dateNaissancePP = (Date) doublon[2];
} else {
dateNaissancePP = (Date) doublon[1];
}
doublonPP.setDateNaissance(dateNaissancePP);
}
if (telephoneDomicile) {
String domicilePP = null;
if (nomPatronymique) {
if (prenom) {
if (dateNaissance) {
domicilePP = (String) doublon[4];
} else {
domicilePP = (String) doublon[3];
}
} else if (dateNaissance) {
domicilePP = (String) doublon[3];
} else {
domicilePP = (String) doublon[2];
}
} else if (prenom) {
if (dateNaissance) {
domicilePP = (String) doublon[3];
} else {
domicilePP = (String) doublon[2];
}
} else if (dateNaissance) {
domicilePP = (String) doublon[2];
} else {
domicilePP = (String) doublon[1];
}
doublonPP.setTelephoneDom(domicilePP);
}
if (telephonePortable) {
String mobilePP = null;
if (nomPatronymique) {
if (prenom) {
if (dateNaissance) {
if (telephoneDomicile) {
mobilePP = (String) doublon[5];
} else {
mobilePP = (String) doublon[4];
}
} else {
if (telephoneDomicile) {
mobilePP = (String) doublon[4];
} else {
mobilePP = (String) doublon[3];
}
}
} else {
if (dateNaissance) {
if (telephoneDomicile) {
mobilePP = (String) doublon[4];
} else {
mobilePP = (String) doublon[3];
}
} else {
if (telephoneDomicile) {
mobilePP = (String) doublon[3];
} else {
mobilePP = (String) doublon[2];
}
}
}
} else if (prenom) {
if (dateNaissance) {
if (telephoneDomicile) {
mobilePP = (String) doublon[4];
} else {
mobilePP = (String) doublon[3];
}
} else {
if (telephoneDomicile) {
mobilePP = (String) doublon[3];
} else {
mobilePP = (String) doublon[2];
}
}
} else if (dateNaissance) {
if (telephoneDomicile) {
mobilePP = (String) doublon[3];
} else {
mobilePP = (String) doublon[2];
}
} else if (telephoneDomicile) {
mobilePP = (String) doublon[2];
} else {
mobilePP = (String) doublon[1];
}
doublonPP.setTelephonePort(mobilePP);
}
if (rue) {
String ruePP = null;
if (nomPatronymique) {
if (prenom) {
if (dateNaissance) {
if (telephoneDomicile) {
if (telephonePortable) {
ruePP = (String) doublon[6];
} else {
ruePP = (String) doublon[5];
}
} else {
if (telephonePortable) {
ruePP = (String) doublon[5];
} else {
ruePP = (String) doublon[4];
}
}
} else {
if (telephoneDomicile) {
if (telephonePortable) {
ruePP = (String) doublon[5];
} else {
ruePP = (String) doublon[4];
}
} else {
if (telephonePortable) {
ruePP = (String) doublon[4];
} else {
ruePP = (String) doublon[3];
}
}
}
} else {
if (dateNaissance) {
if (telephoneDomicile) {
if (telephonePortable) {
ruePP = (String) doublon[5];
} else {
ruePP = (String) doublon[4];
}
} else {
if (telephonePortable) {
ruePP = (String) doublon[4];
} else {
ruePP = (String) doublon[3];
}
}
} else {
if (telephoneDomicile) {
if (telephonePortable) {
ruePP = (String) doublon[4];
} else {
ruePP = (String) doublon[3];
}
} else {
if (telephonePortable) {
ruePP = (String) doublon[3];
} else {
ruePP = (String) doublon[2];
}
}
}
}
} else {
if (prenom) {
if (dateNaissance) {
if (telephoneDomicile) {
if (telephonePortable) {
ruePP = (String) doublon[5];
} else {
ruePP = (String) doublon[4];
}
} else {
if (telephonePortable) {
ruePP = (String) doublon[4];
} else {
ruePP = (String) doublon[3];
}
}
} else {
if (telephoneDomicile) {
if (telephonePortable) {
ruePP = (String) doublon[4];
} else {
ruePP = (String) doublon[3];
}
} else {
if (telephonePortable) {
ruePP = (String) doublon[3];
} else {
ruePP = (String) doublon[2];
}
}
}
} else {
if (dateNaissance) {
if (telephoneDomicile) {
if (telephonePortable) {
ruePP = (String) doublon[4];
} else {
ruePP = (String) doublon[3];
}
} else {
if (telephonePortable) {
ruePP = (String) doublon[3];
} else {
ruePP = (String) doublon[2];
}
}
} else {
if (telephoneDomicile) {
if (telephonePortable) {
ruePP = (String) doublon[3];
} else {
ruePP = (String) doublon[2];
}
} else {
if (telephonePortable) {
ruePP = (String) doublon[2];
} else {
ruePP = (String) doublon[1];
}
}
}
}
}
doublonPP.setRue(ruePP);
}
if (codePostal) {
String codePostalPP = null;
if (nomPatronymique) {
if (prenom) {
if (dateNaissance) {
if (telephoneDomicile) {
if (telephonePortable) {
if (rue) {
codePostalPP = (String) doublon[7];
} else {
codePostalPP = (String) doublon[6];
}
} else {
if (rue) {
codePostalPP = (String) doublon[6];
} else {
codePostalPP = (String) doublon[5];
}
}
} else {
if (telephonePortable) {
if (rue) {
codePostalPP = (String) doublon[6];
} else {
codePostalPP = (String) doublon[5];
}
} else {
if (rue) {
codePostalPP = (String) doublon[5];
} else {
codePostalPP = (String) doublon[4];
}
}
}
} else {
if (telephoneDomicile) {
if (telephonePortable) {
if (rue) {
codePostalPP = (String) doublon[6];
} else {
codePostalPP = (String) doublon[5];
}
} else {
if (rue) {
codePostalPP = (String) doublon[5];
} else {
codePostalPP = (String) doublon[4];
}
}
} else {
if (telephonePortable) {
if (rue) {
codePostalPP = (String) doublon[5];
} else {
codePostalPP = (String) doublon[4];
}
} else {
if (rue) {
codePostalPP = (String) doublon[4];
} else {
codePostalPP = (String) doublon[3];
}
}
}
}
} else {
if (dateNaissance) {
if (telephoneDomicile) {
if (telephonePortable) {
if (rue) {
codePostalPP = (String) doublon[6];
} else {
codePostalPP = (String) doublon[5];
}
} else {
if (rue) {
codePostalPP = (String) doublon[5];
} else {
codePostalPP = (String) doublon[4];
}
}
} else {
if (telephonePortable) {
if (rue) {
codePostalPP = (String) doublon[5];
} else {
codePostalPP = (String) doublon[4];
}
} else {
if (rue) {
codePostalPP = (String) doublon[4];
} else {
codePostalPP = (String) doublon[3];
}
}
}
} else {
if (telephoneDomicile) {
if (telephonePortable) {
if (rue) {
codePostalPP = (String) doublon[5];
} else {
codePostalPP = (String) doublon[4];
}
} else {
if (rue) {
codePostalPP = (String) doublon[4];
} else {
codePostalPP = (String) doublon[3];
}
}
} else {
if (telephonePortable) {
if (rue) {
codePostalPP = (String) doublon[4];
} else {
codePostalPP = (String) doublon[3];
}
} else {
if (rue) {
codePostalPP = (String) doublon[3];
} else {
codePostalPP = (String) doublon[2];
}
}
}
}
}
} else {
if (prenom) {
if (dateNaissance) {
if (telephoneDomicile) {
if (telephonePortable) {
if (rue) {
codePostalPP = (String) doublon[6];
} else {
codePostalPP = (String) doublon[5];
}
} else {
if (rue) {
codePostalPP = (String) doublon[5];
} else {
codePostalPP = (String) doublon[4];
}
}
} else {
if (telephonePortable) {
if (rue) {
codePostalPP = (String) doublon[5];
} else {
codePostalPP = (String) doublon[4];
}
} else {
if (rue) {
codePostalPP = (String) doublon[4];
} else {
codePostalPP = (String) doublon[3];
}
}
}
} else {
if (telephoneDomicile) {
if (telephonePortable) {
if (rue) {
codePostalPP = (String) doublon[5];
} else {
codePostalPP = (String) doublon[4];
}
} else {
if (rue) {
codePostalPP = (String) doublon[4];
} else {
codePostalPP = (String) doublon[3];
}
}
} else {
if (telephonePortable) {
if (rue) {
codePostalPP = (String) doublon[4];
} else {
codePostalPP = (String) doublon[3];
}
} else {
if (rue) {
codePostalPP = (String) doublon[3];
} else {
codePostalPP = (String) doublon[2];
}
}
}
}
} else {
if (dateNaissance) {
if (telephoneDomicile) {
if (telephonePortable) {
if (rue) {
codePostalPP = (String) doublon[5];
} else {
codePostalPP = (String) doublon[4];
}
} else {
if (rue) {
codePostalPP = (String) doublon[4];
} else {
codePostalPP = (String) doublon[3];
}
}
} else {
if (telephonePortable) {
if (rue) {
codePostalPP = (String) doublon[4];
} else {
codePostalPP = (String) doublon[3];
}
} else {
if (rue) {
codePostalPP = (String) doublon[3];
} else {
codePostalPP = (String) doublon[2];
}
}
}
} else {
if (telephoneDomicile) {
if (telephonePortable) {
if (rue) {
codePostalPP = (String) doublon[4];
} else {
codePostalPP = (String) doublon[3];
}
} else {
if (rue) {
codePostalPP = (String) doublon[3];
} else {
codePostalPP = (String) doublon[2];
}
}
} else {
if (telephonePortable) {
if (rue) {
codePostalPP = (String) doublon[3];
} else {
codePostalPP = (String) doublon[2];
}
} else {
if (rue) {
codePostalPP = (String) doublon[2];
} else {
codePostalPP = (String) doublon[1];
}
}
}
}
}
}
doublonPP.setCodePostal(codePostalPP);
}
listeNombreDoublons.add(doublonPP);
}
return listeNombreDoublons;
}
return null;
} finally {
entityManager.close();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment