Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: b9e9118e by Tony Chemit at 2023-07-15T11:22:24+02:00 Add new report operation SubtractColum - See #2754 - - - - - 94ff09bc by Tony Chemit at 2023-07-15T11:23:15+02:00 Erreur de calcul sur les tonnages du tableau de synthèse 'Vérification des plans de cuve' - Close #2754 - - - - - 6 changed files: - core/persistence/report/src/main/resources/observe-reports.properties - core/services/local/src/test/java/fr/ird/observe/services/local/service/ReportServiceLocalReadTest.java - core/services/test/src/main/resources/fixtures/fr/ird/observe/services/service/ReportService-psLogbookWellPlanCheck.properties - model/src/main/resources/observe-reports-legacy.properties - src/site/markdown/report/embedded-operations.md - + toolkit/api-report/src/main/java/fr/ird/observe/report/operations/SubtractColum.java Changes: ===================================== core/persistence/report/src/main/resources/observe-reports.properties ===================================== @@ -937,7 +937,19 @@ Sum(CASE ct.species.id When 'fr.ird.referential.common.Species#1239832685474#0.8 When 'fr.ird.referential.common.Species#1239832685474#0.975344121171992' Then 0.0 \ When 'fr.ird.referential.common.Species#1239832685475#0.13349466123905152' Then 0.0 \ When 'fr.ird.referential.common.Species#1239832685476#0.5618871286604711' Then 0.0 \ -Else ct.weight End),\ +Else ct.weight End) \ +From TripImpl t \ +Join t.routeLogbook r \ +Join r.activity a \ +Join a.catches ct \ +Join t.vessel vessel \ +Left Join a.vesselActivity vesselActivity \ +Where t.id In :tripId and vesselActivity.id = 'fr.ird.referential.ps.common.VesselActivity#1239832675369#0.12552908048322586' \ +Group By vessel.code,vessel.label2,t.startDate,t.endDate,r.date,a.time,a.number \ +Order By vessel.code,t.startDate,r.date,a.time +report.psLogbookWellPlanCheck.request.2.location=12,0 +report.psLogbookWellPlanCheck.request.2.layout=row +report.psLogbookWellPlanCheck.request.2.request=Select \ Sum(CASE was.species.id When 'fr.ird.referential.common.Species#1239832685474#0.8943253454598569' Then was.weight Else 0.0 End), \ Sum(CASE was.species.id When 'fr.ird.referential.common.Species#1239832685474#0.975344121171992' Then was.weight Else 0.0 End), \ Sum(CASE was.species.id When 'fr.ird.referential.common.Species#1239832685475#0.13349466123905152' Then was.weight Else 0.0 End), \ @@ -946,24 +958,50 @@ Sum(CASE was.species.id When 'fr.ird.referential.common.Species#1239832685474#0. When 'fr.ird.referential.common.Species#1239832685474#0.975344121171992' Then 0.0 \ When 'fr.ird.referential.common.Species#1239832685475#0.13349466123905152' Then 0.0 \ When 'fr.ird.referential.common.Species#1239832685476#0.5618871286604711' Then 0.0 \ -Else was.weight End),\ -Sum(ct.weight), \ -Sum(was.weight), \ -Sum(ct.weight) - Sum(was.weight) \ +Else was.weight End) \ From TripImpl t \ Join t.well w \ Join w.wellActivity wa \ Join wa.wellActivitySpecies was \ Join t.routeLogbook r \ Join r.activity a \ +Join t.vessel vessel \ +Left Join a.vesselActivity vesselActivity \ +Where t.id In :tripId and wa.activity = a and vesselActivity.id = 'fr.ird.referential.ps.common.VesselActivity#1239832675369#0.12552908048322586' \ +Group By vessel.code,vessel.label2,t.startDate,t.endDate,r.date,a.time,a.number \ +Order By vessel.code,t.startDate,r.date,a.time +report.psLogbookWellPlanCheck.request.3.location=17,0 +report.psLogbookWellPlanCheck.request.3.layout=row +report.psLogbookWellPlanCheck.request.3.request=Select \ +Sum(ct.weight) \ +From TripImpl t \ +Join t.routeLogbook r \ +Join r.activity a \ Join a.catches ct \ Join t.vessel vessel \ Left Join a.vesselActivity vesselActivity \ +Where t.id In :tripId and vesselActivity.id = 'fr.ird.referential.ps.common.VesselActivity#1239832675369#0.12552908048322586' \ +Group By vessel.code,vessel.label2,t.startDate,t.endDate,r.date,a.time,a.number \ +Order By vessel.code,t.startDate,r.date,a.time +report.psLogbookWellPlanCheck.request.4.location=18,0 +report.psLogbookWellPlanCheck.request.4.layout=row +report.psLogbookWellPlanCheck.request.4.request=Select \ +Sum(was.weight) \ +From TripImpl t \ +Join t.well w \ +Join w.wellActivity wa \ +Join wa.wellActivitySpecies was \ +Join t.routeLogbook r \ +Join r.activity a \ +Join t.vessel vessel \ +Left Join a.vesselActivity vesselActivity \ Where t.id In :tripId and wa.activity = a and vesselActivity.id = 'fr.ird.referential.ps.common.VesselActivity#1239832675369#0.12552908048322586' \ Group By vessel.code,vessel.label2,t.startDate,t.endDate,r.date,a.time,a.number \ Order By vessel.code,t.startDate,r.date,a.time -report.psLogbookWellPlanCheck.operations.1.type=SumColumn -report.psLogbookWellPlanCheck.operations.1.parameters=0|6 +report.psLogbookWellPlanCheck.operations.1.type=SubtractColum +report.psLogbookWellPlanCheck.operations.1.parameters=17|18|19 +report.psLogbookWellPlanCheck.operations.2.type=SumColumn +report.psLogbookWellPlanCheck.operations.2.parameters=0|6 report.psObservationActivityWithComment.modelType=PS report.psObservationActivityWithComment.name=Observations - Activités avec comment et leurs positions report.psObservationActivityWithComment.description=Afficher les activités avec comment et leurs positions géographiques ===================================== core/services/local/src/test/java/fr/ird/observe/services/local/service/ReportServiceLocalReadTest.java ===================================== @@ -95,4 +95,11 @@ public class ReportServiceLocalReadTest extends GeneratedReportServiceLocalReadT ReportService service = getService(); fixtures.executeReport(service, "psObservationCatchTotalCountByGroupAndSpeciesFateDiscardPerAssociation"); } + + @Test + @Ignore + public void executeReportPsLogbookWellPlanCheck() { + ReportService service = getService(); + fixtures.executeReport(service, "psLogbookWellPlanCheck"); + } } ===================================== core/services/test/src/main/resources/fixtures/fr/ird/observe/services/service/ReportService-psLogbookWellPlanCheck.properties ===================================== @@ -19,14 +19,14 @@ # <http://www.gnu.org/licenses/gpl-3.0.html>. # #L% ### -result.0=483^CAP BOJADOR^30/3/2019^8/4/2019^30/3/2019^1^15:12^0.0^123.0^43.0^0.0^0.0^0.0^0.0^24.0^0.0^0.0^166.0^24.0^142.0 +result.0=483^CAP BOJADOR^30/3/2019^8/4/2019^30/3/2019^1^15:12^0.0^123.0^43.0^0.0^0.0^0.0^0.0^12.0^0.0^0.0^166.0^12.0^154.0 result.columns=20 result.rows=1 syntax.columns=20 syntax.columnsHeader=Code bateau^Nom bateau^Date départ^Date arrivée^Date de route^Numéro activité^Heure activité^Logbook YFT^Logbook SKJ^Logbook BET^Logbook ALB^Logbook Autres^Plan de cuves YFT^Plan de cuves SKJ^Plan de cuves BET^Plan de cuves ALB^Plan de cuves Autres^Logbook Total^Plan de cuves Total^Différence syntax.description=Livre de bord - Vérification des plan de cuves syntax.name=Livre de bord - Vérification des plan de cuves -syntax.nbRequests=1 +syntax.nbRequests=4 syntax.rows=-1 syntax.rowsHeader= tripIds=${PS_COMMON_TRIP},${PS_COMMON_TRIP_MOVE} ===================================== model/src/main/resources/observe-reports-legacy.properties ===================================== @@ -1407,48 +1407,78 @@ Plan de cuves Autres,\ Logbook Total,\ Plan de cuves Total,\ Différence -report.psLogbookWellPlanCheck.operations.1=SumColumn:0|6 -report.psLogbookWellPlanCheck.request.1=0,0|row|\ -Select vessel.code,\ - vessel.label2,\ - concat(day(t.startDate), '/', month(t.startDate), '/', year(t.startDate)), \ - concat(day(t.endDate), '/', month(t.endDate), '/', year(t.endDate)), \ - concat(day(r.date), '/', month(r.date), '/', year(r.date)), \ - a.number, \ - concat(hour(a.time), ':', minute(a.time)), \ - Sum(CASE ct.species.id When 'fr.ird.referential.common.Species#1239832685474#0.8943253454598569' Then ct.weight Else 0.0 End), \ - Sum(CASE ct.species.id When 'fr.ird.referential.common.Species#1239832685474#0.975344121171992' Then ct.weight Else 0.0 End), \ - Sum(CASE ct.species.id When 'fr.ird.referential.common.Species#1239832685475#0.13349466123905152' Then ct.weight Else 0.0 End), \ - Sum(CASE ct.species.id When 'fr.ird.referential.common.Species#1239832685476#0.5618871286604711' Then ct.weight Else 0.0 End), \ - Sum(CASE ct.species.id When 'fr.ird.referential.common.Species#1239832685474#0.8943253454598569' Then 0.0 \ - When 'fr.ird.referential.common.Species#1239832685474#0.975344121171992' Then 0.0 \ - When 'fr.ird.referential.common.Species#1239832685475#0.13349466123905152' Then 0.0 \ - When 'fr.ird.referential.common.Species#1239832685476#0.5618871286604711' Then 0.0 \ - Else ct.weight End),\ - Sum(CASE was.species.id When 'fr.ird.referential.common.Species#1239832685474#0.8943253454598569' Then was.weight Else 0.0 End), \ - Sum(CASE was.species.id When 'fr.ird.referential.common.Species#1239832685474#0.975344121171992' Then was.weight Else 0.0 End), \ - Sum(CASE was.species.id When 'fr.ird.referential.common.Species#1239832685475#0.13349466123905152' Then was.weight Else 0.0 End), \ - Sum(CASE was.species.id When 'fr.ird.referential.common.Species#1239832685476#0.5618871286604711' Then was.weight Else 0.0 End), \ - Sum(CASE was.species.id When 'fr.ird.referential.common.Species#1239832685474#0.8943253454598569' Then 0.0 \ - When 'fr.ird.referential.common.Species#1239832685474#0.975344121171992' Then 0.0 \ - When 'fr.ird.referential.common.Species#1239832685475#0.13349466123905152' Then 0.0 \ - When 'fr.ird.referential.common.Species#1239832685476#0.5618871286604711' Then 0.0 \ - Else was.weight End),\ - Sum(ct.weight), \ - Sum(was.weight), \ - Sum(ct.weight) - Sum(was.weight) \ +report.psLogbookWellPlanCheck.request.1=0,0|row|Select vessel.code,\ +vessel.label2,\ +concat(day(t.startDate), '/', month(t.startDate), '/', year(t.startDate)), \ +concat(day(t.endDate), '/', month(t.endDate), '/', year(t.endDate)), \ +concat(day(r.date), '/', month(r.date), '/', year(r.date)), \ +a.number, \ +concat(hour(a.time), ':', minute(a.time)), \ +Sum(CASE ct.species.id When 'fr.ird.referential.common.Species#1239832685474#0.8943253454598569' Then ct.weight Else 0.0 End), \ +Sum(CASE ct.species.id When 'fr.ird.referential.common.Species#1239832685474#0.975344121171992' Then ct.weight Else 0.0 End), \ +Sum(CASE ct.species.id When 'fr.ird.referential.common.Species#1239832685475#0.13349466123905152' Then ct.weight Else 0.0 End), \ +Sum(CASE ct.species.id When 'fr.ird.referential.common.Species#1239832685476#0.5618871286604711' Then ct.weight Else 0.0 End), \ +Sum(CASE ct.species.id When 'fr.ird.referential.common.Species#1239832685474#0.8943253454598569' Then 0.0 \ +When 'fr.ird.referential.common.Species#1239832685474#0.975344121171992' Then 0.0 \ +When 'fr.ird.referential.common.Species#1239832685475#0.13349466123905152' Then 0.0 \ +When 'fr.ird.referential.common.Species#1239832685476#0.5618871286604711' Then 0.0 \ +Else ct.weight End) \ +From TripImpl t \ +Join t.routeLogbook r \ +Join r.activity a \ +Join a.catches ct \ +Join t.vessel vessel \ +Left Join a.vesselActivity vesselActivity \ +Where t.id In :tripId and vesselActivity.id = 'fr.ird.referential.ps.common.VesselActivity#1239832675369#0.12552908048322586' \ +Group By vessel.code,vessel.label2,t.startDate,t.endDate,r.date,a.time,a.number \ +Order By vessel.code,t.startDate,r.date,a.time +report.psLogbookWellPlanCheck.request.2=12,0|row|Select \ +Sum(CASE was.species.id When 'fr.ird.referential.common.Species#1239832685474#0.8943253454598569' Then was.weight Else 0.0 End), \ +Sum(CASE was.species.id When 'fr.ird.referential.common.Species#1239832685474#0.975344121171992' Then was.weight Else 0.0 End), \ +Sum(CASE was.species.id When 'fr.ird.referential.common.Species#1239832685475#0.13349466123905152' Then was.weight Else 0.0 End), \ +Sum(CASE was.species.id When 'fr.ird.referential.common.Species#1239832685476#0.5618871286604711' Then was.weight Else 0.0 End), \ +Sum(CASE was.species.id When 'fr.ird.referential.common.Species#1239832685474#0.8943253454598569' Then 0.0 \ +When 'fr.ird.referential.common.Species#1239832685474#0.975344121171992' Then 0.0 \ +When 'fr.ird.referential.common.Species#1239832685475#0.13349466123905152' Then 0.0 \ +When 'fr.ird.referential.common.Species#1239832685476#0.5618871286604711' Then 0.0 \ +Else was.weight End) \ From TripImpl t \ Join t.well w \ Join w.wellActivity wa \ Join wa.wellActivitySpecies was \ Join t.routeLogbook r \ Join r.activity a \ +Join t.vessel vessel \ +Left Join a.vesselActivity vesselActivity \ +Where t.id In :tripId and wa.activity = a and vesselActivity.id = 'fr.ird.referential.ps.common.VesselActivity#1239832675369#0.12552908048322586' \ +Group By vessel.code,vessel.label2,t.startDate,t.endDate,r.date,a.time,a.number \ +Order By vessel.code,t.startDate,r.date,a.time +report.psLogbookWellPlanCheck.request.3=17,0|row|Select \ +Sum(ct.weight) \ +From TripImpl t \ +Join t.routeLogbook r \ +Join r.activity a \ Join a.catches ct \ Join t.vessel vessel \ Left Join a.vesselActivity vesselActivity \ +Where t.id In :tripId and vesselActivity.id = 'fr.ird.referential.ps.common.VesselActivity#1239832675369#0.12552908048322586' \ +Group By vessel.code,vessel.label2,t.startDate,t.endDate,r.date,a.time,a.number \ +Order By vessel.code,t.startDate,r.date,a.time +report.psLogbookWellPlanCheck.request.4=18,0|row|Select \ +Sum(was.weight) \ +From TripImpl t \ +Join t.well w \ +Join w.wellActivity wa \ +Join wa.wellActivitySpecies was \ +Join t.routeLogbook r \ +Join r.activity a \ +Join t.vessel vessel \ +Left Join a.vesselActivity vesselActivity \ Where t.id In :tripId and wa.activity = a and vesselActivity.id = 'fr.ird.referential.ps.common.VesselActivity#1239832675369#0.12552908048322586' \ Group By vessel.code,vessel.label2,t.startDate,t.endDate,r.date,a.time,a.number \ Order By vessel.code,t.startDate,r.date,a.time +report.psLogbookWellPlanCheck.operations.1=SubtractColum:17|18|19 +report.psLogbookWellPlanCheck.operations.2=SumColumn:0|6 ############################################ ## Marché local - Lots ############################################ ===================================== src/site/markdown/report/embedded-operations.md ===================================== @@ -215,6 +215,28 @@ report.xxx.operations.1.parameters=0|1 Ici on commence la somme à partir de la ligne **0** et la colonne **1**. +### SubtractColum + +Cette opération permet de réaliser la soustraction de deux colonnes, ligne par ligne et de consigner le résultat dans une nouvelle colonne. + +Le résultat sera un **entier avec décimales** (on arrondit à 4 décimales). + +**À noter que si une ligne contient des valeurs non numériques, la soustraction n'est pas effectuée et la valeur de la +celulle sera *-***. + +L'opéréation doit être paramétrée pour indiquer les deux colonnes à traiter et où inscrire le résultat de la soustraction. + +Le paramétrage est donc trois numéros de colonne codifié sous la forme ```column1|column2|targetColumn```. + +Exemple d'utilisation + +```properties +report.xxx.operations.1.type=SubtractColum +report.xxx.operations.1.parameters=0|1|2 +``` + +Ici on soustrait la colonne 0 à la colonne 1 et on consigne le résultat dans la colonne 2. + ## Opérations spécifiques à ObServe Ces opérations étant utilisées uniquement dans les rapport embarqués, elles ne possèdent aucun paramétrage. ===================================== toolkit/api-report/src/main/java/fr/ird/observe/report/operations/SubtractColum.java ===================================== @@ -0,0 +1,96 @@ +package fr.ird.observe.report.operations; + +/*- + * #%L + * ObServe Toolkit :: API :: Report + * %% + * Copyright (C) 2008 - 2023 IRD, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.auto.service.AutoService; +import fr.ird.observe.report.Report; +import fr.ird.observe.report.ReportOperationConsumer; +import fr.ird.observe.report.ReportRequestExecutor; +import io.ultreia.java4all.lang.Numbers; +import io.ultreia.java4all.util.matrix.DataMatrix; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.io.Serializable; +import java.util.Set; + +/** + * To subtract two columns values and place it in a new column. + * <p> + * Created on 15/07/2023. + * + * @author Tony Chemit - dev@tchemit.fr + * @since 9.1.6 + */ +@AutoService(ReportOperationConsumer.class) +public class SubtractColum implements ReportOperationConsumer { + private static final Logger log = LogManager.getLogger(SubtractColum.class); + + @Override + public DataMatrix consume(String parameters, ReportRequestExecutor requestExecutor, Report report, Set<String> tripId, DataMatrix incoming) { + if (parameters.isEmpty()) { + throw new IllegalStateException(String.format("parameters of operation %s can't not be null (format: column1|column2|targetColumn)", getClass().getName())); + } + String[] split = parameters.trim().split("\\|"); + if (split.length != 3) { + throw new IllegalStateException(String.format("parameters of operation %s must have three parameters (format: column1|column2|targetColumn), but was: %s", getClass().getName(), parameters.trim())); + } + int column1 = Integer.parseInt(split[0]); + int column2 = Integer.parseInt(split[1]); + int targetColumn = Integer.parseInt(split[2]); + + int height = incoming.getHeight(); + + DataMatrix tmpMatrix = createTmpMatrix(targetColumn, 0, 1, height); + for (int row = 0; row < height; row++) { + Object sumRow = getSubtract(row, column1, column2, incoming); + tmpMatrix.setValue(0, row, sumRow); + } + return DataMatrix.merge(incoming, tmpMatrix); + } + + protected Object getSubtract(int row, int column1, int column2, DataMatrix incoming) { + + Double v1 = getValue(row, column1, incoming); + Double v2 = getValue(row, column2, incoming); + if (v1 == null || v2 == null) { + return "-"; + } + float result = (float) (v1 - v2); + return Numbers.roundFourDigits(result); + } + + protected Double getValue(int x, int y, DataMatrix incoming) { + Serializable o = incoming.getValue(y, x); + if (o == null || "null".equals(o)) { + return null; + } + try { + return Double.parseDouble(o.toString()); + } catch (NumberFormatException e) { + // une des données de la colonne n'est pas un count on sort directement + log.debug(String.format("Could not convert %s to number", o), e); + return null; + } + } +} View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/c7b2088ebca03ddd98058cb4d... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/c7b2088ebca03ddd98058cb4d... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT (@tchemit)