From 23a46b4be35277e06ec89f48730eeb694e686be8 Mon Sep 17 00:00:00 2001
From: Kenmegne <stephanie.kenmegne@gmail.com>
Date: Thu, 18 Jun 2026 15:40:06 +0000
Subject: [PATCH] add fdx-commons and fdx-consultation

---
 apifdxweb/api/apifdxweb-service-impl/src/main/java/com/megatim/apifdxweb/service/impl/scheduler/TypeFichierDataTmpJobImpl.java |  119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 119 insertions(+), 0 deletions(-)

diff --git a/apifdxweb/api/apifdxweb-service-impl/src/main/java/com/megatim/apifdxweb/service/impl/scheduler/TypeFichierDataTmpJobImpl.java b/apifdxweb/api/apifdxweb-service-impl/src/main/java/com/megatim/apifdxweb/service/impl/scheduler/TypeFichierDataTmpJobImpl.java
new file mode 100644
index 0000000..da11d28
--- /dev/null
+++ b/apifdxweb/api/apifdxweb-service-impl/src/main/java/com/megatim/apifdxweb/service/impl/scheduler/TypeFichierDataTmpJobImpl.java
@@ -0,0 +1,119 @@
+package com.megatim.apifdxweb.service.impl.scheduler;
+
+import com.megatim.apifdxweb.core.ifaces.tmp.TokenTmpManager;
+import com.megatim.apifdxweb.core.ifaces.tmp.TypeFichierDataTmpManager;
+import com.megatim.apifdxweb.model.tmp.StatutTmp;
+import com.megatim.apifdxweb.model.tmp.TokenTmp;
+import com.megatim.apifdxweb.model.tmp.TypeFichierDataTmp;
+import com.megatim.apifdxweb.service.ifaces.scheduler.TypeFichierDataTmpJob;
+import com.megatim.apifdxweb.tools.AppContext;
+import com.megatim.fdxcommons.core.ifaces.helper.DataInMemoryHandler;
+import com.megatim.fdxcommons.model.dataproduction.DataProduction;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.transaction.Transactional;
+import com.megatim.fdxcommons.model.dataproduction.DataProductionSource;
+import com.megatim.fdxcommons.tools.database.connection.DBConnection;
+import com.megatim.fdxcommons.tools.database.tables.FdxApiTable;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.time.LocalDateTime;
+import javax.annotation.Resource;
+import javax.naming.NamingException;
+import javax.sql.DataSource;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class TypeFichierDataTmpJobImpl implements TypeFichierDataTmpJob {
+
+    @Inject
+    private TokenTmpManager tokenTmpManager;
+
+    @Inject
+    private TypeFichierDataTmpManager dataTmpManager;
+
+    @Inject
+    private DataInMemoryHandler dataInMemoryHandler;
+
+    @Resource(lookup = AppContext.JNDI_NAME)
+    private DataSource dataSource;
+
+    @Override
+    public void mergeData() {
+        List<TokenTmp> tokens = tokenTmpManager.getByStatutTmp(StatutTmp.ACHEVE);
+        tokens.stream().forEach(t -> {
+            try {
+                List<LinkedHashMap<String, Object>> data = dataTmpManager.getByStructuredLines(t.getToken(), t.getCodeTypeFichier());
+                updateDatabase(data, t);
+            } catch (Exception ex) {
+                Logger.getLogger(TypeFichierDataTmpJobImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            }
+        });
+    }
+
+    @Override
+    @Transactional
+    public void deleteExpiredTokens() {
+        List<TokenTmp> tokenExpired = tokenTmpManager.getExpiredToken();
+
+        for (TokenTmp t : tokenExpired) {
+            List<TypeFichierDataTmp> data = dataTmpManager.getByToken(t.getToken());
+            for (TypeFichierDataTmp d : data) {
+                dataTmpManager.delete(d);
+            }
+            tokenTmpManager.delete(t);
+        }
+    }
+
+    @Transactional
+    private void updateDatabase(List<LinkedHashMap<String, Object>> data, TokenTmp tokenTmp) throws Exception {
+        insert(tokenTmp.getCodeTypeFichier(),
+                dataInMemoryHandler.getDataInMemory().getReferentielEnCours().getVersion(),
+                data,
+                tokenTmp.getCodeParticipant());
+
+        deleteTokenTmp(tokenTmp);
+    }
+
+    private void insert(String codeTypeFichier, String referentielVersion, List<LinkedHashMap<String, Object>> data, String connectedParticipant) throws SQLException, NamingException, Exception {
+        DataProduction dataProduction = newDataProduction(codeTypeFichier, connectedParticipant, referentielVersion);
+
+        try ( Connection connection = new DBConnection(dataSource).connection()) {
+            connection.setAutoCommit(false);
+            
+            new FdxApiTable(codeTypeFichier,
+                    referentielVersion,
+                    connection)
+                    .insert(data, dataProduction);
+            connection.commit();
+        }
+
+    }
+
+    private void deleteTokenTmp(TokenTmp tokenTmp) {
+        List<TypeFichierDataTmp> dataTmp = dataTmpManager.getByToken(tokenTmp.getToken());
+        for (TypeFichierDataTmp td : dataTmp) {
+            dataTmpManager.delete(td);
+        }
+        TokenTmp t = tokenTmpManager.getById(tokenTmp.getToken());
+        tokenTmpManager.delete(t);
+    }
+
+    private DataProduction newDataProduction(String codeTypeFichier, String codeParticipant, String referentielVersion) {
+        DataProduction dataProduction = new DataProduction();
+        dataProduction.setDateProduction(LocalDateTime.now());
+        dataProduction.setReferentielVersion(referentielVersion);
+        dataProduction.setCodeTypeFichier(codeTypeFichier);
+        dataProduction.setCodeParticipant(codeParticipant);
+        dataProduction.setSource(DataProductionSource.API);
+
+        return dataProduction;
+    }
+}

--
Gitblit v1.10.0