Java tutorial
/* * Copyright (C) 2015 Dominion Global * * 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/>. */ package com.dominion.salud.nomenclator.negocio.service.impl.aemps.v5; import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v5.AempsMedicamentos; import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v5.AtcDesaconsejadosType; import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v5.AtcDuplicidadesType; import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v5.AtcInteraccionesType; import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v5.MedicamentosAtcType; import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v5.MedicamentosExcipientesType; import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v5.MedicamentosNotasType; import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v5.MedicamentosPrincipiosActivosType; import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v5.MedicamentosType; import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v5.MedicamentosViasAdminType; import com.dominion.salud.nomenclator.negocio.entities.aemps.Atc; import com.dominion.salud.nomenclator.negocio.entities.aemps.AtcDesacon; import com.dominion.salud.nomenclator.negocio.entities.aemps.AtcDuplicidades; import com.dominion.salud.nomenclator.negocio.entities.aemps.AtcInteracciones; import com.dominion.salud.nomenclator.negocio.entities.aemps.AtcTeratogenias; import com.dominion.salud.nomenclator.negocio.entities.aemps.Dcp; import com.dominion.salud.nomenclator.negocio.entities.aemps.Dcpf; import com.dominion.salud.nomenclator.negocio.entities.aemps.Dcsa; import com.dominion.salud.nomenclator.negocio.entities.aemps.Envases; import com.dominion.salud.nomenclator.negocio.entities.aemps.Excipientes; import com.dominion.salud.nomenclator.negocio.entities.aemps.FormasFar; import com.dominion.salud.nomenclator.negocio.entities.aemps.FormasFarSimp; import com.dominion.salud.nomenclator.negocio.entities.aemps.Laboratorios; import com.dominion.salud.nomenclator.negocio.entities.aemps.MedAtc; import com.dominion.salud.nomenclator.negocio.entities.aemps.MedExcipientes; import com.dominion.salud.nomenclator.negocio.entities.aemps.MedNotas; import com.dominion.salud.nomenclator.negocio.entities.aemps.MedPrincipios; import com.dominion.salud.nomenclator.negocio.entities.aemps.MedVias; import com.dominion.salud.nomenclator.negocio.entities.aemps.Medicamentos; import com.dominion.salud.nomenclator.negocio.entities.aemps.Notas; import com.dominion.salud.nomenclator.negocio.entities.aemps.PrincipiosActivos; import com.dominion.salud.nomenclator.negocio.entities.aemps.SituacionRegistro; import com.dominion.salud.nomenclator.negocio.entities.aemps.UnidadesContenido; import com.dominion.salud.nomenclator.negocio.entities.aemps.UnidadesDosis; import com.dominion.salud.nomenclator.negocio.entities.aemps.ViasAdmin; import com.dominion.salud.nomenclator.negocio.entities.tools.BuzonSucesos; import com.dominion.salud.nomenclator.negocio.repositories.aemps.AtcDesaconRepository; import com.dominion.salud.nomenclator.negocio.repositories.aemps.AtcRepository; import com.dominion.salud.nomenclator.negocio.repositories.aemps.AtcTeratogeniasRepository; import com.dominion.salud.nomenclator.negocio.repositories.aemps.DcpRepository; import com.dominion.salud.nomenclator.negocio.repositories.aemps.DcpfRepository; import com.dominion.salud.nomenclator.negocio.repositories.aemps.DcsaRepository; import com.dominion.salud.nomenclator.negocio.repositories.aemps.EnvasesRepository; import com.dominion.salud.nomenclator.negocio.repositories.aemps.ExcipientesRepository; import com.dominion.salud.nomenclator.negocio.repositories.aemps.FormasFarRepository; import com.dominion.salud.nomenclator.negocio.repositories.aemps.FormasFarSimpRepository; import com.dominion.salud.nomenclator.negocio.repositories.aemps.LaboratoriosRepository; import com.dominion.salud.nomenclator.negocio.repositories.aemps.MedicamentosRepository; import com.dominion.salud.nomenclator.negocio.repositories.aemps.NotasRepository; import com.dominion.salud.nomenclator.negocio.repositories.aemps.PrincipiosActivosRepository; import com.dominion.salud.nomenclator.negocio.repositories.aemps.SituacionRegistroRepository; import com.dominion.salud.nomenclator.negocio.repositories.aemps.UnidadesContenidoRepository; import com.dominion.salud.nomenclator.negocio.repositories.aemps.UnidadesDosisRepository; import com.dominion.salud.nomenclator.negocio.repositories.aemps.ViasAdminRepository; import com.dominion.salud.nomenclator.negocio.service.aemps.AtcDuplicidadesService; import com.dominion.salud.nomenclator.negocio.service.aemps.AtcInteraccionesService; import com.dominion.salud.nomenclator.negocio.service.aemps.MedAtcService; import com.dominion.salud.nomenclator.negocio.service.aemps.MedExcipientesService; import com.dominion.salud.nomenclator.negocio.service.aemps.MedNotasService; import com.dominion.salud.nomenclator.negocio.service.aemps.MedPrincipiosService; import com.dominion.salud.nomenclator.negocio.service.aemps.MedViasService; import com.dominion.salud.nomenclator.negocio.service.tools.BuzonSucesosService; import java.io.File; import java.text.DecimalFormat; import java.text.ParseException; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import javax.persistence.NoResultException; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.apache.commons.lang3.time.DateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * * @author jcgonzalez */ @Service("medicamentosV5ServiceImpl") public class MedicamentosV5ServiceImpl { private static final Logger logger = LoggerFactory.getLogger(MedicamentosV5ServiceImpl.class); @Autowired private MedicamentosRepository medicamentosRepository; @Autowired private BuzonSucesosService buzonSucesosService; @Autowired private SituacionRegistroRepository situacionRegistroRepository; @Autowired private DcpRepository dcpRepository; @Autowired private DcpfRepository dcpfRepository; @Autowired private DcsaRepository dcsaRepository; @Autowired private EnvasesRepository envasesRepository; @Autowired private FormasFarRepository formasFarRepository; @Autowired private FormasFarSimpRepository formasFarSimpRepository; @Autowired private LaboratoriosRepository laboratoriosRepository; @Autowired private UnidadesContenidoRepository unidadesContenidoRepository; @Autowired private MedExcipientesService medExcipientesService; @Autowired private ExcipientesRepository excipientesRepository; @Autowired private MedPrincipiosService medPrincipiosService; @Autowired private PrincipiosActivosRepository principiosActivosRepository; @Autowired private UnidadesDosisRepository unidadesDosisRepository; @Autowired private MedViasService medViasAdminService; @Autowired private ViasAdminRepository viasAdminRepository; @Autowired private MedNotasService medNotasService; @Autowired private NotasRepository notasRepository; @Autowired private MedAtcService medAtcService; @Autowired private AtcRepository atcRepository; @Autowired private AtcInteraccionesService atcInteraccionesService; @Autowired private AtcDuplicidadesService atcDuplicidadesService; @Autowired private AtcTeratogeniasRepository atcTeratogeniasRepository; @Autowired private AtcDesaconRepository atcDesaconRepository; public void load(File xml) throws JAXBException { JAXBContext jaxbContext = JAXBContext.newInstance(AempsMedicamentos.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); AempsMedicamentos aempsMedicamentos = (AempsMedicamentos) jaxbUnmarshaller.unmarshal(xml); if (aempsMedicamentos != null && aempsMedicamentos.getPrescription() != null && !aempsMedicamentos.getPrescription().isEmpty()) { Set<String> mensajes = new HashSet<>(); BuzonSucesos buzonSucesos = new BuzonSucesos(); buzonSucesos.setCodProceso(BuzonSucesos.DICCIONARIO_MEDICAMENTOS); buzonSucesos.setFecIni(new Date()); int contador = 1; logger.info(" Se han encontrado " + aempsMedicamentos.getPrescription().size() + " registros."); Iterator<MedicamentosType> iterador = aempsMedicamentos.getPrescription().iterator(); while (iterador.hasNext()) { MedicamentosType medicamentosType = iterador.next(); try { logger.debug(" Procesando el registro " + contador + " de " + aempsMedicamentos.getPrescription().size()); loadMedicamento(medicamentosType); } catch (Exception e) { logger.error(" No se ha podido cargar el registro con COD_NAC: " + medicamentosType.getCodNacion() + ": " + e.toString()); mensajes.add("No se ha podido cargar el registro con COD_NAC: " + medicamentosType.getCodNacion() + ": " + e.toString()); } contador++; } //BUZON_SUCESOS buzonSucesos.setFecFin(new Date()); if (!mensajes.isEmpty()) { String mensaje = "El proceso se ha finalizado, pero se ha producido errores:<br>"; logger.warn(" Se han producido los siguientes errores en la carga de registros: "); Iterator<String> iteradorMensajes = mensajes.iterator(); while (iteradorMensajes.hasNext()) { String linea = iteradorMensajes.next(); logger.warn(" - " + linea); mensaje += "- " + linea + "<br>"; } buzonSucesos.setMensaje(mensaje); } else { buzonSucesos.setMensaje("El proceso se ha finalizado correctamente"); } buzonSucesosService.save(buzonSucesos); } } @Transactional private void loadMedicamento(MedicamentosType medicamentosType) throws Exception { Medicamentos medicamentos = new Medicamentos(); medicamentos.setCodNacional(medicamentosType.getCodNacion()); try { logger.debug(" Cargando MEDICAMENTOS para el COD_NAC: " + medicamentos.getCodNacional()); medicamentos = medicamentosRepository.findByCodNac(medicamentos); logger.debug(" Se ha encontrado MEDICAMENTOS con COD_NAC: " + medicamentos.getCodNacional() + ". Actualizando registro: " + medicamentos.toString()); } catch (NoResultException nre) { logger.debug(" No se ha encontrado MEDICAMENTOS con COD_NAC: " + medicamentos.getCodNacional() + ". Insertando nuevo registro: " + medicamentos.toString()); } finally { medicamentos.setNroPactiv(medicamentosType.getNroPactiv()); medicamentos.setFecSitReg(medicamentosType.getFechaSituacionRegistro() != null ? medicamentosType.getFechaSituacionRegistro().toGregorianCalendar().getTime() : null); medicamentos.setFecSitRegPresen(medicamentosType.getFecSitregPresen() != null ? medicamentosType.getFecSitregPresen().toGregorianCalendar().getTime() : null); medicamentos.setTxtDesComercial(medicamentosType.getDesNomco()); medicamentos.setTxtDesDosific(medicamentosType.getDesDosific()); medicamentos.setTxtDesPresen(medicamentosType.getDesPrese()); medicamentos.setFecAutorizacion(medicamentosType.getFechaAutorizacion() != null ? medicamentosType.getFechaAutorizacion().toGregorianCalendar().getTime() : null); medicamentos.setFecComer(medicamentosType.getFecComer() != null ? medicamentosType.getFecComer().toGregorianCalendar().getTime() : null); medicamentos.setAfectaConduccion(medicamentosType.isSwAfectaConduccion() ? "S" : "N"); medicamentos.setBaseAPlantas(medicamentosType.isSwBaseAPlantas() ? "S" : "N"); medicamentos.setBiosimilar(medicamentosType.isBiosimilar() ? "S" : "N"); medicamentos.setComercializado(medicamentosType.isSwComercializado() ? "S" : "N"); medicamentos.setContenido(medicamentosType.getContenido()); medicamentos.setDiagHospitalario(medicamentosType.isSwDiagnosticoHospitalario() ? "S" : "N"); medicamentos.setEnvaseClinico(medicamentosType.isSwEnvaseClinico() ? "S" : "N"); medicamentos.setEspecialCtrlMed(medicamentosType.isSwEspecialControlMedico() ? "S" : "N"); medicamentos.setEstupefaciente(medicamentosType.isSwEstupefaciente() ? "S" : "N"); medicamentos.setExcipDeclOblig(medicamentosType.isSwTieneExcipientesDeclObligatoria() ? "S" : "N"); medicamentos.setGenerico(medicamentosType.isSwGenerico() ? "S" : "N"); medicamentos.setHuerfano(medicamentosType.isSwHuerfano() ? "S" : "N"); medicamentos.setListaEstupe(medicamentosType.getListaEstupefaciente()); medicamentos.setListaPsicotropo(medicamentosType.getListaPsicotropo()); medicamentos.setNroConte(medicamentosType.getNroConte()); medicamentos.setNroRegistro(medicamentosType.getNroDefinitivo()); medicamentos.setPsicotropo(medicamentosType.isSwPsicotropo() ? "S" : "N"); medicamentos.setSustituible(medicamentosType.isSwSustituible() ? "S" : "N"); medicamentos.setTld(medicamentosType.isSwTld() ? "S" : "N"); medicamentos.setTrianguloNegro(medicamentosType.isSwTrianguloNegro() ? "S" : "N"); medicamentos.setUsoHospitalario(medicamentosType.isSwUsoHospitalario() ? "S" : "N"); medicamentos.setUrlFictec(medicamentosType.getUrlFictec()); medicamentos.setUrlProsp(medicamentosType.getUrlProsp()); //SIT_REG try { logger.debug(" Cargando SIT_REG para el COD_SIT_REG: " + medicamentosType.getCodSitreg()); SituacionRegistro situacionRegistro = new SituacionRegistro(); situacionRegistro.setCodSitReg(Integer.toString(medicamentosType.getCodSitreg())); medicamentos.setSitReg(situacionRegistroRepository.findByCodSituacionRegistro(situacionRegistro)); logger.debug(" SIT_REG para el COD_SIT_REG: " + situacionRegistro.getCodSitReg() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn(" No se ha encontrado SIT_REG con COD_SIT_REG: " + medicamentosType.getCodSitreg()); } //SIT_REG_DOS_PRESEN try { logger.debug(" Cargando SIT_REG_DOS_PRESEN para el COD_SIT_REG_DOS_PRESEN: " + medicamentosType.getCodSitregPresen()); SituacionRegistro situacionRegistroDosPresen = new SituacionRegistro(); situacionRegistroDosPresen.setCodSitReg(Integer.toString(medicamentosType.getCodSitregPresen())); medicamentos.setSitRegPresen( situacionRegistroRepository.findByCodSituacionRegistro(situacionRegistroDosPresen)); logger.debug(" SIT_REG_DOS_PRESEN para el COD_SIT_REG_DOS_PRESEN: " + situacionRegistroDosPresen.getCodSitReg() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn(" No se ha encontrado SIT_REG_DOS_PRESEN con COD_SIT_REG_DOS_PRESEN: " + medicamentosType.getCodSitregPresen()); } //DCP if (medicamentosType.getCodDcp() != null) { try { logger.debug(" Cargando DCP para el COD_DCP: " + medicamentosType.getCodDcp()); Dcp dcp = new Dcp(); dcp.setCodDcp(new DecimalFormat("#.#").format(medicamentosType.getCodDcp())); medicamentos.setDcp(dcpRepository.findByCodDcp(dcp)); logger.debug(" DCP para el COD_DCP: " + dcp.getCodDcp() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn(" No se ha encontrado DCP con COD_DCP: " + medicamentosType.getCodDcp()); } } //DCPF if (medicamentosType.getCodDcpf() != null) { try { logger.debug(" Cargando DCPF para el COD_DCPF: " + medicamentosType.getCodDcpf()); Dcpf dcpf = new Dcpf(); dcpf.setCodDcpf(new DecimalFormat("#.#").format(medicamentosType.getCodDcpf())); medicamentos.setDcpf(dcpfRepository.findByCodDcpf(dcpf)); logger.debug( " DCPF para el COD_DCPF: " + dcpf.getCodDcpf() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn( " No se ha encontrado DCPF con COD_DCPF: " + medicamentosType.getCodDcpf()); } } //DCSA if (medicamentosType.getCodDcsa() != null) { try { logger.debug(" Cargando DCSA para el COD_DCSA: " + medicamentosType.getCodDcsa()); Dcsa dcsa = new Dcsa(); dcsa.setCodDcsa(new DecimalFormat("#.#").format(medicamentosType.getCodDcsa())); medicamentos.setDcsa(dcsaRepository.findByCodDcsa(dcsa)); logger.debug( " DCSA para el COD_DCSA: " + dcsa.getCodDcsa() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn( " No se ha encontrado DCSA con COD_DCSA: " + medicamentosType.getCodDcsa()); } } //ENVASES if (medicamentosType.getCodEnvase() != null) { try { Envases envases = new Envases(); envases.setCodEnvase(Integer.toString(medicamentosType.getCodEnvase())); logger.debug( " Cargando ENVASES para el COD_ENVASE: " + medicamentosType.getCodEnvase()); medicamentos.setEnvases(envasesRepository.findByCodEnvase(envases)); logger.debug(" ENVASE para el COD_ENVASE: " + envases.getCodEnvase() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn(" No se ha encontrado ENVASES con COD_ENVASE: " + medicamentosType.getCodEnvase()); } } //FORMAS_FAR if (medicamentosType.getCodForfar() != null) { try { FormasFar formasFar = new FormasFar(); formasFar.setCodFormaFar(Integer.toString(medicamentosType.getCodForfar())); logger.debug(" Cargando FORMAS_FAR para el COD_FORMA_FAR: " + medicamentosType.getCodForfar()); medicamentos.setFormasFar(formasFarRepository.findByCodFormaFar(formasFar)); logger.debug(" FORMAS_FAR para el COD_FORMA_FAR: " + formasFar.getCodFormaFar() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn(" No se ha encontrado FORMAS_FAR con COD_FORMA_FAR: " + medicamentosType.getCodForfar()); } } //FORMAS_FAR_SIMP if (medicamentosType.getCodForfarSimplificada() != null) { try { FormasFarSimp formasFarSimp = new FormasFarSimp(); formasFarSimp.setCodFormaFarSimp(Integer.toString(medicamentosType.getCodForfarSimplificada())); logger.debug(" Cargando FORMAS_FAR_SIMP para el COD_FORMA_FAR_SIMP: " + medicamentosType.getCodForfarSimplificada()); medicamentos.setFormasfarSimp(formasFarSimpRepository.findByCodFormaFarSimp(formasFarSimp)); logger.debug(" FORMAS_FAR_SIMP para el COD_FORMA_FAR_SIMP: " + formasFarSimp.getCodFormaFarSimp() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn(" No se ha encontrado FORMAS_FAR_SIMP con COD_FORMA_FAR_SIMP: " + medicamentosType.getCodForfarSimplificada()); } } //LAB_COMER if (medicamentosType.getLaboratorioComercializador() != null) { try { Laboratorios labComer = new Laboratorios(); labComer.setCodLaboratorio(Integer.toString(medicamentosType.getLaboratorioComercializador())); logger.debug(" Cargando LAB_COMER para el COD_LABORATORIO: " + medicamentosType.getLaboratorioComercializador()); medicamentos.setLaboratoriosComer(laboratoriosRepository.findByCodLaboratorio(labComer)); logger.debug(" LAB_COMER para el COD_LABORATORIO: " + labComer.getCodLaboratorio() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn(" No se ha encontrado LAB_COMER con COD_LABORATORIO: " + medicamentosType.getLaboratorioComercializador()); } } //LAB_TITULAR if (medicamentosType.getLaboratorioTitular() != null) { try { Laboratorios labTit = new Laboratorios(); labTit.setCodLaboratorio(Integer.toString(medicamentosType.getLaboratorioTitular())); logger.debug(" Cargando LAB_TITULAR para el COD_LABORATORIO: " + medicamentosType.getLaboratorioTitular()); medicamentos.setLaboratoriosTit(laboratoriosRepository.findByCodLaboratorio(labTit)); logger.debug(" LAB_TITULAR para el COD_LABORATORIO: " + Integer.toString(medicamentosType.getLaboratorioTitular()) + " cargado correctamente"); } catch (NoResultException nre) { logger.warn(" No se ha encontrado LAB_TITULAR con COD_LABORATORIO: " + medicamentosType.getLaboratorioTitular()); } } //UNIDAD_CONTENIDO if (medicamentosType.getUnidContenido() != null) { try { UnidadesContenido unidadesContenido = new UnidadesContenido(); unidadesContenido.setCodUnidContenido(Integer.toString(medicamentosType.getUnidContenido())); logger.debug(" Cargando UNIDAD_CONTENIDO para el COD_UNID_CONTENIDO: " + medicamentosType.getUnidContenido()); medicamentos.setUnidadesContenido( unidadesContenidoRepository.findByCodUnidContenido(unidadesContenido)); logger.debug(" UNIDAD_CONTENIDO para el COD_UNID_CONTENIDO: " + unidadesContenido.getCodUnidContenido() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn(" No se ha encontrado UNIDAD_CONTENIDO con COD_UNID_CONTENIDO: " + medicamentosType.getUnidContenido()); } } medicamentosRepository.save(medicamentos); //MED_PRINCIPIOS if (medicamentosType.getComposicionPa() != null && !medicamentosType.getComposicionPa().isEmpty()) { logger.debug(" Cargando MED_PRINCIPIOS"); List<MedPrincipios> listaMedPrincipios = new ArrayList<>(); Iterator<MedicamentosPrincipiosActivosType> iteradorMedicamentosPrincipiosActivos = medicamentosType .getComposicionPa().iterator(); while (iteradorMedicamentosPrincipiosActivos.hasNext()) { MedicamentosPrincipiosActivosType medicamentosPrincipiosActivosType = iteradorMedicamentosPrincipiosActivos .next(); try { PrincipiosActivos principiosActivos = new PrincipiosActivos(); if (medicamentosPrincipiosActivosType.getCodPrincipioActivo() != null) { principiosActivos.setNroPrActivo( Integer.toString(medicamentosPrincipiosActivosType.getCodPrincipioActivo())); } else { principiosActivos.setNroPrActivo(Integer.toString(medicamentosType.getNroPactiv())); } logger.debug(" Cargando PRINCIPIOS_ACTIVOS para el NRO_PRINCIPIO_ACTIVO: " + medicamentosPrincipiosActivosType.getCodPrincipioActivo()); MedPrincipios medPrincipios = new MedPrincipios(); medPrincipios.setPrincipiosActivos( principiosActivosRepository.findByNroPrActivo(principiosActivos)); medPrincipios.setMedicamentos(medicamentos); //UNID_CONT_ADM (U_C) if (medicamentosPrincipiosActivosType.getUnidadAdministracion() != null) { try { UnidadesContenido uniContAdm = new UnidadesContenido(); uniContAdm.setTxtUnidContenido( medicamentosPrincipiosActivosType.getUnidadAdministracion()); logger.debug(" Cargando UNID_CONT_ADM para el TXT_UNID_CONT: " + medicamentosPrincipiosActivosType.getUnidadAdministracion()); medPrincipios.setUniContAdm( unidadesContenidoRepository.findByTxtUnidContenido(uniContAdm)); logger.debug(" UNID_CONT_ADM para el TXT_UNID_CONT: " + uniContAdm.getTxtUnidContenido() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn( " No se ha encontrado UNID_CONT_ADM con TXT_UNID_CONT: " + medicamentosPrincipiosActivosType.getUnidadAdministracion()); } } //UNI_CONT_COMP (U_C) if (medicamentosPrincipiosActivosType.getUnidadComposicion() != null) { try { UnidadesContenido uniContComp = new UnidadesContenido(); uniContComp.setTxtUnidContenido( medicamentosPrincipiosActivosType.getUnidadComposicion()); logger.debug(" Cargando UNI_CONT_COMP para el TXT_UNID_CONT: " + medicamentosPrincipiosActivosType.getUnidadComposicion()); medPrincipios.setUniContComp( unidadesContenidoRepository.findByTxtUnidContenido(uniContComp)); logger.debug(" UNI_CONT_COMP para el TXT_UNID_CONT: " + uniContComp.getTxtUnidContenido() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn( " No se ha encontrado UNI_CONT_COMP con TXT_UNID_CONT: " + medicamentosPrincipiosActivosType.getUnidadComposicion()); } } //UNI_DOSIS_PA (U_D) if (medicamentosPrincipiosActivosType.getUnidadDosisPa() != null) { try { UnidadesDosis uniDosisPa = new UnidadesDosis(); uniDosisPa.setTxtUnidadDosis(medicamentosPrincipiosActivosType.getUnidadDosisPa()); logger.debug(" Cargando UNI_DOSIS_PA para el TXT_UNID_DOSIS: " + medicamentosPrincipiosActivosType.getUnidadDosisPa()); medPrincipios .setUniDosisPa(unidadesDosisRepository.findByTxtUnidadDosis(uniDosisPa)); logger.debug(" UNI_DOSIS_PA para el TXT_UNID_DOSIS: " + uniDosisPa.getTxtUnidadDosis() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn( " No se ha encontrado UNI_DOSIS_PA con TXT_UNID_DOSIS: " + medicamentosPrincipiosActivosType.getUnidadDosisPa()); } } //UNI_DOSIS_PRES (U_D) if (medicamentosPrincipiosActivosType.getUnidadPrescripcion() != null) { try { UnidadesDosis uniDosisPre = new UnidadesDosis(); uniDosisPre.setTxtUnidadDosis( medicamentosPrincipiosActivosType.getUnidadPrescripcion()); logger.debug(" Cargando UNI_DOSIS_PRES para el TXT_UNID_DOSIS: " + medicamentosPrincipiosActivosType.getUnidadPrescripcion()); medPrincipios .setUniDosisPres(unidadesDosisRepository.findByTxtUnidadDosis(uniDosisPre)); logger.debug(" UNI_DOSIS_PRES para el TXT_UNID_DOSIS: " + uniDosisPre.getTxtUnidadDosis() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn( " No se ha encontrado UNI_DOSIS_PRES con TXT_UNID_DOSIS: " + medicamentosPrincipiosActivosType.getUnidadPrescripcion()); } } //UNI_DOSIS_V_ADM (U_D) if (medicamentosPrincipiosActivosType.getUnidadVolumenUnidadAdministracion() != null) { try { UnidadesDosis uniDosisVAdm = new UnidadesDosis(); uniDosisVAdm.setTxtUnidadDosis( medicamentosPrincipiosActivosType.getUnidadVolumenUnidadAdministracion()); logger.debug(" Cargando UNI_DOSIS_V_ADM para el TXT_UNID_DOSIS: " + medicamentosPrincipiosActivosType.getUnidadVolumenUnidadAdministracion()); medPrincipios.setUniDosisVAdm( unidadesDosisRepository.findByTxtUnidadDosis(uniDosisVAdm)); logger.debug(" UNI_DOSIS_V_ADM para el TXT_UNID_DOSIS: " + uniDosisVAdm.getTxtUnidadDosis() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn( " No se ha encontrado UNI_DOSIS_V_ADM con TXT_UNID_DOSIS: " + medicamentosPrincipiosActivosType .getUnidadVolumenUnidadAdministracion()); } } //UNI_DOSIS_V_COMP (U_D) if (medicamentosPrincipiosActivosType.getUnidadVolumenUnidadComposicion() != null) { try { UnidadesDosis uniDosisVComp = new UnidadesDosis(); uniDosisVComp.setTxtUnidadDosis( medicamentosPrincipiosActivosType.getUnidadVolumenUnidadComposicion()); logger.debug( " Cargando UNI_DOSIS_V_COMP para el TXT_UNID_DOSIS: " + medicamentosPrincipiosActivosType .getUnidadVolumenUnidadComposicion()); medPrincipios.setUniDosisVCom( unidadesDosisRepository.findByTxtUnidadDosis(uniDosisVComp)); logger.debug(" UNI_DOSIS_V_COMP para el TXT_UNID_DOSIS: " + uniDosisVComp.getTxtUnidadDosis() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn( " No se ha encontrado UNI_DOSIS_V_COMP con TXT_UNID_DOSIS: " + medicamentosPrincipiosActivosType .getUnidadVolumenUnidadComposicion()); } } //DosisAdministracion if (NumberUtils.isNumber(StringUtils .replace(medicamentosPrincipiosActivosType.getDosisAdministracion(), ",", "."))) { medPrincipios.setDosisAdm(NumberUtils.createDouble(StringUtils.replace( medicamentosPrincipiosActivosType.getDosisAdministracion(), ",", "."))); } //DosisComposicion if (NumberUtils.isNumber(StringUtils .replace(medicamentosPrincipiosActivosType.getDosisComposicion(), ",", "."))) { medPrincipios.setDosisComp(NumberUtils.createDouble(StringUtils .replace(medicamentosPrincipiosActivosType.getDosisComposicion(), ",", "."))); } //DosisPa if (NumberUtils.isNumber( StringUtils.replace(medicamentosPrincipiosActivosType.getDosisPa(), ",", "."))) { medPrincipios.setDosisPa(NumberUtils.createDouble( StringUtils.replace(medicamentosPrincipiosActivosType.getDosisPa(), ",", "."))); } //CantidadVolumenUnidadAdministracion if (NumberUtils.isNumber(StringUtils.replace( medicamentosPrincipiosActivosType.getCantidadVolumenUnidadAdministracion(), ",", "."))) { medPrincipios.setDosisVAdm(NumberUtils.createDouble(StringUtils.replace( medicamentosPrincipiosActivosType.getCantidadVolumenUnidadAdministracion(), ",", "."))); } //CantidadVolumenUnidadComposicion if (NumberUtils.isNumber(StringUtils.replace( medicamentosPrincipiosActivosType.getCantidadVolumenUnidadComposicion(), ",", "."))) { medPrincipios.setDosisVCom(NumberUtils.createDouble(StringUtils.replace( medicamentosPrincipiosActivosType.getCantidadVolumenUnidadComposicion(), ",", "."))); } medPrincipios.setDosisPres(medicamentosPrincipiosActivosType.getDosisPrescripcion()); medPrincipios.setOrdenColacion(medicamentosPrincipiosActivosType.getOrdenColacion()); listaMedPrincipios.add(medPrincipios); logger.debug(" PRINCIPIOS_ACTIVOS para el NRO_PRINCIPIO_ACTIVO: " + principiosActivos.getNroPrActivo() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn( " No se ha encontrado PRINCIPIOS_ACTIVOS con NRO_PRINCIPIO_ACTIVO: " + medicamentosPrincipiosActivosType.getCodPrincipioActivo()); } } medPrincipiosService.save(medicamentos, listaMedPrincipios); logger.debug(" MED_PRINCIPIOS cargados correctamente"); } //MED_EXCIPIENTES if (medicamentosType.getExcipientes() != null && !medicamentosType.getExcipientes().isEmpty()) { logger.debug(" Cargando MED_EXCIPIENTES"); List<MedExcipientes> listaMedExcipientes = new ArrayList<>(); Iterator<MedicamentosExcipientesType> iteradorMedicamentosExcipientes = medicamentosType .getExcipientes().iterator(); while (iteradorMedicamentosExcipientes.hasNext()) { MedicamentosExcipientesType medicamentosExcipientesType = iteradorMedicamentosExcipientes .next(); try { Excipientes excipientes = new Excipientes(); excipientes .setCodExcipiente(Integer.toString(medicamentosExcipientesType.getCodExcipiente())); logger.debug(" Cargando EXCIPIENTES para el COD_EXCIPIENTE: " + medicamentosExcipientesType.getCodExcipiente()); MedExcipientes medExcipientes = new MedExcipientes(); medExcipientes.setExcipientes(excipientesRepository.findByCodExcipiente(excipientes)); medExcipientes.setMedicamentos(medicamentos); listaMedExcipientes.add(medExcipientes); logger.debug(" EXCIPIENTES para el COD_EXCIPIENTE: " + excipientes.getCodExcipiente() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn(" No se ha encontrado EXCIPIENTES con COD_EXCIPIENTE: " + medicamentosExcipientesType.getCodExcipiente()); } } medExcipientesService.save(medicamentos, listaMedExcipientes); logger.debug(" MED_EXCIPIENTES cargados correctamente"); } //MED_VIAS if (medicamentosType.getViasadministracion() != null && !medicamentosType.getViasadministracion().isEmpty()) { logger.debug(" Cargando MED_VIAS"); List<MedVias> listaMedVias = new ArrayList<>(); Iterator<MedicamentosViasAdminType> iteradorMedicamentosViasAdmin = medicamentosType .getViasadministracion().iterator(); while (iteradorMedicamentosViasAdmin.hasNext()) { MedicamentosViasAdminType medicamentosViasAdminType = iteradorMedicamentosViasAdmin.next(); try { ViasAdmin viasAdmin = new ViasAdmin(); viasAdmin.setCodViaAdmin(Integer.toString(medicamentosViasAdminType.getCodViaAdmin())); logger.debug(" Cargando VIAS_ADMIN para el COD_VIA_ADMIN: " + medicamentosViasAdminType.getCodViaAdmin()); MedVias medVias = new MedVias(); medVias.setViasAdmin(viasAdminRepository.findByCodViasAdmin(viasAdmin)); medVias.setMedicamentos(medicamentos); listaMedVias.add(medVias); logger.debug(" VIAS_ADMIN para el COD_VIA_ADMIN: " + viasAdmin.getCodViaAdmin() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn(" No se ha encontrado VIAS_ADMIN con COD_VIA_ADMIN: " + medicamentosViasAdminType.getCodViaAdmin()); } } medViasAdminService.save(medicamentos, listaMedVias); logger.debug(" MED_VIAS cargados correctamente"); } //MED_NOTAS if (medicamentosType.getNotaseguridad() != null && !medicamentosType.getNotaseguridad().isEmpty()) { logger.debug(" Cargando MED_NOTAS"); List<MedNotas> listaMedNotas = new ArrayList<>(); Iterator<MedicamentosNotasType> iteradorMedicamentosNotas = medicamentosType.getNotaseguridad() .iterator(); while (iteradorMedicamentosNotas.hasNext()) { MedicamentosNotasType medicamentosNotasType = iteradorMedicamentosNotas.next(); MedNotas medNotas = new MedNotas(); medNotas.setMedicamentos(medicamentos); Notas notas = new Notas(); try { notas.setReferencia(medicamentosNotasType.getReferencia()); notas.setAsunto(medicamentosNotasType.getAsunto()); notas.setNumero(medicamentosNotasType.getNumero()); notas.setUrl(medicamentosNotasType.getUrl()); try { notas.setFecha(DateUtils.parseDate(medicamentosNotasType.getFecha(), "dd/MM/YYYY")); } catch (ParseException pe) { logger.warn(" La fecha: " + medicamentosNotasType.getFecha() + " no ha podido ser parseada con el pattern dd/MM/YYYY"); } logger.debug(" Cargando NOTAS para el REFERENCIA: " + medicamentosNotasType.getReferencia()); notas = notasRepository.findByReferencia(notas); logger.debug(" NOTAS para el REFERENCIA: " + notas.getReferencia() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn(" No se ha encontrado NOTAS con REFERENCIA: " + medicamentosNotasType.getReferencia() + ". Insertando registro"); notasRepository.save(notas); } finally { medNotas.setNotas(notas); listaMedNotas.add(medNotas); } } medNotasService.save(medicamentos, listaMedNotas); logger.debug(" MED_NOTAS cargados correctamente"); } //MED_ATC if (medicamentosType.getAtc() != null && !medicamentosType.getAtc().isEmpty()) { logger.debug(" Cargando MED_ATC"); Iterator<MedicamentosAtcType> iteradorMedicamentosAtc = medicamentosType.getAtc().iterator(); while (iteradorMedicamentosAtc.hasNext()) { MedicamentosAtcType medicamentosAtcType = iteradorMedicamentosAtc.next(); List<MedAtc> listaMedAtc = new ArrayList<>(); MedAtc medAtc = new MedAtc(); medAtc.setMedicamentos(medicamentos); try { Atc atc = new Atc(); atc.setCodAtc(medicamentosAtcType.getCodAtc()); logger.debug( " Cargando ATC para el COD_ATC: " + medicamentosAtcType.getCodAtc()); medAtc.setAtc(atcRepository.findByCodAtc(atc)); logger.debug(" ATC para el COD_ATC: " + atc.getCodAtc() + " cargado correctamente"); listaMedAtc.add(medAtc); medAtcService.save(medicamentos, listaMedAtc); //ATC_INTERACCIONES if (medicamentosAtcType.getInteraccionesAtc() != null && !medicamentosAtcType.getInteraccionesAtc().isEmpty()) { logger.debug(" Cargando ATC_INTERACCIONES"); List<AtcInteracciones> listaAtcInteracciones = new ArrayList<>(); Iterator<AtcInteraccionesType> iteradorAtcInteracciones = medicamentosAtcType .getInteraccionesAtc().iterator(); while (iteradorAtcInteracciones.hasNext()) { AtcInteraccionesType atcInteraccionesType = iteradorAtcInteracciones.next(); AtcInteracciones atcInteracciones = new AtcInteracciones(); atcInteracciones.setDescripcion(atcInteraccionesType.getDescripcionAtc()); atcInteracciones.setEfecto(atcInteraccionesType.getEfecto()); atcInteracciones.setOrientacion(atcInteraccionesType.getOrientacion()); atcInteracciones.setAtc(medAtc.getAtc()); try { Atc atcInteraccion = new Atc(); atcInteraccion.setCodAtc(atcInteraccionesType.getAtcInteraccion()); logger.debug( " Cargando ATC_INTERACCION para el COD_ATC: " + atcInteraccionesType.getAtcInteraccion()); atcInteracciones.setInteraccion(atcRepository.findByCodAtc(atcInteraccion)); listaAtcInteracciones.add(atcInteracciones); logger.debug(" ATC_INTERACCION para el COD_ATC: " + atcInteraccion.getCodAtc() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn( " No se ha encontrado ATC_INTERACCION con COD_ATC: " + atcInteraccionesType.getAtcInteraccion() + ". Insertando registro"); } } atcInteraccionesService.save(medAtc.getAtc(), listaAtcInteracciones); logger.debug(" ATC_INTERACCIONES cargados correctamente"); } //ATC_DUPLICIDADES if (medicamentosAtcType.getDuplicidades() != null && !medicamentosAtcType.getDuplicidades().isEmpty()) { logger.debug(" Cargando ATC_DUPLICIDADES"); List<AtcDuplicidades> listaAtcDuplicidades = new ArrayList<>(); Iterator<AtcDuplicidadesType> iteradorAtcDuplicidades = medicamentosAtcType .getDuplicidades().iterator(); while (iteradorAtcDuplicidades.hasNext()) { AtcDuplicidadesType atcDuplicidadesType = iteradorAtcDuplicidades.next(); AtcDuplicidades atcDuplicidades = new AtcDuplicidades(); atcDuplicidades.setDescripcionAtc(atcDuplicidadesType.getDescripcionAtc()); atcDuplicidades.setEfecto(atcDuplicidadesType.getEfecto()); atcDuplicidades.setOrientacion(atcDuplicidadesType.getOrientacion()); atcDuplicidades.setAtc(medAtc.getAtc()); try { Atc atcDuplicidad = new Atc(); atcDuplicidad.setCodAtc(atcDuplicidadesType.getAtcDuplicidad()); logger.debug( " Cargando ATC_DUPLICIDAD para el COD_ATC: " + atcDuplicidadesType.getAtcDuplicidad()); atcDuplicidades.setDuplicidad(atcRepository.findByCodAtc(atcDuplicidad)); listaAtcDuplicidades.add(atcDuplicidades); logger.debug(" ATC_DUPLICIDAD para el COD_ATC: " + atcDuplicidad.getCodAtc() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn( " No se ha encontrado ATC_DUPLICIDAD con COD_ATC: " + atcDuplicidadesType.getAtcDuplicidad() + ". Insertando registro"); } } atcDuplicidadesService.save(medAtc.getAtc(), listaAtcDuplicidades); logger.debug(" ATC_DUPLICIDADES cargados correctamente"); } //ATC_TERATOGENIAS if (StringUtils.isNotBlank(medicamentosAtcType.getTeratogenia())) { logger.debug(" Cargando ATC_TERATOGENIAS"); AtcTeratogenias atcTeratogenias = new AtcTeratogenias(); atcTeratogenias.setAtc(medAtc.getAtc()); try { logger.debug(" Cargando ATC_TERATOGENIA para el COD_ATC: " + medAtc.getAtc().getCodAtc()); atcTeratogenias = atcTeratogeniasRepository.findByCodAtc(atcTeratogenias); logger.debug(" ATC_TERATOGENIA para el COD_ATC: " + atcTeratogenias.getAtc().getCodAtc() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn( " No se ha encontrado ATC_TERATOGENIA con COD_ATC: " + medAtc.getAtc().getCodAtc() + ". Insertando registro"); } finally { atcTeratogenias.setTxtTeratogenia(medicamentosAtcType.getTeratogenia()); atcTeratogeniasRepository.save(atcTeratogenias); } logger.debug(" ATC_TERATOGENIAS cargados correctamente"); } //ATC_DESACON if (medicamentosAtcType.getDesaconsejadosGeriatria() != null && !medicamentosAtcType.getDesaconsejadosGeriatria().isEmpty()) { logger.debug(" Cargando ATC_DESACON"); Iterator<AtcDesaconsejadosType> iteradorAtcDesaconsejados = medicamentosAtcType .getDesaconsejadosGeriatria().iterator(); while (iteradorAtcDesaconsejados.hasNext()) { AtcDesaconsejadosType atcDesaconsejadosType = iteradorAtcDesaconsejados.next(); AtcDesacon atcDesacon = new AtcDesacon(); atcDesacon.setAtc(medAtc.getAtc()); try { logger.debug(" Cargando ATC_DESACON para el COD_ATC: " + medAtc.getAtc().getCodAtc()); atcDesacon = atcDesaconRepository.findByCodAtc(atcDesacon); logger.debug(" ATC_DESACON para el COD_ATC: " + atcDesacon.getAtc().getCodAtc() + " cargado correctamente"); } catch (NoResultException nre) { logger.warn( " No se ha encontrado ATC_DESACON con COD_ATC: " + medAtc.getAtc().getCodAtc() + ". Insertando registro"); } finally { atcDesacon.setBibliografia(atcDesaconsejadosType.getBibliografia()); atcDesacon.setDescripcion(atcDesaconsejadosType.getDescripcion()); atcDesacon .setOrientacionTerap(atcDesaconsejadosType.getOrientacionTerapeutica()); atcDesacon.setRiesgoPaciente(atcDesaconsejadosType.getRiesgoPacience()); atcDesacon.setSituacionAlerta(atcDesaconsejadosType.getSituacionAlerta()); atcDesaconRepository.save(atcDesacon); } } logger.debug(" ATC_DESACON cargados correctamente"); } } catch (NoResultException nre) { logger.warn(" No se ha encontrado ATC con COD_ATC: " + medicamentosAtcType.getCodAtc()); } } logger.debug(" MED_ATC cargados correctamente"); } } } }