Skip to content
Snippets Groups Projects
Commit 4b98245f authored by LEMERCIER Denis's avatar LEMERCIER Denis
Browse files

Merge branch 'utilisation_nouvelles_api' into 'develop'

[SOY] Utilisation nouvelles api

See merge request !26
parents 342b8a1e 7ae79123
No related branches found
No related tags found
2 merge requests!35preparation release 2.1.0,!26[SOY] Utilisation nouvelles api
Pipeline #345543 passed
Showing
with 91 additions and 492 deletions
...@@ -4,6 +4,7 @@ Tous les changements de ce projet seront documentés dans ce document. ...@@ -4,6 +4,7 @@ Tous les changements de ce projet seront documentés dans ce document.
## [Non livré] ## [Non livré]
- Nettoyage du code : Enlever tous les appels aux anciennes API (impactReseau, impactEquipement, mixelec et typeEquipement), les API restent fonctionnelles mais ne sont plus appelées par les autres composants
- Nettoyage : Supression des tables, Entities et Repositories plus utilisés (pour MixElectrique, ImpactEquipement, ImpactReseau & TypeEquipement) - Nettoyage : Supression des tables, Entities et Repositories plus utilisés (pour MixElectrique, ImpactEquipement, ImpactReseau & TypeEquipement)
- Lancer les calculs sur uniquement quelques critères et/ou étapes -> [Issue6](https://gitlab-forge.din.developpement-durable.gouv.fr/pub/numeco/m4g/numecoeval/-/issues/6) - Lancer les calculs sur uniquement quelques critères et/ou étapes -> [Issue6](https://gitlab-forge.din.developpement-durable.gouv.fr/pub/numeco/m4g/numecoeval/-/issues/6)
......
...@@ -18,7 +18,6 @@ mkdir actual ...@@ -18,7 +18,6 @@ mkdir actual
export_table equipementPhysique conso_elec_moyenne,critere,etapeacv,impact_unitaire,nom_entite,nom_entite_discriminator,nom_equipement,nom_source_donnee,nom_source_donnee_discriminator,quantite,source,statut_equipement_physique,statut_indicateur,trace,type_equipement,unite,version_calcul,qualite export_table equipementPhysique conso_elec_moyenne,critere,etapeacv,impact_unitaire,nom_entite,nom_entite_discriminator,nom_equipement,nom_source_donnee,nom_source_donnee_discriminator,quantite,source,statut_equipement_physique,statut_indicateur,trace,type_equipement,unite,version_calcul,qualite
export_table equipementVirtuel cluster,conso_elec_moyenne,critere,etapeacv,impact_unitaire,nom_entite,nom_entite_discriminator,nom_equipement,nom_equipement_virtuel,nom_source_donnee,nom_source_donnee_discriminator,source,statut_indicateur,trace,unite,version_calcul,qualite export_table equipementVirtuel cluster,conso_elec_moyenne,critere,etapeacv,impact_unitaire,nom_entite,nom_entite_discriminator,nom_equipement,nom_equipement_virtuel,nom_source_donnee,nom_source_donnee_discriminator,source,statut_indicateur,trace,unite,version_calcul,qualite
export_table application conso_elec_moyenne,critere,domaine,etapeacv,impact_unitaire,nom_application,nom_entite,nom_entite_discriminator,nom_equipement_physique,nom_equipement_virtuel,nom_source_donnee,nom_source_donnee_discriminator,source,sous_domaine,statut_indicateur,trace,type_environnement,unite,version_calcul,qualite export_table application conso_elec_moyenne,critere,domaine,etapeacv,impact_unitaire,nom_application,nom_entite,nom_entite_discriminator,nom_equipement_physique,nom_equipement_virtuel,nom_source_donnee,nom_source_donnee_discriminator,source,sous_domaine,statut_indicateur,trace,type_environnement,unite,version_calcul,qualite
export_table reseau etapeacv,critere,source,statut_indicateur,trace,version_calcul,impact_unitaire,unite,nom_entite,nom_equipement
export_table operationNonIT conso_elec_moyenne,critere,etapeacv,impact_unitaire,nom_entite,nom_entite_discriminator,nom_item_non_it,nom_source_donnee,nom_source_donnee_discriminator,quantite,source,statut_indicateur,trace,type_item,unite,version_calcul,qualite export_table operationNonIT conso_elec_moyenne,critere,etapeacv,impact_unitaire,nom_entite,nom_entite_discriminator,nom_item_non_it,nom_source_donnee,nom_source_donnee_discriminator,quantite,source,statut_indicateur,trace,type_item,unite,version_calcul,qualite
ALL_OK=true ALL_OK=true
......
...@@ -8,7 +8,7 @@ physical-eq-006;PIXEL 6;1;;2022-10-18;2022-12-18;0.1;0.2;0.2;Communication Devic ...@@ -8,7 +8,7 @@ physical-eq-006;PIXEL 6;1;;2022-10-18;2022-12-18;0.1;0.2;0.2;Communication Devic
physical-eq-007;UP2516D;1;;2022-07-31;2023-06-16;4.5;;;Monitor;Retired;France;;;;MY ENTERPRISE;;365;;;0.9;basse physical-eq-007;UP2516D;1;;2022-07-31;2023-06-16;4.5;;;Monitor;Retired;France;;;;MY ENTERPRISE;;365;;;0.9;basse
physical-eq-008;UP2516D;2;;2022-03-10;2023-06-16;4.5;1;2;Wrong / Type;In stock;France;;;;MY ENTERPRISE;;365;;COPE;0.6; physical-eq-008;UP2516D;2;;2022-03-10;2023-06-16;4.5;1;2;Wrong / Type;In stock;France;;;;MY ENTERPRISE;;365;;COPE;0.6;
physical-eq-009;;3;;2021-08-09;2023-06-16;4.5;1;2;IP Router;In use;France;;;;MY ENTERPRISE;;365;;COPE;0; physical-eq-009;;3;;2021-08-09;2023-06-16;4.5;1;2;IP Router;In use;France;;;;MY ENTERPRISE;;365;;COPE;0;
physical-eq-010;Unknown;3;;2021-08-09;2023-06-16;4.5;1;2;IP Router;In use;France;;;;MY ENTERPRISE;;365;;;; physical-eq-010;Cisco 5672UP;3;;2021-08-09;2023-06-16;4.5;1;2;IP Router;In use;France;;;;MY ENTERPRISE;;365;;;;
physical-eq-011;HP 8440p;1;;2021-08-05;2023-06-16;4.5;1;2;Wrong \type;Missing;France;;;;MY ENTERPRISE;;365;;;; physical-eq-011;HP 8440p;1;;2021-08-05;2023-06-16;4.5;1;2;Wrong \type;Missing;France;;;;MY ENTERPRISE;;365;;;;
physical-eq-012;HP 8440p;1;;2023-04-27;2023-06-16;4.5;1;2;Personal Computer;Retired;France;;;;MY ENTERPRISE;;365;;;; physical-eq-012;HP 8440p;1;;2023-04-27;2023-06-16;4.5;1;2;Personal Computer;Retired;France;;;;MY ENTERPRISE;;365;;;;
physical-eq-013;HP 8470w;2;;2025-08-23;2023-06-16;4.5;1;2;Personal Computer;Retired;France;;;;MY ENTERPRISE;;365;;;; physical-eq-013;HP 8470w;2;;2025-08-23;2023-06-16;4.5;1;2;Personal Computer;Retired;France;;;;MY ENTERPRISE;;365;;;;
......
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile default="true" name="Default" enabled="true" />
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
</profile>
<profile name="Annotation profile for common" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<processorPath useClasspath="false">
<entry name="$MAVEN_REPOSITORY$/org/mapstruct/mapstruct-processor/1.5.5.Final/mapstruct-processor-1.5.5.Final.jar" />
<entry name="$MAVEN_REPOSITORY$/org/mapstruct/mapstruct/1.5.5.Final/mapstruct-1.5.5.Final.jar" />
<entry name="$MAVEN_REPOSITORY$/org/projectlombok/lombok/1.18.30/lombok-1.18.30.jar" />
<entry name="$MAVEN_REPOSITORY$/org/projectlombok/lombok-mapstruct-binding/0.2.0/lombok-mapstruct-binding-0.2.0.jar" />
<entry name="$MAVEN_REPOSITORY$/com/github/therapi/therapi-runtime-javadoc-scribe/0.15.0/therapi-runtime-javadoc-scribe-0.15.0.jar" />
<entry name="$MAVEN_REPOSITORY$/com/github/therapi/therapi-runtime-javadoc/0.15.0/therapi-runtime-javadoc-0.15.0.jar" />
<entry name="$MAVEN_REPOSITORY$/org/instancio/instancio-processor/2.2.0/instancio-processor-2.2.0.jar" />
<entry name="$MAVEN_REPOSITORY$/org/instancio/instancio-core/2.2.0/instancio-core-2.2.0.jar" />
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/annotations/23.1.0/annotations-23.1.0.jar" />
</processorPath>
<module name="api-referentiel" />
<module name="api-event-indicateurs" />
<module name="common" />
<module name="api-event-enrichissement" />
<module name="api-rest-caculs" />
<module name="calculs" />
<module name="api-expositiondonneesentrees" />
<module name="api-event-donneesEntrees" />
<module name="api-event-calculs" />
</profile>
</annotationProcessing>
<bytecodeTargetLevel>
<module name="api-event-calcul-indicateurs" target="17" />
<module name="api-event-enrichissement" target="17" />
<module name="api-expositionDonneesEntrees" target="17" />
</bytecodeTargetLevel>
</component>
<component name="JavacSettings">
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
<module name="api-event-calculs" options="-parameters" />
<module name="api-event-donneesEntrees" options="-parameters" />
<module name="api-expositiondonneesentrees" options="-parameters" />
<module name="api-referentiel" options="-parameters" />
<module name="api-rest-caculs" options="-parameters" />
<module name="calculs" options="-parameters" />
<module name="common" options="-parameters" />
<module name="core" options="-parameters" />
</option>
</component>
</project>
\ No newline at end of file
...@@ -17,8 +17,7 @@ public class CalculEquipementPhysique { ...@@ -17,8 +17,7 @@ public class CalculEquipementPhysique {
private List<HypotheseDTO> hypotheses; private List<HypotheseDTO> hypotheses;
private CorrespondanceRefEquipementDTO correspondanceRefEquipement; private CorrespondanceRefEquipementDTO correspondanceRefEquipement;
private EquipementPhysiqueDTO equipementPhysique; private EquipementPhysiqueDTO equipementPhysique;
private TypeEquipementDTO typeEquipement; private TypeItemDTO typeItem;
private List<MixElectriqueDTO> mixElectriques; private List<FacteurCaracterisationDTO> facteurCaracterisations;
private List<ImpactReseauDTO> impactsReseau;
private List<ImpactEquipementDTO> impactsEquipement;
} }
\ No newline at end of file
...@@ -12,7 +12,6 @@ public class CalculSizes { ...@@ -12,7 +12,6 @@ public class CalculSizes {
private long nbIndicateurEquipementPhysique; private long nbIndicateurEquipementPhysique;
private long nbIndicateurEquipementVirtuel; private long nbIndicateurEquipementVirtuel;
private long nbIndicateurApplication; private long nbIndicateurApplication;
private long nbIndicateurReseau;
private long nbIndicateurOperationNonIT; private long nbIndicateurOperationNonIT;
private long nbIndicateurMessagerie; private long nbIndicateurMessagerie;
} }
...@@ -71,18 +71,6 @@ public class ReferentielClient { ...@@ -71,18 +71,6 @@ public class ReferentielClient {
return null; return null;
} }
@Cacheable(value = "TypeEquipement")
public TypeEquipementDTO getTypeEquipement(String type) {
try {
return interneNumEcoEvalApi.getTypeEquipement(type).block();
} catch (WebClientResponseException e) {
if (e.getStatusCode() != HttpStatusCode.valueOf(404)) {
throw new ExternalApiException(e);
}
}
return null;
}
@Cacheable(value = "TypeItem") @Cacheable(value = "TypeItem")
public TypeItemDTO getTypeItem(String type) { public TypeItemDTO getTypeItem(String type) {
try { try {
...@@ -95,43 +83,6 @@ public class ReferentielClient { ...@@ -95,43 +83,6 @@ public class ReferentielClient {
return null; return null;
} }
@Cacheable(value = "ImpactEquipement")
public ImpactEquipementDTO getImpactEquipement(String refEquipement, String critere, String etape) {
try {
return interneNumEcoEvalApi.getImpactEquipement(refEquipement, critere, etape).block();
} catch (WebClientResponseException e) {
if (e.getStatusCode() != HttpStatusCode.valueOf(404)) {
throw new ExternalApiException(e);
}
}
return null;
}
@Cacheable(value = "ImpactReseau")
public ImpactReseauDTO getImpactReseau(String refReseau, String critere, String etape) {
try {
return interneNumEcoEvalApi.getImpactReseau(refReseau, critere, etape).block();
} catch (WebClientResponseException e) {
if (e.getStatusCode() != HttpStatusCode.valueOf(404)) {
throw new ExternalApiException(e);
}
}
return null;
}
@Cacheable(value = "MixElectrique")
public MixElectriqueDTO getMixElectrique(String pays, String critere) {
if (pays == null || critere == null) return null;
try {
return interneNumEcoEvalApi.getMixElectrique(pays, critere).block();
} catch (WebClientResponseException e) {
if (e.getStatusCode() != HttpStatusCode.valueOf(404)) {
throw new ExternalApiException(e);
}
}
return null;
}
@Cacheable(value = "FacteurCaracterisationMixElec") @Cacheable(value = "FacteurCaracterisationMixElec")
public FacteurCaracterisationDTO getMixElectriqueFromFacteurCaracterisation(String critere, String localisation) { public FacteurCaracterisationDTO getMixElectriqueFromFacteurCaracterisation(String critere, String localisation) {
try { try {
......
...@@ -30,12 +30,6 @@ public class DomainConfiguration { ...@@ -30,12 +30,6 @@ public class DomainConfiguration {
return new CalculImpactApplicationServiceImpl(); return new CalculImpactApplicationServiceImpl();
} }
@Bean
public CalculImpactReseauService calculImpactReseauService() {
return new CalculImpactReseauServiceImpl();
}
@Bean @Bean
public CalculImpactOperationNonITService calculImpactOperationNonITService() { public CalculImpactOperationNonITService calculImpactOperationNonITService() {
return new CalculImpactOperationNonITServiceImpl(); return new CalculImpactOperationNonITServiceImpl();
......
package org.mte.numecoeval.calculs.infrastructure.controller.rest.calculs;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AllArgsConstructor;
import org.mte.numecoeval.calculs.domain.port.input.service.impl.CalculImpactReseauServiceImpl;
import org.mte.numecoeval.calculs.infrastructure.mapper.DomainMapper;
import org.mte.numecoeval.calculs.infrastructure.service.rest.calculs.CheckIndicateurService;
import org.mte.numecoeval.calculs.rest.generated.api.model.DemandeCalculImpactReseauEquipementPhysiqueRest;
import org.mte.numecoeval.calculs.rest.generated.api.model.IndicateurImpactReseauRest;
import org.mte.numecoeval.calculs.rest.generated.api.server.CalculsReseauApi;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestController;
@RestController
@AllArgsConstructor
public class CalculsReseauController implements CalculsReseauApi {
DomainMapper domainMapper;
ObjectMapper objectMapper;
CheckIndicateurService checkIndicateurService;
/**
* POST /calculs/reseau/equipementPhysique
*
* @param demandeCalculImpactReseauEquipementPhysiqueRest (required)
* @return la liste d'indicateurs calcules
*/
@Override
public ResponseEntity<IndicateurImpactReseauRest> calculerImpactReseau(DemandeCalculImpactReseauEquipementPhysiqueRest demandeCalculImpactReseauEquipementPhysiqueRest) {
var demandeCalcul = domainMapper.toDomain(demandeCalculImpactReseauEquipementPhysiqueRest);
var indicateur = new CalculImpactReseauServiceImpl().calculerImpactReseau(demandeCalcul);
return checkIndicateurService.isOk(indicateur.getStatutIndicateur()) ?
ResponseEntity.ok(domainMapper.toRest(indicateur)) :
ResponseEntity.badRequest().body(domainMapper.toRest(indicateur));
}
}
...@@ -26,8 +26,6 @@ public interface DomainMapper { ...@@ -26,8 +26,6 @@ public interface DomainMapper {
/* Référentiels */ /* Référentiels */
ReferentielTypeEquipement toDomain(TypeEquipementRest rest);
ReferentielCorrespondanceRefEquipement toDomain(CorrespondanceRefEquipementRest rest); ReferentielCorrespondanceRefEquipement toDomain(CorrespondanceRefEquipementRest rest);
ReferentielHypothese toDomain(HypotheseRest rest); ReferentielHypothese toDomain(HypotheseRest rest);
...@@ -36,13 +34,6 @@ public interface DomainMapper { ...@@ -36,13 +34,6 @@ public interface DomainMapper {
ReferentielCritere toDomain(CritereRest rest); ReferentielCritere toDomain(CritereRest rest);
ReferentielImpactEquipement toDomain(ImpactEquipementRest rest);
@Mapping(source = "valeur", target = "impactReseauMobileMoyen")
ReferentielImpactReseau toDomain(ImpactReseauRest rest);
ReferentielMixElectrique toDomain(MixElectriqueRest rest);
ReferentielImpactMessagerie toDomain(ImpactMessagerieRest rest); ReferentielImpactMessagerie toDomain(ImpactMessagerieRest rest);
/*Indicateurs*/ /*Indicateurs*/
...@@ -58,8 +49,6 @@ public interface DomainMapper { ...@@ -58,8 +49,6 @@ public interface DomainMapper {
IndicateurImpactApplicationRest toRest(ImpactApplication domain); IndicateurImpactApplicationRest toRest(ImpactApplication domain);
IndicateurImpactReseauRest toRest(ImpactReseau domain);
IndicateurImpactOperationNonITRest toRest(ImpactOperationNonIT domain); IndicateurImpactOperationNonITRest toRest(ImpactOperationNonIT domain);
IndicateurImpactMessagerieRest toRest(ImpactMessagerie domain); IndicateurImpactMessagerieRest toRest(ImpactMessagerie domain);
...@@ -68,9 +57,6 @@ public interface DomainMapper { ...@@ -68,9 +57,6 @@ public interface DomainMapper {
@Mapping(target = "dateCalcul", expression = "java(java.time.LocalDateTime.now())") @Mapping(target = "dateCalcul", expression = "java(java.time.LocalDateTime.now())")
DemandeCalculImpactEquipementPhysique toDomain(DemandeCalculImpactEquipementPhysiqueRest rest); DemandeCalculImpactEquipementPhysique toDomain(DemandeCalculImpactEquipementPhysiqueRest rest);
@Mapping(target = "dateCalcul", expression = "java(java.time.LocalDateTime.now())")
DemandeCalculImpactReseau toDomain(DemandeCalculImpactReseauEquipementPhysiqueRest rest);
@Mapping(target = "dateCalcul", expression = "java(java.time.LocalDateTime.now())") @Mapping(target = "dateCalcul", expression = "java(java.time.LocalDateTime.now())")
DemandeCalculImpactEquipementVirtuel toDomain(DemandeCalculEquipementVirtuelRest rest); DemandeCalculImpactEquipementVirtuel toDomain(DemandeCalculEquipementVirtuelRest rest);
......
package org.mte.numecoeval.calculs.infrastructure.mapper; package org.mte.numecoeval.calculs.infrastructure.mapper;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mte.numecoeval.calculs.domain.data.referentiel.*; import org.mte.numecoeval.calculs.domain.data.referentiel.*;
import org.mte.numecoeval.calculs.referentiels.generated.api.model.*; import org.mte.numecoeval.calculs.referentiels.generated.api.model.*;
...@@ -14,11 +13,6 @@ public interface ReferentielMapper { ...@@ -14,11 +13,6 @@ public interface ReferentielMapper {
ReferentielCritere toCritere(CritereDTO critereDTO); ReferentielCritere toCritere(CritereDTO critereDTO);
@Mapping(source = "valeur", target = "impactReseauMobileMoyen")
ReferentielImpactReseau toImpactReseau(ImpactReseauDTO impactReseauDTO);
List<ReferentielImpactReseau> toListImpactReseau(List<ImpactReseauDTO> impactReseauDTO);
ReferentielHypothese toHypothese(HypotheseDTO hypotheseDTO); ReferentielHypothese toHypothese(HypotheseDTO hypotheseDTO);
List<ReferentielHypothese> toListHypothese(List<HypotheseDTO> hypotheseDTO); List<ReferentielHypothese> toListHypothese(List<HypotheseDTO> hypotheseDTO);
...@@ -27,21 +21,11 @@ public interface ReferentielMapper { ...@@ -27,21 +21,11 @@ public interface ReferentielMapper {
List<ReferentielFacteurCaracterisation> toListFacteurCaracterisation(List<FacteurCaracterisationDTO> facteurCaracterisationDTO); List<ReferentielFacteurCaracterisation> toListFacteurCaracterisation(List<FacteurCaracterisationDTO> facteurCaracterisationDTO);
ReferentielImpactEquipement toImpactEquipement(ImpactEquipementDTO impactEquipementDTO);
List<ReferentielImpactEquipement> toListImpactEquipement(List<ImpactEquipementDTO> impactEquipementDTO);
ReferentielMixElectrique toMixElectrique(MixElectriqueDTO mixElectriqueDTO);
List<ReferentielMixElectrique> toListMixElectrique(List<MixElectriqueDTO> mixElectriqueDTO);
ReferentielImpactMessagerie toImpactMessagerie(ImpactMessagerieDTO impactMessagerieDTO); ReferentielImpactMessagerie toImpactMessagerie(ImpactMessagerieDTO impactMessagerieDTO);
List<ReferentielImpactMessagerie> toListImpactMessagerie(List<ImpactMessagerieDTO> impactMessagerieDTO); List<ReferentielImpactMessagerie> toListImpactMessagerie(List<ImpactMessagerieDTO> impactMessagerieDTO);
ReferentielCorrespondanceRefEquipement toCorrespondanceRefEquipement(CorrespondanceRefEquipementDTO dto); ReferentielCorrespondanceRefEquipement toCorrespondanceRefEquipement(CorrespondanceRefEquipementDTO dto);
ReferentielTypeEquipement toTypeEquipement(TypeEquipementDTO dto);
ReferentielTypeItem toTypeItem(TypeItemDTO dto); ReferentielTypeItem toTypeItem(TypeItemDTO dto);
} }
...@@ -89,8 +89,7 @@ public class IndicateurRepository { ...@@ -89,8 +89,7 @@ public class IndicateurRepository {
public void saveIndicateursEquipements( public void saveIndicateursEquipements(
List<ImpactEquipementPhysique> impactsEquipementPhysique, List<ImpactEquipementPhysique> impactsEquipementPhysique,
List<ImpactEquipementVirtuel> impactsEquipementVirtuels, List<ImpactEquipementVirtuel> impactsEquipementVirtuels,
List<ImpactApplication> impactsApplications, List<ImpactApplication> impactsApplications
List<ImpactReseau> impactsReseau
) { ) {
if (impactsEquipementPhysique.isEmpty()) return; if (impactsEquipementPhysique.isEmpty()) return;
...@@ -192,35 +191,6 @@ public class IndicateurRepository { ...@@ -192,35 +191,6 @@ public class IndicateurRepository {
ps.executeBatch(); ps.executeBatch();
} }
try (var ps = conn.prepareStatement(INSERT_RESEAU_QUERY)) {
for (ImpactReseau indicateur : impactsReseau) {
ps.setTimestamp(1, PreparedStatementUtils.getTimestampFromLocalDateTime(indicateur.getDateCalcul()));
ps.setDate(2, PreparedStatementUtils.getDateFromLocalDate(indicateur.getDateLot()));
ps.setDate(3, PreparedStatementUtils.getDateFromLocalDate(Optional.ofNullable(indicateur.getDateLot()).orElse(LocalDate.EPOCH)));
ps.setString(4, indicateur.getNomOrganisation());
ps.setString(5, StringUtils.defaultString(indicateur.getNomOrganisation()));
ps.setString(6, indicateur.getEtapeACV());
ps.setString(7, indicateur.getCritere());
ps.setString(8, indicateur.getNomEquipement());
ps.setString(9, indicateur.getNomEntite());
ps.setString(10, StringUtils.defaultString(indicateur.getNomEntite()));
ps.setString(11, indicateur.getSource());
ps.setString(12, indicateur.getStatutIndicateur());
ps.setString(13, indicateur.getTrace());
ps.setString(14, indicateur.getVersionCalcul());
PreparedStatementUtils.setDoubleValue(ps, 15, indicateur.getImpactUnitaire());
ps.setString(16, indicateur.getUnite());
ps.setString(17, indicateur.getNomLot());
ps.setString(18, indicateur.getNomSourceDonnee());
ps.setString(19, StringUtils.defaultString(indicateur.getNomSourceDonnee()));
ps.addBatch();
}
ps.executeBatch();
}
conn.commit(); conn.commit();
} catch (SQLException e) { } catch (SQLException e) {
log.error("Une erreur s'est produite lors de l'insertion dans PostgreSQL. Exception: ", e); log.error("Une erreur s'est produite lors de l'insertion dans PostgreSQL. Exception: ", e);
......
...@@ -51,11 +51,10 @@ public class CalculEquipementPhysiqueService { ...@@ -51,11 +51,10 @@ public class CalculEquipementPhysiqueService {
.equipementPhysique(entreesMapper.toDomain(calculEquipementPhysique.getEquipementPhysique())) .equipementPhysique(entreesMapper.toDomain(calculEquipementPhysique.getEquipementPhysique()))
.etape(referentielMapper.toEtape(etapeDTO)) .etape(referentielMapper.toEtape(etapeDTO))
.critere(referentielMapper.toCritere(critereDTO)) .critere(referentielMapper.toCritere(critereDTO))
.typeEquipement(referentielMapper.toTypeEquipement(calculEquipementPhysique.getTypeEquipement())) .typeItem(referentielMapper.toTypeItem(calculEquipementPhysique.getTypeItem()))
.correspondanceRefEquipement(referentielMapper.toCorrespondanceRefEquipement(calculEquipementPhysique.getCorrespondanceRefEquipement())) .correspondanceRefEquipement(referentielMapper.toCorrespondanceRefEquipement(calculEquipementPhysique.getCorrespondanceRefEquipement()))
.hypotheses(referentielMapper.toListHypothese(calculEquipementPhysique.getHypotheses())) .hypotheses(referentielMapper.toListHypothese(calculEquipementPhysique.getHypotheses()))
.mixElectriques(referentielMapper.toListMixElectrique(calculEquipementPhysique.getMixElectriques())) .facteurCaracterisations(referentielMapper.toListFacteurCaracterisation(calculEquipementPhysique.getFacteurCaracterisations()))
.impactEquipements(referentielMapper.toListImpactEquipement(calculEquipementPhysique.getImpactsEquipement()))
.optionsCalcul(new OptionsCalcul(dureeUsage)) .optionsCalcul(new OptionsCalcul(dureeUsage))
.build(); .build();
......
package org.mte.numecoeval.calculs.infrastructure.service.calcul;
import lombok.AllArgsConstructor;
import org.mte.numecoeval.calculs.domain.data.demande.DemandeCalculImpactReseau;
import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactReseau;
import org.mte.numecoeval.calculs.domain.model.CalculEquipementPhysique;
import org.mte.numecoeval.calculs.domain.port.input.service.CalculImpactReseauService;
import org.mte.numecoeval.calculs.infrastructure.mapper.EntreesMapper;
import org.mte.numecoeval.calculs.infrastructure.mapper.ReferentielMapper;
import org.mte.numecoeval.calculs.referentiels.generated.api.model.CritereDTO;
import org.mte.numecoeval.calculs.referentiels.generated.api.model.EtapeDTO;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Service
@AllArgsConstructor
public class CalculReseauService {
EntreesMapper entreesMapper;
ReferentielMapper referentielMapper;
CalculImpactReseauService calculImpactReseauService;
/**
* Calcule les impacts réseau d'un équipement physique
* Returne la liste d'impacts
*
* @param calculEquipementPhysique l'equipement physique
* @return la liste d'impacts
*/
public List<ImpactReseau> calculImpactReseau(CalculEquipementPhysique calculEquipementPhysique) {
List<ImpactReseau> impactReseauList = new ArrayList<>();
if (calculEquipementPhysique == null ||
calculEquipementPhysique.getEquipementPhysique() == null ||
calculEquipementPhysique.getEquipementPhysique().getGoTelecharge() == null) return impactReseauList;
LocalDateTime dateCalcul = LocalDateTime.now();
for (EtapeDTO etape : calculEquipementPhysique.getEtapes()) {
for (CritereDTO critere : calculEquipementPhysique.getCriteres()) {
impactReseauList.add(calculImpactReseauService.calculerImpactReseau(DemandeCalculImpactReseau.builder()
.dateCalcul(dateCalcul)
.equipementPhysique(entreesMapper.toDomain(calculEquipementPhysique.getEquipementPhysique()))
.etape(referentielMapper.toEtape(etape))
.critere(referentielMapper.toCritere(critere))
.impactsReseau(referentielMapper.toListImpactReseau(calculEquipementPhysique.getImpactsReseau()))
.build()));
}
}
return impactReseauList;
}
}
\ No newline at end of file
...@@ -7,7 +7,6 @@ import org.mte.numecoeval.calculs.domain.data.entree.EquipementVirtuel; ...@@ -7,7 +7,6 @@ import org.mte.numecoeval.calculs.domain.data.entree.EquipementVirtuel;
import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactApplication; import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactApplication;
import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactEquipementPhysique; import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactEquipementPhysique;
import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactEquipementVirtuel; import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactEquipementVirtuel;
import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactReseau;
import org.mte.numecoeval.calculs.domain.model.CalculEquipementPhysique; import org.mte.numecoeval.calculs.domain.model.CalculEquipementPhysique;
import org.mte.numecoeval.calculs.domain.model.CalculSizes; import org.mte.numecoeval.calculs.domain.model.CalculSizes;
import org.mte.numecoeval.calculs.infrastructure.repository.ApplicationRepository; import org.mte.numecoeval.calculs.infrastructure.repository.ApplicationRepository;
...@@ -33,7 +32,6 @@ public class IntegrationCalculEquipementsService { ...@@ -33,7 +32,6 @@ public class IntegrationCalculEquipementsService {
CalculEquipementPhysiqueService calculEquipementPhysiqueService; CalculEquipementPhysiqueService calculEquipementPhysiqueService;
CalculEquipementVirtuelService calculEquipementVirtuelService; CalculEquipementVirtuelService calculEquipementVirtuelService;
CalculApplicationService calculApplicationService; CalculApplicationService calculApplicationService;
CalculReseauService calculReseauService;
/** /**
* Calcul les impacts d'un équipement physique enrichi, liste des impacts: * Calcul les impacts d'un équipement physique enrichi, liste des impacts:
...@@ -62,7 +60,6 @@ public class IntegrationCalculEquipementsService { ...@@ -62,7 +60,6 @@ public class IntegrationCalculEquipementsService {
var ttAfterClear = System.currentTimeMillis(); var ttAfterClear = System.currentTimeMillis();
List<ImpactEquipementPhysique> impactEquipementPhysiqueList = calculEquipementPhysiqueService.calculImpactEquipementPhysique(calculEquipementPhysique); List<ImpactEquipementPhysique> impactEquipementPhysiqueList = calculEquipementPhysiqueService.calculImpactEquipementPhysique(calculEquipementPhysique);
List<ImpactReseau> impactReseauList = calculReseauService.calculImpactReseau(calculEquipementPhysique);
// get equipements virtuels // get equipements virtuels
List<EquipementVirtuel> equipementVirtuelList = equipementVirtuelRepository.findEquipementVirtuels(nomOrganisation, nomLot, nomEquipementPhysique); List<EquipementVirtuel> equipementVirtuelList = equipementVirtuelRepository.findEquipementVirtuels(nomOrganisation, nomLot, nomEquipementPhysique);
...@@ -95,7 +92,7 @@ public class IntegrationCalculEquipementsService { ...@@ -95,7 +92,7 @@ public class IntegrationCalculEquipementsService {
var ttAfterEqVAndApp = System.currentTimeMillis(); var ttAfterEqVAndApp = System.currentTimeMillis();
// save impacts into db // save impacts into db
indicateurRepository.saveIndicateursEquipements(impactEquipementPhysiqueList, allImpactVirtuel, allImpactApplication, impactReseauList); indicateurRepository.saveIndicateursEquipements(impactEquipementPhysiqueList, allImpactVirtuel, allImpactApplication);
var ttAfterSave = System.currentTimeMillis(); var ttAfterSave = System.currentTimeMillis();
...@@ -124,7 +121,6 @@ public class IntegrationCalculEquipementsService { ...@@ -124,7 +121,6 @@ public class IntegrationCalculEquipementsService {
result.setNbIndicateurEquipementPhysique(impactEquipementPhysiqueList.size()); result.setNbIndicateurEquipementPhysique(impactEquipementPhysiqueList.size());
result.setNbIndicateurEquipementVirtuel(allImpactVirtuel.size()); result.setNbIndicateurEquipementVirtuel(allImpactVirtuel.size());
result.setNbIndicateurApplication(allImpactApplication.size()); result.setNbIndicateurApplication(allImpactApplication.size());
result.setNbIndicateurReseau(impactReseauList.size());
return result; return result;
} }
} }
\ No newline at end of file
...@@ -79,52 +79,46 @@ public class EnrichissementEquipementPhysiqueService { ...@@ -79,52 +79,46 @@ public class EnrichissementEquipementPhysiqueService {
}); });
calculEquipementPhysique.setHypotheses(hypotheses); calculEquipementPhysique.setHypotheses(hypotheses);
if (equipementPhysiqueDTO.getModele() != null) { if (equipementPhysiqueDTO.getModele() != null) {
calculEquipementPhysique.setCorrespondanceRefEquipement(referentielClient.getCorrespondanceRefEquipement(equipementPhysiqueDTO.getModele())); calculEquipementPhysique.setCorrespondanceRefEquipement(referentielClient.getCorrespondanceRefEquipement(equipementPhysiqueDTO.getModele()));
} }
calculEquipementPhysique.setTypeEquipement(referentielClient.getTypeEquipement(equipementPhysiqueDTO.getType()));
calculEquipementPhysique.setImpactsEquipement(new ArrayList<>()); calculEquipementPhysique.setTypeItem(referentielClient.getTypeItem(equipementPhysiqueDTO.getType()));
calculEquipementPhysique.setImpactsReseau(new ArrayList<>());
calculEquipementPhysique.setMixElectriques(new ArrayList<>()); calculEquipementPhysique.setFacteurCaracterisations(new ArrayList<>());
for (var critere : calculEquipementPhysique.getCriteres()) { for (var critere : calculEquipementPhysique.getCriteres()) {
for (var etape : calculEquipementPhysique.getEtapes()) { for (var etape : calculEquipementPhysique.getEtapes()) {
if (calculEquipementPhysique.getCorrespondanceRefEquipement() != null) { if (calculEquipementPhysique.getCorrespondanceRefEquipement() != null) {
calculEquipementPhysique.getImpactsEquipement().add( calculEquipementPhysique.getFacteurCaracterisations().add(
referentielClient.getImpactEquipement( referentielClient.getFacteurCaracterisationByCritereAndEtapeAndNom(
calculEquipementPhysique.getCorrespondanceRefEquipement().getRefEquipementCible(),
critere.getNomCritere(), critere.getNomCritere(),
etape.getCode() etape.getCode(),
calculEquipementPhysique.getCorrespondanceRefEquipement().getRefEquipementCible()
) )
); );
} else if (calculEquipementPhysique.getTypeEquipement() != null } else if (calculEquipementPhysique.getTypeItem() != null
&& StringUtils.isNotBlank(calculEquipementPhysique.getTypeEquipement().getRefEquipementParDefaut())) { && StringUtils.isNotBlank(calculEquipementPhysique.getTypeItem().getRefItemParDefaut())) {
calculEquipementPhysique.getImpactsEquipement().add( calculEquipementPhysique.getFacteurCaracterisations().add(
referentielClient.getImpactEquipement( referentielClient.getFacteurCaracterisationByCritereAndEtapeAndNom(
calculEquipementPhysique.getTypeEquipement().getRefEquipementParDefaut(),
critere.getNomCritere(), critere.getNomCritere(),
etape.getCode() etape.getCode(),
calculEquipementPhysique.getTypeItem().getRefItemParDefaut()
) )
); );
} }
calculEquipementPhysique.getImpactsReseau().add(
referentielClient.getImpactReseau(
"impactReseauMobileMoyen",
critere.getNomCritere(),
etape.getCode()
)
);
} }
var mixElec = referentielClient.getMixElectrique(equipementPhysiqueDTO.getPaysDUtilisation(), critere.getNomCritere()); var mixElec = referentielClient.getMixElectriqueFromFacteurCaracterisation(critere.getNomCritere(), equipementPhysiqueDTO.getPaysDUtilisation());
if (mixElec != null) calculEquipementPhysique.getMixElectriques().add(mixElec); if (mixElec != null) calculEquipementPhysique.getFacteurCaracterisations().add(mixElec);
if (equipementPhysiqueDTO.getDataCenter() != null if (equipementPhysiqueDTO.getDataCenter() != null
&& StringUtils.isNotBlank(equipementPhysiqueDTO.getDataCenter().getLocalisation()) && StringUtils.isNotBlank(equipementPhysiqueDTO.getDataCenter().getLocalisation())
&& !StringUtils.equals(equipementPhysiqueDTO.getPaysDUtilisation(), equipementPhysiqueDTO.getDataCenter().getLocalisation())) { && !StringUtils.equals(equipementPhysiqueDTO.getPaysDUtilisation(), equipementPhysiqueDTO.getDataCenter().getLocalisation())) {
var mixElecDataCenter = referentielClient.getMixElectrique(equipementPhysiqueDTO.getDataCenter().getLocalisation(), critere.getNomCritere()); var mixElecDataCenter = referentielClient.getMixElectriqueFromFacteurCaracterisation(critere.getNomCritere(), equipementPhysiqueDTO.getDataCenter().getLocalisation());
if (mixElecDataCenter != null) calculEquipementPhysique.getMixElectriques().add(mixElecDataCenter); if (mixElecDataCenter != null)
calculEquipementPhysique.getFacteurCaracterisations().add(mixElecDataCenter);
} }
} }
......
...@@ -9,7 +9,10 @@ import org.mockito.ArgumentCaptor; ...@@ -9,7 +9,10 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Mockito; import org.mockito.Mockito;
import org.mte.numecoeval.calculs.domain.data.entree.Application; import org.mte.numecoeval.calculs.domain.data.entree.Application;
import org.mte.numecoeval.calculs.domain.data.entree.EquipementVirtuel; import org.mte.numecoeval.calculs.domain.data.entree.EquipementVirtuel;
import org.mte.numecoeval.calculs.domain.data.indicateurs.*; import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactApplication;
import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactEquipementPhysique;
import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactEquipementVirtuel;
import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactMessagerie;
import org.mte.numecoeval.calculs.domain.model.CalculEquipementPhysique; import org.mte.numecoeval.calculs.domain.model.CalculEquipementPhysique;
import org.mte.numecoeval.calculs.domain.model.CalculMessagerie; import org.mte.numecoeval.calculs.domain.model.CalculMessagerie;
import org.mte.numecoeval.calculs.infrastructure.repository.*; import org.mte.numecoeval.calculs.infrastructure.repository.*;
...@@ -41,7 +44,6 @@ import static org.mockito.Mockito.times; ...@@ -41,7 +44,6 @@ import static org.mockito.Mockito.times;
@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class, DataSourceAutoConfiguration.class, KafkaAutoConfiguration.class}) @EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class, DataSourceAutoConfiguration.class, KafkaAutoConfiguration.class})
class ApiEventCalculsApplicationTests { class ApiEventCalculsApplicationTests {
@Autowired @Autowired
IntegrationCalculEquipementsService integrationCalculEquipementsService; IntegrationCalculEquipementsService integrationCalculEquipementsService;
@Autowired @Autowired
...@@ -69,8 +71,6 @@ class ApiEventCalculsApplicationTests { ...@@ -69,8 +71,6 @@ class ApiEventCalculsApplicationTests {
ArgumentCaptor<List<ImpactEquipementPhysique>> captorImpactEqPh = ArgumentCaptor.forClass((Class) List.class); ArgumentCaptor<List<ImpactEquipementPhysique>> captorImpactEqPh = ArgumentCaptor.forClass((Class) List.class);
ArgumentCaptor<List<ImpactEquipementVirtuel>> captorImpactEqV = ArgumentCaptor.forClass((Class) List.class); ArgumentCaptor<List<ImpactEquipementVirtuel>> captorImpactEqV = ArgumentCaptor.forClass((Class) List.class);
ArgumentCaptor<List<ImpactApplication>> captorImpactApp = ArgumentCaptor.forClass((Class) List.class); ArgumentCaptor<List<ImpactApplication>> captorImpactApp = ArgumentCaptor.forClass((Class) List.class);
ArgumentCaptor<List<ImpactReseau>> captorImpactReseau = ArgumentCaptor.forClass((Class) List.class);
ArgumentCaptor<List<ImpactMessagerie>> captorImpactMsg = ArgumentCaptor.forClass((Class) List.class); ArgumentCaptor<List<ImpactMessagerie>> captorImpactMsg = ArgumentCaptor.forClass((Class) List.class);
@Test @Test
...@@ -120,18 +120,16 @@ class ApiEventCalculsApplicationTests { ...@@ -120,18 +120,16 @@ class ApiEventCalculsApplicationTests {
integrationCalculEquipementsService.calculImpactEquipementPhysique(calculEquipementPhysique); integrationCalculEquipementsService.calculImpactEquipementPhysique(calculEquipementPhysique);
/* CAPTURE Impacts lists */ /* CAPTURE Impacts lists */
Mockito.verify(indicateurRepository, times(1)).saveIndicateursEquipements(captorImpactEqPh.capture(), captorImpactEqV.capture(), captorImpactApp.capture(), captorImpactReseau.capture()); Mockito.verify(indicateurRepository, times(1)).saveIndicateursEquipements(captorImpactEqPh.capture(), captorImpactEqV.capture(), captorImpactApp.capture());
List<ImpactEquipementPhysique> actualImpactEqPh = captorImpactEqPh.getValue(); List<ImpactEquipementPhysique> actualImpactEqPh = captorImpactEqPh.getValue();
List<ImpactEquipementVirtuel> actualImpactEqV = captorImpactEqV.getValue(); List<ImpactEquipementVirtuel> actualImpactEqV = captorImpactEqV.getValue();
List<ImpactApplication> actualImpactApp = captorImpactApp.getValue(); List<ImpactApplication> actualImpactApp = captorImpactApp.getValue();
List<ImpactReseau> actualImpactReseau = captorImpactReseau.getValue();
/* Check EXPECTED */ /* Check EXPECTED */
Assertions.assertEquals(4, actualImpactEqPh.size()); Assertions.assertEquals(4, actualImpactEqPh.size());
Assertions.assertEquals(4, actualImpactEqV.size()); Assertions.assertEquals(4, actualImpactEqV.size());
Assertions.assertEquals(4, actualImpactApp.size()); Assertions.assertEquals(4, actualImpactApp.size());
Assertions.assertEquals(4, actualImpactReseau.size());
/* Check all statutIndicateur = OK */ /* Check all statutIndicateur = OK */
// Assertions.assertTrue(actualImpactEqPh.stream().allMatch(i -> "OK".equals(i.getStatutIndicateur()))); // Assertions.assertTrue(actualImpactEqPh.stream().allMatch(i -> "OK".equals(i.getStatutIndicateur())));
......
package org.mte.numecoeval.calculs.infrastructure.service.calcul;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.junit.jupiter.MockitoExtension;
import org.mte.numecoeval.calculs.domain.model.CalculEquipementPhysique;
import java.util.List;
@ExtendWith(MockitoExtension.class)
class CalculReseauServiceTest {
@InjectMocks
CalculReseauService calculReseauService;
private static final ObjectMapper mapper = new ObjectMapper().registerModule(new JavaTimeModule());
@Test
void testCalculImpactReseau_nullCases() throws JsonProcessingException {
Assertions.assertEquals(List.of(), calculReseauService.calculImpactReseau(null));
Assertions.assertEquals(List.of(), calculReseauService.calculImpactReseau(new CalculEquipementPhysique()));
Assertions.assertEquals(List.of(), calculReseauService.calculImpactReseau(mapper.readValue("""
{ "equipementPhysique": {} }
""", CalculEquipementPhysique.class)));
Assertions.assertEquals(List.of(), calculReseauService.calculImpactReseau(mapper.readValue("""
{
"equipementPhysique": {
"goTelecharge": null
}
}
""", CalculEquipementPhysique.class)));
}
}
\ No newline at end of file
...@@ -88,16 +88,22 @@ class EnrichissementEquipementPhysiqueServiceTest { ...@@ -88,16 +88,22 @@ class EnrichissementEquipementPhysiqueServiceTest {
/* MOCK REFERENTIEL : Etapes */ /* MOCK REFERENTIEL : Etapes */
Mockito.lenient().when(referentielClient.getEtapes()).thenReturn(Arrays.asList(mapper.readValue(""" Mockito.lenient().when(referentielClient.getEtapes()).thenReturn(Arrays.asList(mapper.readValue("""
[{ "code": "UTILISATION", "libelle": "Using" }] [
{ "code": "FABRICATION", "libelle": "Manufacturing" },
{ "code": "DISTRIBUTION", "libelle": "Transportation" },
{ "code": "UTILISATION", "libelle": "Using" },
{ "code": "FIN_DE_VIE", "libelle": "End of Life" }
]
""", EtapeDTO[].class))); """, EtapeDTO[].class)));
/* MOCK REFERENTIEL : Criteres */ /* MOCK REFERENTIEL : Criteres */
Mockito.lenient().when(referentielClient.getCriteres()).thenReturn(Arrays.asList(mapper.readValue(""" Mockito.lenient().when(referentielClient.getCriteres()).thenReturn(Arrays.asList(mapper.readValue("""
[{ [
"nomCritere": "Climate change", { "nomCritere": "Climate change" },
"unite": "kg CO2 eq", { "nomCritere": "Particulate matter and respiratory inorganics" },
"description": "Greenhouse gases (GHG)" { "nomCritere": "Ionising radiation" },
}] { "nomCritere": "Acidification" }
]
""", CritereDTO[].class))); """, CritereDTO[].class)));
/* MOCK REFERENTIEL : Hypothese */ /* MOCK REFERENTIEL : Hypothese */
...@@ -109,42 +115,11 @@ class EnrichissementEquipementPhysiqueServiceTest { ...@@ -109,42 +115,11 @@ class EnrichissementEquipementPhysiqueServiceTest {
} }
""", HypotheseDTO.class)); """, HypotheseDTO.class));
/* MOCK REFERENTIEL : ImpactReseau */
Mockito.lenient().when(referentielClient.getImpactReseau(any(), any(), any())).thenReturn(new ImpactReseauDTO());
/* MOCK REFERENTIEL : MixElectrique */
var mixFr = new MixElectriqueDTO();
mixFr.setPays("FR");
Mockito.lenient().when(referentielClient.getMixElectrique("France", "Climate change")).thenReturn(mixFr);
Mockito.lenient().when(referentielClient.getMixElectrique(null, "Climate change")).thenReturn(null);
} var mixFr = new FacteurCaracterisationDTO();
mixFr.setLocalisation("FR");
void initMocksEtapesAndCriteres() throws JsonProcessingException { Mockito.lenient().when(referentielClient.getMixElectriqueFromFacteurCaracterisation("Climate change", "France")).thenReturn(mixFr);
/* MOCK REFERENTIEL : Etapes */ Mockito.lenient().when(referentielClient.getMixElectriqueFromFacteurCaracterisation("Climate change", null)).thenReturn(null);
Mockito.lenient().when(referentielClient.getEtapes()).thenReturn(Arrays.asList(mapper.readValue("""
[{ "code": "FABRICATION", "libelle": "Manufacturing" },
{ "code": "DISTRIBUTION", "libelle": "Transportation" },
{ "code": "UTILISATION", "libelle": "Using" },
{ "code": "FIN_DE_VIE", "libelle": "End of Life" }]
""", EtapeDTO[].class)));
Mockito.lenient().when(referentielClient.getCriteres()).thenReturn(Arrays.asList(mapper.readValue("""
[{
"nomCritere": "Climate change",
"unite": "kg CO2 eq",
"description": "Greenhouse gases (GHG)"
},
{
"nomCritere": "Particulate matter and respiratory inorganics"
},
{
"nomCritere": "Ionising radiation"
},
{
"nomCritere": "Acidification"
}]
""", CritereDTO[].class)));
} }
@Test @Test
...@@ -163,20 +138,19 @@ class EnrichissementEquipementPhysiqueServiceTest { ...@@ -163,20 +138,19 @@ class EnrichissementEquipementPhysiqueServiceTest {
} }
""", CorrespondanceRefEquipementDTO.class)); """, CorrespondanceRefEquipementDTO.class));
/* MOCK REFERENTIEL : ImpactEquipement */ /* MOCK REFERENTIEL : FacteurCaracterisation */
var impactEquipementDTO = new ImpactEquipementDTO(); var fcDTO = new FacteurCaracterisationDTO();
impactEquipementDTO.setValeur(1.1); fcDTO.setValeur(1.1);
Mockito.when(referentielClient.getImpactEquipement(eq("cible"), any(), any())).thenReturn(impactEquipementDTO); Mockito.when(referentielClient.getFacteurCaracterisationByCritereAndEtapeAndNom(any(), any(), eq("cible"))).thenReturn(fcDTO);
var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO); var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO);
Assertions.assertEquals(1, actual.getEtapes().size()); Assertions.assertEquals(4, actual.getEtapes().size());
Assertions.assertEquals(1, actual.getCriteres().size()); Assertions.assertEquals(4, actual.getCriteres().size());
Assertions.assertEquals(4, actual.getHypotheses().size()); Assertions.assertEquals(4, actual.getHypotheses().size());
Assertions.assertEquals(1, actual.getMixElectriques().size()); Assertions.assertEquals(17, actual.getFacteurCaracterisations().size());
Assertions.assertEquals("FR", actual.getMixElectriques().get(0).getPays()); Assertions.assertEquals(1.1, actual.getFacteurCaracterisations().getFirst().getValeur());
Assertions.assertEquals(1.1, actual.getImpactsEquipement().get(0).getValeur());
Assertions.assertEquals("HAUTE", actual.getEquipementPhysique().getQualite()); Assertions.assertEquals("HAUTE", actual.getEquipementPhysique().getQualite());
} }
...@@ -184,34 +158,30 @@ class EnrichissementEquipementPhysiqueServiceTest { ...@@ -184,34 +158,30 @@ class EnrichissementEquipementPhysiqueServiceTest {
void testServiceEnrichissementEquipementPhysique_typeEquipement() throws JsonProcessingException { void testServiceEnrichissementEquipementPhysique_typeEquipement() throws JsonProcessingException {
/* MOCK REFERENTIEL : CorrespondanceRefEquipement */ /* MOCK REFERENTIEL : CorrespondanceRefEquipement */
Mockito.when(referentielClient.getTypeEquipement("Server")).thenReturn(mapper.readValue(""" Mockito.when(referentielClient.getTypeItem("Server")).thenReturn(mapper.readValue("""
{ {
"refEquipementParDefaut": "default-ref-server" "refItemParDefaut": "default-ref-server"
} }
""", TypeEquipementDTO.class)); """, TypeItemDTO.class));
/* MOCK REFERENTIEL : ImpactEquipement */
var impactEquipementDTO = new ImpactEquipementDTO();
impactEquipementDTO.setValeur(2.2);
equipementPhysiqueDTO.setModele(null); /* MOCK REFERENTIEL : FacteurCaracterisation */
var fcDTO = new FacteurCaracterisationDTO();
fcDTO.setValeur(2.2);
Mockito.when(referentielClient.getImpactEquipement(eq("default-ref-server"), any(), any())).thenReturn(impactEquipementDTO); Mockito.when(referentielClient.getFacteurCaracterisationByCritereAndEtapeAndNom(any(), any(), eq("default-ref-server"))).thenReturn(fcDTO);
var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO); var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO);
Assertions.assertEquals(1, actual.getEtapes().size()); Assertions.assertEquals(4, actual.getEtapes().size());
Assertions.assertEquals(1, actual.getCriteres().size()); Assertions.assertEquals(4, actual.getCriteres().size());
Assertions.assertEquals(4, actual.getHypotheses().size()); Assertions.assertEquals(4, actual.getHypotheses().size());
Assertions.assertEquals(1, actual.getMixElectriques().size()); Assertions.assertEquals(17, actual.getFacteurCaracterisations().size());
Assertions.assertEquals("FR", actual.getMixElectriques().get(0).getPays()); Assertions.assertEquals(2.2, actual.getFacteurCaracterisations().getFirst().getValeur());
Assertions.assertEquals(2.2, actual.getImpactsEquipement().get(0).getValeur());
Assertions.assertEquals("HAUTE", actual.getEquipementPhysique().getQualite()); Assertions.assertEquals("HAUTE", actual.getEquipementPhysique().getQualite());
} }
@Test @Test
void testServiceEnrichissementEquipementPhysique_filterEtapes() throws JsonProcessingException { void testServiceEnrichissementEquipementPhysique_filterEtapes() throws JsonProcessingException {
initMocksEtapesAndCriteres();
Mockito.lenient().when(donneesEntreeRepository.findEtapes(any())).thenReturn("UTILISATION##FABRICATION"); Mockito.lenient().when(donneesEntreeRepository.findEtapes(any())).thenReturn("UTILISATION##FABRICATION");
var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO); var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO);
...@@ -221,7 +191,6 @@ class EnrichissementEquipementPhysiqueServiceTest { ...@@ -221,7 +191,6 @@ class EnrichissementEquipementPhysiqueServiceTest {
@Test @Test
void testServiceEnrichissementEquipementPhysique_doesNotFilterEtapesWhenDataNull() throws JsonProcessingException { void testServiceEnrichissementEquipementPhysique_doesNotFilterEtapesWhenDataNull() throws JsonProcessingException {
initMocksEtapesAndCriteres();
Mockito.lenient().when(donneesEntreeRepository.findEtapes(any())).thenReturn(null); Mockito.lenient().when(donneesEntreeRepository.findEtapes(any())).thenReturn(null);
var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO); var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO);
...@@ -231,7 +200,6 @@ class EnrichissementEquipementPhysiqueServiceTest { ...@@ -231,7 +200,6 @@ class EnrichissementEquipementPhysiqueServiceTest {
@Test @Test
void testServiceEnrichissementEquipementPhysique_filterCriteres() throws JsonProcessingException { void testServiceEnrichissementEquipementPhysique_filterCriteres() throws JsonProcessingException {
initMocksEtapesAndCriteres();
Mockito.lenient().when(donneesEntreeRepository.findCriteres(any())).thenReturn("Climate change##Ionising radiation##Acidification"); Mockito.lenient().when(donneesEntreeRepository.findCriteres(any())).thenReturn("Climate change##Ionising radiation##Acidification");
var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO); var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO);
...@@ -241,7 +209,6 @@ class EnrichissementEquipementPhysiqueServiceTest { ...@@ -241,7 +209,6 @@ class EnrichissementEquipementPhysiqueServiceTest {
@Test @Test
void testServiceEnrichissementEquipementPhysique_doesNotFilterCriteresWhenDataNull() throws JsonProcessingException { void testServiceEnrichissementEquipementPhysique_doesNotFilterCriteresWhenDataNull() throws JsonProcessingException {
initMocksEtapesAndCriteres();
Mockito.lenient().when(donneesEntreeRepository.findCriteres(any())).thenReturn(null); Mockito.lenient().when(donneesEntreeRepository.findCriteres(any())).thenReturn(null);
var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO); var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO);
......
...@@ -61,131 +61,88 @@ ...@@ -61,131 +61,88 @@
}, },
"stockageTotalVirtuel": null "stockageTotalVirtuel": null
}, },
"typeEquipement": { "typeItem": {
"type": "Server", "type": "Server",
"serveur": true, "serveur": true,
"commentaire": "Lifetime par defaut Sopra Steria", "commentaire": "Lifetime par defaut Sopra Steria",
"dureeVieDefaut": 7.0, "dureeVieDefaut": 7.0,
"source": "", "source": "",
"refEquipementParDefaut": "blade-server--28" "refItemParDefaut": "blade-server--28"
}, },
"mixElectriques": [ "facteurCaracterisations": [
null,
{ {
"pays": "France", "nom": "Electricty-mix FR",
"raccourcisAnglais": "FR", "localisation": "France",
"categorie": "electricity-mix",
"critere": "Climate change", "critere": "Climate change",
"valeur": 0.0813225, "valeur": 0.0813225,
"source": "Base IMPACTS®2.02" "source": "Base IMPACTS®2.02"
}, },
null,
{ {
"pays": "France", "nom": "Electricty-mix FR",
"raccourcisAnglais": "FR", "localisation": "France",
"categorie": "electricity-mix",
"critere": "Particulate matter and respiratory inorganics", "critere": "Particulate matter and respiratory inorganics",
"valeur": 4.15844e-9, "valeur": 4.15844e-9,
"source": "Base IMPACTS®2.02" "source": "Base IMPACTS®2.02"
}, },
null,
{ {
"pays": "France", "nom": "Electricty-mix FR",
"raccourcisAnglais": "FR", "localisation": "France",
"categorie": "electricity-mix",
"critere": "Ionising radiation", "critere": "Ionising radiation",
"valeur": 3.23443, "valeur": 3.23443,
"source": "Base IMPACTS®2.02" "source": "Base IMPACTS®2.02"
}, },
null,
{ {
"pays": "France", "nom": "Electricty-mix FR",
"raccourcisAnglais": "FR", "localisation": "France",
"categorie": "electricity-mix",
"critere": "Acidification", "critere": "Acidification",
"valeur": 0.000209809, "valeur": 0.000209809,
"source": "Base IMPACTS®2.02" "source": "Base IMPACTS®2.02"
}, },
null,
{ {
"pays": "France", "nom": "Electricty-mix FR",
"raccourcisAnglais": "FR", "localisation": "France",
"categorie": "electricity-mix",
"critere": "Resource use (minerals and metals)", "critere": "Resource use (minerals and metals)",
"valeur": 4.85798e-8, "valeur": 4.85798e-8,
"source": "Base IMPACTS®2.02" "source": "Base IMPACTS®2.02"
}
],
"impactsReseau": [
{
"refReseau": "impactReseauMobileMoyen",
"etapeACV": "FABRICATION",
"critere": "Climate change",
"unite": null,
"source": "Test V1.00",
"valeur": 518.28,
"consoElecMoyenne": null
},
{
"refReseau": "impactReseauMobileMoyen",
"etapeACV": "UTILISATION",
"critere": "Climate change",
"unite": null,
"source": "Test V1.00",
"valeur": 76.28,
"consoElecMoyenne": null
},
{
"refReseau": "impactReseauMobileMoyen",
"etapeACV": "FABRICATION",
"critere": "Particulate matter and respiratory inorganics",
"unite": null,
"source": "Test V1.00",
"valeur": 148.28,
"consoElecMoyenne": null
}, },
{ {
"refReseau": "impactReseauMobileMoyen", "nom": "blade-server--28",
"etapeACV": "UTILISATION",
"critere": "Particulate matter and respiratory inorganics",
"unite": null,
"source": "Test V1.00",
"valeur": 18.8,
"consoElecMoyenne": null
}
],
"impactsEquipement": [
{
"refEquipement": "blade-server--28",
"etape": "FABRICATION", "etape": "FABRICATION",
"critere": "Climate change", "critere": "Climate change",
"unite": null,
"source": "test", "source": "test",
"type": "",
"valeur": 2935.5392, "valeur": 2935.5392,
"consoElecMoyenne": 3504.0, "consoElecMoyenne": 3504.0,
"description": "Blade server 2 processor high-end 1 SSD: 1024 GB each 0 HDD 16 RAM, 16 GB each 0 GPU" "description": "Blade server 2 processor high-end 1 SSD: 1024 GB each 0 HDD 16 RAM, 16 GB each 0 GPU"
}, },
{ {
"refEquipement": "blade-server--28", "nom": "blade-server--28",
"etape": "UTILISATION", "etape": "UTILISATION",
"critere": "Climate change", "critere": "Climate change",
"source": "test", "source": "test",
"type": "",
"valeur": 234.62784, "valeur": 234.62784,
"consoElecMoyenne": 3504.0, "consoElecMoyenne": 3504.0,
"description": "Blade server 2 processor high-end 1 SSD: 1024 GB each 0 HDD 16 RAM, 16 GB each 0 GPU" "description": "Blade server 2 processor high-end 1 SSD: 1024 GB each 0 HDD 16 RAM, 16 GB each 0 GPU"
}, },
{ {
"refEquipement": "blade-server--28", "nom": "blade-server--28",
"etape": "FABRICATION", "etape": "FABRICATION",
"critere": "Particulate matter and respiratory inorganics", "critere": "Particulate matter and respiratory inorganics",
"source": "test", "source": "test",
"type": "",
"valeur": 0.0000917808, "valeur": 0.0000917808,
"consoElecMoyenne": 3504.0, "consoElecMoyenne": 3504.0,
"description": "Blade server 2 processor high-end 1 SSD: 1024 GB each 0 HDD 16 RAM, 16 GB each 0 GPU" "description": "Blade server 2 processor high-end 1 SSD: 1024 GB each 0 HDD 16 RAM, 16 GB each 0 GPU"
}, },
{ {
"refEquipement": "blade-server--28", "nom": "blade-server--28",
"etape": "UTILISATION", "etape": "UTILISATION",
"critere": "Particulate matter and respiratory inorganics", "critere": "Particulate matter and respiratory inorganics",
"source": "test", "source": "test",
"type": "",
"valeur": 0.000052475904, "valeur": 0.000052475904,
"consoElecMoyenne": 3504.0, "consoElecMoyenne": 3504.0,
"description": "Blade server 2 processor high-end 1 SSD: 1024 GB each 0 HDD 16 RAM, 16 GB each 0 GPU" "description": "Blade server 2 processor high-end 1 SSD: 1024 GB each 0 HDD 16 RAM, 16 GB each 0 GPU"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment