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-dao-impl/src/main/java/com/megatim/apifdxweb/dao/impl/tmp/TypeFichierDataTmpDAOImpl.java |  143 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 143 insertions(+), 0 deletions(-)

diff --git a/apifdxweb/api/apifdxweb-dao-impl/src/main/java/com/megatim/apifdxweb/dao/impl/tmp/TypeFichierDataTmpDAOImpl.java b/apifdxweb/api/apifdxweb-dao-impl/src/main/java/com/megatim/apifdxweb/dao/impl/tmp/TypeFichierDataTmpDAOImpl.java
new file mode 100644
index 0000000..b396427
--- /dev/null
+++ b/apifdxweb/api/apifdxweb-dao-impl/src/main/java/com/megatim/apifdxweb/dao/impl/tmp/TypeFichierDataTmpDAOImpl.java
@@ -0,0 +1,143 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.apifdxweb.dao.impl.tmp;
+
+import com.megatim.apifdxweb.dao.ifaces.tmp.TypeFichierDataTmpDAO;
+import com.megatim.apifdxweb.model.tmp.TypeFichierDataTmp;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Optional;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import javax.persistence.Tuple;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class TypeFichierDataTmpDAOImpl implements TypeFichierDataTmpDAO {
+
+    @PersistenceContext(unitName = "fdxPU")
+    protected EntityManager em;
+
+    @Override
+    public Class<TypeFichierDataTmp> getManagedEntityClass() {
+        return TypeFichierDataTmp.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public TypeFichierDataTmp getById(Long id) {
+        Query query = em.createQuery("SELECT t FROM TypeFichierDataTmp t  WHERE t.id = :id");
+        query.setParameter("id", id);
+
+        Optional<TypeFichierDataTmp> optionalTypeFichierDataTmp = query.getResultList().stream().findFirst();
+        return optionalTypeFichierDataTmp.isPresent() ? optionalTypeFichierDataTmp.get() : null;
+    }
+
+    @Override
+    public void deleteByToken(String token) {
+        Query query = em.createQuery("DELETE TypeFichierDataTmp t WHERE t.token = :token");
+        query.setParameter("token", token);
+
+        query.executeUpdate();
+    }
+
+    @Override
+    public List<TypeFichierDataTmp> getByToken(String token) {
+//        WITH NumberedValues AS (
+//    SELECT 
+//        colonne,
+//        datum,
+//        ROW_NUMBER() OVER (PARTITION BY colonne ORDER BY numeroligne) AS row_num
+//    FROM 
+//        typefichierdatatmp
+//	where token='dd6ed96a-0bfc-38ce-bdf4-5d9716325f4a'
+//)
+//SELECT 
+//    MAX(CASE WHEN colonne = 'niu' THEN datum END) AS NIU,
+//    MAX(CASE WHEN colonne = 'codecentre' THEN datum END) AS codecentre,
+//    MAX(CASE WHEN colonne = 'codecm' THEN datum END) AS codecm,
+//	MAX(CASE WHEN colonne = 'regime' THEN datum END) AS regime,
+//	MAX(CASE WHEN colonne = 'registre_commerce' THEN datum END) AS registre_commerce,
+//	MAX(CASE WHEN colonne = 'raisoc' THEN datum END) AS raisoc,
+//	MAX(CASE WHEN colonne = 'nom_etablisement' THEN datum END) AS nom_etablisement
+//	
+//FROM 
+//    NumberedValues
+//GROUP BY 
+//    row_num
+//ORDER BY 
+//    row_num;
+
+        Query query = em.createQuery("SELECT t FROM TypeFichierDataTmp t WHERE t.token = :token");
+        query.setParameter("token", token);
+
+        return query.getResultList();
+    }
+
+    @Override
+    public List<TypeFichierDataTmp> getByTokenAndByNumeroLigne(String token, int minNumeroLigne, int maxNumeroLigne) {
+        Query query = em.createQuery("SELECT t FROM TypeFichierDataTmp t WHERE t.token = :token AND t.numeroLigne >= : minNumeroLigne AND t.numeroLigne < :maxNumeroLigne");
+        query.setParameter("token", token);
+        query.setParameter("minNumeroLigne", minNumeroLigne);
+        query.setParameter("maxNumeroLigne", maxNumeroLigne);
+
+        return query.getResultList();
+    }
+
+    @Override
+    public boolean hasBatchAlreadyBeenReceived(String token, int batchNumber) {
+
+        Query query = em.createQuery("SELECT t FROM TypeFichierDataTmp t WHERE t.token = :token and t.batchNumber = :batchNumber");
+        query.setParameter("token", token);
+        query.setParameter("batchNumber", batchNumber);
+
+        return query.getResultList().stream().findFirst().isPresent();
+    }
+
+    @Override
+    public List<LinkedHashMap<String, Object>> getByStructuredLines(String token, List<ColumnDefinition> columnsDef) {
+        Collections.sort(columnsDef, (ColumnDefinition c1, ColumnDefinition c2) -> Integer.valueOf(c1.getPosition()).compareTo(c2.getPosition()));
+        List<LinkedHashMap<String, Object>> results = new ArrayList<>();
+
+        String query = constructQuery(token, columnsDef);
+        List<Tuple> tuples = em.createNativeQuery(query, Tuple.class).getResultList();
+
+        tuples.stream().forEach(t -> {
+            LinkedHashMap<String, Object> map = new LinkedHashMap<>();
+            for (int i = 0; i < columnsDef.size(); i++) {
+                map.put(columnsDef.get(i).getName(), t.get(i, String.class));
+            }
+            results.add(map);
+        });
+        return results;
+    }
+
+    private String constructQuery(String token, List<ColumnDefinition> columnsDef) {
+        StringBuilder builder = new StringBuilder("WITH Lines AS ("
+                + " SELECT colonne, datum, ROW_NUMBER() OVER (PARTITION BY colonne ORDER BY numeroligne) AS row_num"
+                + " FROM typefichierdatatmp"
+                + " WHERE token='" + token + "'"
+                + ") SELECT ");
+        for (ColumnDefinition c : columnsDef) {
+            builder.append(" MAX(CASE WHEN colonne = '").append(c.getName()).append("'  THEN datum END) AS ").append(c.getName()).append(",");
+        }
+        builder.replace(builder.length() - 1, builder.length(), "");
+        builder.append(" FROM Lines GROUP BY row_num ORDER BY row_num");
+
+        return builder.toString();
+    }
+}

--
Gitblit v1.10.0