package com.megatim.fdxconsultation.core.impl.api.supervision; import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO; import com.bekosoftware.genericmanagerlayer.core.impl.AbstractGenericManager; import com.fdx.messaging.common.TransfertDataMessage; import com.megatim.fdxconsultation.core.ifaces.supervision.TransfertManager; import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithSearchEnityDAO; import com.megatim.fdxconsultation.dao.ifaces.supervision.TransfertDAO; import com.megatim.fdxconsultation.dao.impl.supervision.TransfertMessageKey; import com.megatim.fdxconsultation.model.searchentities.TransfertSearch; import com.megatim.fdxconsultation.model.supervision.SensTransfert; import com.megatim.fdxconsultation.model.supervision.Transfert; import com.megatim.fdxconsultation.model.supervision.dto.StandaloneDashboardRequest; import com.megatim.fdxconsultation.model.supervision.dto.StandaloneDashboardResponse; import com.megatim.fdxconsultation.model.supervision.dto.SupervisionFilterModalFormRequest; import java.time.LocalDateTime; import java.time.LocalTime; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import javax.annotation.PostConstruct; import javax.ejb.EJB; import javax.enterprise.context.ApplicationScoped; /** * * @author ASUS */ @ApplicationScoped public class TransfertManagerImpl extends AbstractGenericManager implements TransfertManager { @EJB private TransfertDAO dao; private final Map transfertMap = new ConcurrentHashMap<>(); @PostConstruct public void init() { findAll().forEach(t -> { String key = new TransfertMessageKey(t).key(); transfertMap.put(key, t); }); } @Override public GenericDAO getDao() { return dao; } @Override public PaginationWithSearchEnityDAO getPaginationDao() { return dao; } @Override public String getEntityIdName() { return "id"; } @Override public Transfert persistTransfert(Transfert t) { String key = new TransfertMessageKey(t).key(); Transfert transfert = transfertMap.get(key); if (transfert == null) { transfertMap.put(key, save(t)); } else if (!transfert.getEtatTransfert().equals(t.getEtatTransfert())) { setFields(transfert, t); transfertMap.put(key, update(transfert.getId(), transfert)); } return transfertMap.get(key); } @Override public StandaloneDashboardResponse standaloneDashboardResponse(StandaloneDashboardRequest standaloneDashboardRequest) { LocalDateTime dateDebut = standaloneDashboardRequest.getDateDebut(); LocalDateTime dateFin = (standaloneDashboardRequest.getDateFin() != null) ? standaloneDashboardRequest.getDateFin().toLocalDate().atTime(LocalTime.MAX) : null; SensTransfert sens = standaloneDashboardRequest.getSens(); StandaloneDashboardResponse response = new StandaloneDashboardResponse(); response.setNombreTypeFichier(dao.getNombreTypeFichier(sens, dateDebut, dateFin)); response.setTailleTotale(dao.getTailleTotale(sens, dateDebut, dateFin)); response.setTotalTransfert(dao.getTotalTransfert(sens, dateDebut, dateFin)); response.setTotalTransfertAutomatique(dao.getTransfertsAutomatique(sens, dateDebut, dateFin)); response.setTotalTransfertEchec(dao.getTransfertsEchec(sens, dateDebut, dateFin)); response.setTotalTransfertManuel(dao.getTransfertsManuel(sens, dateDebut, dateFin)); response.setTransfertAttente(dao.getTransfertsAttente(sens, dateDebut, dateFin)); response.setTransfertReussie(dao.getTransfertsReussie(sens, dateDebut, dateFin)); response.setVitesseMoyenne(dao.getVitesseMoyenne(sens, dateDebut, dateFin)); if (response.getTotalTransfert() > 0) { response.setTailleMoyenne(response.getTailleTotale() / response.getTotalTransfert()); } else { response.setTailleMoyenne(0); } return response; } @Override public List filter(SupervisionFilterModalFormRequest supervisionFilterModalFormRequest) { List transferts = dao.filter(supervisionFilterModalFormRequest); transferts.sort((t1, t2) -> Long.compare(t2.getId(), t1.getId())); return transferts; } private void setFields(Transfert transfert, Transfert t) { transfert.setCodeAgent(t.getCodeAgent()); transfert.setCodeAgentRecepteur(t.getCodeAgentRecepteur()); transfert.setEtatTransfert(t.getEtatTransfert()); transfert.setSensTransfert(t.getSensTransfert()); transfert.setDateDebut(t.getDateDebut()); transfert.setDateFin(t.getDateFin()); transfert.setNomFichier(t.getNomFichier()); transfert.setSended(t.getSended()); transfert.setTaille(t.getTaille()); transfert.setTypeFichier(t.getTypeFichier()); } }