-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
338 additions
and
22 deletions.
There are no files selected for viewing
49 changes: 49 additions & 0 deletions
49
src/main/java/fr/abes/theses/export/controller/ToolController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
package fr.abes.theses.export.controller; | ||
|
||
import fr.abes.theses.export.service.DbRequest; | ||
import io.swagger.v3.oas.annotations.Parameter; | ||
import lombok.extern.slf4j.Slf4j; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.http.HttpStatus; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.web.bind.annotation.*; | ||
|
||
import java.net.URI; | ||
import java.util.List; | ||
import java.util.Optional; | ||
|
||
@Slf4j | ||
@RestController | ||
@RequestMapping("/api/v1/tool/") | ||
public class ToolController { | ||
|
||
@Autowired | ||
DbRequest dbRequest; | ||
|
||
// @GetMapping(value = "algoTheses",produces = "application/vnd.ms-excel") | ||
@GetMapping(value = "algoTheses") | ||
public ResponseEntity algoTheses( | ||
@RequestParam @Parameter(name = "etat", description = "Code du problème, multivalué possible", example = "52") Optional<List<Integer>> etat, | ||
@RequestParam @Parameter(name = "type", description = "Type d'intervention, multivalué possible", example = "amelioration") Optional<List<String>> type, | ||
@RequestParam @Parameter(name = "codeetab", description = "Code de l'établissement", example = "NICE") Optional<List<String>> codeetab, | ||
@RequestParam @Parameter(name = "nnt", description = "Numéro national de thèse", example = "2020MONT1234") Optional<List<String>> nnt, | ||
@RequestParam @Parameter(name = "ppn", description = "Identifiant de la notice", example = "236863509") Optional<List<String>> ppn, | ||
@RequestParam @Parameter(name = "utilisateur", description = "Type d'utilisateur", example = "reseau") Optional<List<String>> utilisateur, | ||
@RequestParam @Parameter(name = "rcr", description = "Identifiant de la bibliothèque", example = "751052105") Optional<List<String>> rcr, | ||
@RequestParam @Parameter(name = "sort", description = "Ordre de tri avec noms du (ou des) champ(s)", example = "type,codeEtab,ppn") Optional<List<String>> sort, | ||
@RequestParam @Parameter(name = "annee", description = "Année de soutenance", example = "1985") Optional<String> annee, | ||
@RequestParam @Parameter(name = "rownum", description = "Nombre de lignes à renvoyer", example = "1000") Optional<String> rownum | ||
) { | ||
return new ResponseEntity<>(dbRequest.getDiagnosticAlgoTheses( | ||
etat, | ||
type, | ||
codeetab, | ||
nnt, | ||
ppn, | ||
utilisateur, | ||
rcr, | ||
sort, | ||
annee, | ||
rownum), HttpStatus.OK); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package fr.abes.theses.export.model; | ||
|
||
import lombok.AllArgsConstructor; | ||
import lombok.Getter; | ||
import lombok.Setter; | ||
|
||
@AllArgsConstructor | ||
@Getter | ||
@Setter | ||
public class Diagnostic { | ||
|
||
private Integer etat; | ||
private String type; | ||
private String codeEtab; | ||
private String nnt; | ||
private String ppn; | ||
private String utilisateur; | ||
private String rcr; | ||
private String annee; | ||
private String gravite; | ||
private String libelle; | ||
private String consigne; | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
137 changes: 134 additions & 3 deletions
137
src/main/java/fr/abes/theses/export/service/DbRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +1,149 @@ | ||
package fr.abes.theses.export.service; | ||
|
||
import fr.abes.theses.export.model.Diagnostic; | ||
import io.swagger.v3.oas.models.security.SecurityScheme; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.beans.factory.annotation.Qualifier; | ||
import org.springframework.context.annotation.Configuration; | ||
import org.springframework.jdbc.core.JdbcTemplate; | ||
import org.springframework.stereotype.Component; | ||
|
||
import java.util.ArrayList; | ||
import java.util.Arrays; | ||
import java.util.List; | ||
import java.util.Optional; | ||
import java.util.stream.Collectors; | ||
|
||
@Component | ||
@Configuration | ||
public class DbRequest { | ||
|
||
@Autowired | ||
private JdbcTemplate jdbcTemplate; | ||
private final JdbcTemplate jdbcTemplateTheses; | ||
private final JdbcTemplate jdbcTemplateBaseXml; | ||
private final TraitementParams traitementParams; | ||
public DbRequest(JdbcTemplate jdbcTemplateTheses, | ||
JdbcTemplate jdbcTemplateBaseXml, | ||
TraitementParams traitementParams) { | ||
this.jdbcTemplateTheses = jdbcTemplateTheses; | ||
this.jdbcTemplateBaseXml = jdbcTemplateBaseXml; | ||
this.traitementParams = traitementParams; | ||
} | ||
|
||
public String findTefByNntOrNumsujet (String nntOrNumsujet) { | ||
|
||
|
||
String sql = "select d.doc from PORTAIL.document d where d.nnt=? or d.numsujet=?"; | ||
return jdbcTemplate.queryForObject(sql, new TefMapper(), nntOrNumsujet,nntOrNumsujet); | ||
return jdbcTemplateTheses.queryForObject(sql, new TefMapper(), nntOrNumsujet,nntOrNumsujet); | ||
} | ||
|
||
public List<Diagnostic> getDiagnosticAlgoTheses (Optional<List<Integer>> etats, | ||
Optional<List<String>> types, | ||
Optional<List<String>> codeEtab, | ||
Optional<List<String>> nnt, | ||
Optional<List<String>> ppn, | ||
Optional<List<String>> utilisateur, | ||
Optional<List<String>> rcr, | ||
Optional<List<String>> sort, | ||
Optional<String> annee, | ||
Optional<String> rownum) { | ||
|
||
|
||
StringBuilder sql = new StringBuilder("SELECT etat, type, codeetab, nnt, ppn, utilisateur, rcr, annee, gravite, libelle, consigne " + | ||
"FROM theses_algo WHERE 1=1"); | ||
|
||
List<Object> params = new ArrayList<>(); | ||
|
||
ajouteParamIntegerDansRequete(sql, params, "etat",etats); | ||
ajouteParamStringDansRequete(sql, params, "type", types); | ||
ajouteParamStringDansRequete(sql, params, "codeetab", codeEtab); | ||
ajouteParamStringDansRequete(sql, params, "nnt", nnt); | ||
ajouteParamStringDansRequete(sql, params, "ppn", ppn); | ||
ajouteParamStringDansRequete(sql, params, "utilisateur", utilisateur); | ||
ajouteParamStringDansRequete(sql, params, "rcr", rcr); | ||
ajouteRownum(sql, params, rownum); | ||
ajouteAnneeDansRequete(sql, params, annee); | ||
ajouteOrdre(sql, sort); | ||
|
||
List<Diagnostic> liste = jdbcTemplateBaseXml.query(sql.toString(), params.toArray(), (rs, rowNum) -> | ||
new Diagnostic( | ||
rs.getInt("etat"), | ||
rs.getString("type"), | ||
rs.getString("codeetab"), | ||
rs.getString("nnt"), | ||
rs.getString("ppn"), | ||
rs.getString("utilisateur"), | ||
rs.getString("rcr"), | ||
rs.getString("annee"), | ||
rs.getString("gravite"), | ||
rs.getString("libelle"), | ||
rs.getString("consigne") | ||
) | ||
); | ||
|
||
return liste; | ||
} | ||
|
||
private void ajouteParamIntegerDansRequete (StringBuilder sql, List<Object> paramsRequete, String nomParam, Optional<List<Integer>> params) { | ||
|
||
if (params.isPresent()) { | ||
|
||
String inClause = params.get().stream() | ||
.map(type -> nomParam + " = ?") | ||
.collect(Collectors.joining(" OR ")); | ||
sql.append(" AND (" + inClause + ")"); | ||
paramsRequete.addAll(params.get()); | ||
} | ||
} | ||
private void ajouteParamStringDansRequete (StringBuilder sql, List<Object> paramsRequete, String nomParam, Optional<List<String>> params) { | ||
|
||
if (params.isPresent()) { | ||
|
||
String clause = params.get().stream() | ||
.map(type -> nomParam + " = ?") | ||
.collect(Collectors.joining(" OR ")); | ||
sql.append(" AND (" + clause + ")"); | ||
paramsRequete.addAll(params.get()); | ||
} | ||
} | ||
|
||
private void ajouteAnneeDansRequete (StringBuilder sql, List<Object> paramsRequete, Optional<String> annee) { | ||
|
||
if (annee.isPresent() && annee.get().matches("\\d{4}")) { | ||
|
||
sql.append(" AND annee >= ?"); | ||
paramsRequete.add(annee.get()); | ||
} | ||
} | ||
private void ajouteRownum (StringBuilder sql, List<Object> paramsRequete, Optional<String> rownum) { | ||
|
||
if (rownum.isPresent() && Integer.parseInt(rownum.get()) > 0 && Integer.parseInt(rownum.get()) < 100000) { | ||
sql.append(" AND rownum <= ?"); | ||
paramsRequete.add(rownum.get()); | ||
} | ||
else { | ||
sql.append(" AND rownum <= 100"); | ||
} | ||
} | ||
|
||
private void ajouteOrdre (StringBuilder sql, Optional<List<String>> sort) { | ||
|
||
List<String> validColumns = Arrays.asList("etat", "type", "codeetab", "nnt", "ppn", "utilisateur", "rcr", "annee", "gravite", "libelle", "consigne"); // Ajouter toutes les colonnes valides | ||
|
||
if (sort.isPresent() && !sort.get().isEmpty()) { | ||
|
||
String orderClause = sort.get().stream() | ||
.map(value -> { | ||
String column = value.trim(); | ||
|
||
if (!validColumns.contains(column)) { | ||
throw new IllegalArgumentException("Colonne non valide pour le tri : " + column); | ||
} | ||
|
||
return column + " ASC"; | ||
}) | ||
.collect(Collectors.joining(", ")); | ||
|
||
sql.append(" ORDER BY " + orderClause); | ||
} | ||
} | ||
} |
84 changes: 84 additions & 0 deletions
84
src/main/java/fr/abes/theses/export/service/TraitementParams.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
package fr.abes.theses.export.service; | ||
|
||
import org.springframework.stereotype.Component; | ||
|
||
@Component | ||
public class TraitementParams { | ||
|
||
/** | ||
* Pour pouvoir gérer une liste potentielle de params, les params sont placés | ||
* entre parenthèses pour pouvoir utilise IN | ||
* @param valeur | ||
* @return | ||
*/ | ||
public String getParamInteger(String valeur) { | ||
String val = ""; | ||
if (valeur != null) { | ||
val = valeur; | ||
val = "'" + val.replaceAll(",", "','"); | ||
if (val.lastIndexOf(',') == val.length()) { | ||
val = val.substring(0, val.length() - 1); | ||
} | ||
val += "'"; | ||
val = "(" + val + ")"; | ||
} | ||
return val; | ||
} | ||
|
||
/** | ||
* Pour pouvoir gérer une liste potentielle de params, les params sont placés | ||
* entre parenthèses pour pouvoir utilise IN + ajout de guillemets simple car le(s) param(s) | ||
* est (sont) de type String | ||
* @param valeur | ||
* @return | ||
*/ | ||
public String getParamString(String valeur) { | ||
String val = ""; | ||
if (valeur != null) { | ||
val = valeur; | ||
if (val.lastIndexOf(',') == val.length()) { | ||
val = val.substring(0, val.length() - 1); | ||
} | ||
val = "(" + val + ")"; | ||
} | ||
return val; | ||
} | ||
|
||
public String getSort(String valeur) { | ||
String sort = ""; | ||
if(valeur!=null) | ||
{ | ||
sort = valeur; | ||
if (sort.lastIndexOf(',') == sort.length()) { | ||
sort = sort.substring(0, sort.length() - 1); | ||
} | ||
} | ||
return sort; | ||
} | ||
|
||
public String getAnnee (String valeur) { | ||
|
||
String annee = ""; | ||
if (valeur != null) { | ||
annee = valeur; | ||
if (annee.length() == 4 && Integer.parseInt(annee) > 0) { | ||
annee = "'" + annee + "'"; | ||
} else { | ||
annee = ""; | ||
} | ||
} | ||
return annee; | ||
} | ||
|
||
public String getRownum (String valeur) { | ||
String rownum = "1000000"; | ||
if (valeur != null) { | ||
if (Integer.parseInt(valeur) > 0) { | ||
rownum = valeur; | ||
} | ||
} | ||
return rownum; | ||
} | ||
|
||
|
||
} |
Oops, something went wrong.