Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package br.com.wservice.dao; import br.com.hibernate.entities.LabConvenioDepara; import br.com.hibernate.entities.LabDetalheRequisicao; import br.com.hibernate.entities.LabOrigem; import br.com.hibernate.entities.LabOrigemPK; import br.com.hibernate.entities.LabPaciente; import br.com.hibernate.entities.LabRequisicao; import br.com.hibernate.entities.LabResponsavelVersao; import br.com.hibernate.entities.LabSistema; import br.com.hibernate.entities.LabSolicitante; import br.com.hibernate.entities.LabUnidade; import br.com.hibernate.utils.OracleHelper; import br.com.utils.tipstricks.ArrayItems; import br.com.utils.tipstricks.DateManipulador; import br.com.wservice.XmlExame; import br.com.wservice.XmlRetorno; import br.com.wservice.XmlSolicitacao; import br.com.wservice.exceptions.LabRequisicaoException; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.hibernate.HibernateException; import org.hibernate.Session; /** * * @author eros */ public class LabRequisicaoDao { /** * * @param sistema * @param oriStCodigo * @param solicitacao * @return */ private LabOrigem defineOrigem(LabSistema sistema, String oriStCodigo, XmlSolicitacao solicitacao) { if (oriStCodigo != null) { // return (LabOrigem) OracleHelper.getObject(LabOrigem.class, new LabOrigemPK(oriStCodigo, solicitacao.getUniStCodigo()), solicitacao.getStrDbName()); return ArrayItems.grabLabOrigem(oriStCodigo, solicitacao.getUniStCodigo(), solicitacao.getStrDbName()); } else { //return (LabOrigem) OracleHelper.getObject(LabOrigem.class, new LabOrigemPK(sistema.getOriStCodigo(), solicitacao.getUniStCodigo()), solicitacao.getStrDbName()); return ArrayItems.grabLabOrigem(sistema.getOriStCodigo(), solicitacao.getUniStCodigo(), solicitacao.getStrDbName()); } } /** * Constroi LabRequisicao pesquisando primeiro no DB ou criando e salvando no DB * @param xmlSol * @param pac * @param req * @return */ private LabRequisicao buildLabRequisicao(XmlSolicitacao xmlSol, LabPaciente pac, LabRequisicao req) { Date dtDb = OracleHelper.getDateFromDB(xmlSol.getStrDbName()); //Date dataCadastro = formataDataCadastro(xmlSol); // xmlSol.setDataCadastro(dataCadastro.toString()); if (req == null) { req = new LabRequisicao(); req.setReqInCodigo(OracleHelper.getLabRequisicaoNextId(xmlSol.getStrDbName())); req.setReqChPrecadastro('N'); req.setLegStCodigo("001"); req.setReqStCodigo(req.getReqInCodigo().toString()); req.setUniStCodigo(xmlSol.getUniStCodigo()); } req.setPacInCodigo(pac.getPacInCodigo()); req.setReqStCodigoAlt(xmlSol.getCodPedido()); req.setReqStPeso(xmlSol.getPeso()); req.setReqStAltura(xmlSol.getAltura()); req.setReqStDUM(xmlSol.getDUM()); req.setReqChGestante(xmlSol.getGestante()); req.setReqStGuia(xmlSol.getReqStGuia()); if (xmlSol.getQuarto() != null && xmlSol.getQuarto().length() > 10) { req.setReqStQuarto(xmlSol.getQuarto().substring(0, 10)); } else { req.setReqStQuarto(xmlSol.getQuarto()); } if (xmlSol.getLeito() != null && xmlSol.getLeito().length() > 10) { req.setReqStLeito(xmlSol.getLeito().substring(0, 10)); } else { req.setReqStLeito(xmlSol.getLeito()); } req.setReqBlInfoAux(xmlSol.getInfoAux()); req.setReqBlObservacao(xmlSol.getOBS()); req.setReqBlObsHD(xmlSol.getHD()); req.setCidStCodigo(xmlSol.getCID()); req.setReqDtCadastro(DateManipulador.formatDateToPattern("dd/MM/yyyy HH:mm:ss", xmlSol.getDataCadastro())); req.setReqDtFatura(DateManipulador.formatDateToPattern("dd/MM/yyyy HH:mm:ss", xmlSol.getDataCadastro())); req.setReqHrCadastro(DateManipulador.formatDateToPattern("dd/MM/yyyy HH:mm:ss", xmlSol.getDataCadastro())); req.setReqChEtiqueta('N'); req.setLegStCodigoFat("NCO"); req.setProStCodigo("1"); req.setSolStCodigo("NI"); req.setSolStEstado("SP"); if (req.getReqDtCadastro() != null) { if (req.getReqDtCadastro().before(dtDb)) { req.setReqDtCadastro(dtDb); req.setReqHrCadastro(dtDb); req.setReqDtFatura(dtDb); req.setReqChAgendado('N'); } else { req.setReqChAgendado('S'); } } else { req.setReqDtCadastro(dtDb); req.setReqHrCadastro(dtDb); req.setReqDtFatura(dtDb); req.setReqChAgendado('N'); } req.setReqDtColeta(req.getReqDtCadastro()); req.setReqHrColeta(req.getReqDtCadastro()); // System.out.println("retornando com a requisio"); return req; } /** * * @param solicitacao * @param pac * @param session * @return LabRequisicao from database or build a new one base on * XmlSolicitacao */ public LabRequisicao buildRequisicao(XmlSolicitacao solicitacao, LabPaciente pac, LabSolicitante solicitante, LabUnidade unidade, String oriStCodigo, LabSistema sistema, Session session, XmlRetorno xRetorno) throws LabRequisicaoException, RuntimeException, HibernateException { // System.out.println("pac.toString 01 : "+pac); LabRequisicao labRequisicao = null; LabResponsavelVersao labResponsavelVersao = buscaLabResponsavelversao(solicitacao); LabOrigem origem = (LabOrigem) OracleHelper.getObject(LabOrigem.class, new LabOrigemPK(oriStCodigo, solicitacao.getUniStCodigo()), solicitacao.getStrDbName()); // Date righNow = new GregorianCalendar().getTime(); if (solicitacao.getCodRequisicao() != null && solicitacao.getCodRequisicao().trim().length() > 0) { Long cod = new Long(solicitacao.getCodRequisicao().trim()); labRequisicao = (LabRequisicao) OracleHelper.getObjectByKey(LabRequisicao.class, "reqInCodigo", cod, solicitacao.getStrDbName()); // if(labRequisicao == null){ // System.out.println("LabRequisicao inexistente solicitacao.getCodRequisicao() = "+solicitacao.getCodRequisicao()); // throw new LabRequisicaoException("LabRequisicao inexistente solicitacao.getCodRequisicao() = "+solicitacao.getCodRequisicao()); // } origem = this.defineOrigem(sistema, labRequisicao.getOriStCodigo(), solicitacao); // System.out.println("req : " + req.toString()); } else if (solicitacao.getCodPedido() != null && solicitacao.getCodPedido().trim().length() > 0) { labRequisicao = (LabRequisicao) OracleHelper.getObjectByKey(LabRequisicao.class, "reqStCodigoAlt", "uniStCodigo", solicitacao.getCodPedido().trim(), solicitacao.getUniStCodigo(), solicitacao.getStrDbName()); // if(labRequisicao == null){ // System.out.println("LabRequisicao inexistente reqStCodigoAlt = "+solicitacao.getCodPedido().trim()+" uniStCodigo = "+solicitacao.getUniStCodigo()); // throw new LabRequisicaoException("LabRequisicao inexistente reqStCodigoAlt = "+solicitacao.getCodPedido().trim()+" uniStCodigo = "+solicitacao.getUniStCodigo()); // } origem = this.defineOrigem(sistema, oriStCodigo, solicitacao); } if (labRequisicao == null) { labRequisicao = this.buildLabRequisicao(solicitacao, pac, null); //new LabRequisicao(solicitacao, pac, null); // System.out.println("req = new LabRequisicao(solicitacao, pac)..............................."); } else {//TODO check if labRequ has already a pac in and than the legStCodigo must be set to 999 to avoid update if (labRequisicao.getReqChPrecadastro() != null && labRequisicao.getReqChPrecadastro().equals('S')) { labRequisicao = this.buildLabRequisicao(solicitacao, pac, labRequisicao); //new LabRequisicao(solicitacao, pac, req); labRequisicao.setSalvoNoDb(true); // System.out.println("req2 : " + req.toString()); } else { labRequisicao.setSalvoNoDb(true); } labRequisicao.setListLabDetalheRequisicao( (List<LabDetalheRequisicao>) OracleHelper.getListOfObjectByKey(LabDetalheRequisicao.class, "reqStCodigo", labRequisicao.getReqStCodigo(), solicitacao.getStrDbName())); // if (!req.getListLabDetalheRequisicao().isEmpty()){ // for (LabDetalheRequisicao det : req.getListLabDetalheRequisicao()) { // MapsAuxiliares.grabLabDetalheRequisicao(det, s); // } // } // System.out.println("req.getPacInCodigo(): "+req.getPacInCodigo()+ " pac.getPacInCodigo()"+pac.getPacInCodigo()); if (!labRequisicao.getUniStCodigo().equalsIgnoreCase(solicitacao.getUniStCodigo())) { // System.out.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"+req.getReqStCodigo()+">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); labRequisicao.setReqProducao(true); xRetorno.getLISTA_FATALS().add("Requisicao nao pretence a esta unidade."); // throw new RuntimeException("Requisicao nao pretence a esta unidade."); } if (labRequisicao.getPacInCodigo() != null && !labRequisicao.getPacInCodigo().equals(pac.getPacInCodigo())) { labRequisicao.setReqProducao(true); xRetorno.getLISTA_FATALS().add("Numero de requisicao utilizada por outro paciente."); } // System.out.println("req.paciente :" + req.getPacInCodigo()); // System.out.println("pac.paciente :" + pac.getPacInCodigo()); // System.out.println("req legstcodigo : " + req.getLegStCodigo()); // System.out.println("req.getPacInCodigo() : "+req.getPacInCodigo()); // System.out.println("pac.getPacInCodigo() : "+pac.getPacInCodigo()); // System.out.println("req.getLegStCodigo() : "+req.getLegStCodigo()); if (labRequisicao.getPacInCodigo().equals(pac.getPacInCodigo()) && (!labRequisicao.getLegStCodigo().equalsIgnoreCase("001") && !labRequisicao.getLegStCodigo().equalsIgnoreCase("002"))) { if (unidade.getUniChRecebeDeveMaterial() != null && unidade.getUniChRecebeDeveMaterial().toString().equalsIgnoreCase("S")) { labRequisicao.setReqProducao(false); //req.setSalvoNoDb(false); //Alterao do legStCodigo para 999, para que as alteraes na requisio no seja efetuada. Este caso a entrada do material //que o paciente trouxe depois do cadastro da requisio. Por tanto no pode ser alterada. labRequisicao.setLegStCodigo("999"); xRetorno.getLISTA_WARNINGS() .add("Requisicao em producao,alterada para tratamento de material."); } else if (labRequisicao.getLegStCodigo().equals("013")) { labRequisicao.setReqProducao(true); xRetorno.getLISTA_WARNINGS().add("Esta requisicao encontra-se cancelada no TMLAB ......"); } else { labRequisicao.setReqProducao(true); xRetorno.getLISTA_FATALS().add("Requisicao em producao, nao pode ser alterada."); } } else if (labRequisicao.getLegStCodigo().equals("013")) { labRequisicao.setReqProducao(true); xRetorno.getLISTA_WARNINGS().add("Esta requisicao encontra-se cancelada no TMLAB ......"); } if (labRequisicao.getPacInCodigo().equals(pac.getPacInCodigo()) && (labRequisicao.getLegStCodigoFat().equalsIgnoreCase("CON") && labRequisicao.getLegStCodigoFat().equalsIgnoreCase("FAT"))) { labRequisicao.setReqProducao(true); xRetorno.getLISTA_FATALS() .add("Requisicao nao pode ser alterada, ja conferida pelo faturamento ou faturada"); } } if (solicitante != null) { labRequisicao.setProStCodigo(solicitante.getProStCodigo().getProStCodigo()); labRequisicao.setSolStCodigo(solicitante.getSolStCodigo()); labRequisicao.setSolStEstado(solicitante.getSolStEstado()); } labRequisicao.setReqChRN(solicitacao.getRN()); labRequisicao.setReqStLocalColeta(solicitacao.getLocalColeta()); // if (solicitacao.getDataCadastro() != null) { // req.setReqDtCadastro(righNow); // req.setReqHrCadastro(righNow); //// req.setReqDtFatura(solicitacao.getDataCadastro()); // req.setReqChAgendado('S'); // } else { // req.setReqDtCadastro(righNow); // req.setReqHrCadastro(righNow); //// req.setReqDtFatura(OracleHelper.getDateFromDB(); // req.setReqChAgendado('N'); // } labRequisicao.setReqStMatricula(solicitacao.getMatricula()); labRequisicao.setReqChEnviado('1'); labRequisicao.setUniStCodigo(solicitacao.getUniStCodigo()); if (origem != null) { labRequisicao.setOriStCodigo(origem.getOriStCodigo()); } else { labRequisicao.setOriStCodigo(oriStCodigo); } if (solicitacao.getGestante() != null) { labRequisicao.setReqChGestante(solicitacao.getGestante()); } else { labRequisicao.setReqChGestante('N'); } labRequisicao.setReqChOcorrencia('N'); this.buscaESetConvenioERegra(labRequisicao, sistema, origem, solicitacao); labRequisicao.setMreInCodigo(labResponsavelVersao.getMreInCodigo()); labRequisicao.setReqChUrgente(this.buscaExamesUrgentes(solicitacao)); if (labRequisicao.isSalvoNoDb()) { this.switchCaseLegStCodigo(labRequisicao, session); } else { session.saveOrUpdate(labRequisicao); } return labRequisicao; } /** * Toma a decisao de fazer ou nao o save/update/nada na LabRequisicao de acordo com o legStCodigo * @param labRequisicao * @param session */ private void switchCaseLegStCodigo(LabRequisicao labRequisicao, Session session) { String legStCodigo = labRequisicao.getLegStCodigo(); switch (legStCodigo) { case "001": // System.out.println("case 001:"); case "002": System.out.println("Status da requisio : " + legStCodigo); session.update(labRequisicao); break; case "003": System.out.println("case 003:"); break; case "004": System.out.println("case 004:"); break; case "005": System.out.println("case 005:"); break; case "006": System.out.println("case 006:"); break; case "007": System.out.println("case 007:"); break; case "011": System.out.println("case 011:"); break; default: System.out.println("case default: legStCodigo = " + legStCodigo); } } /** * Busca lista de LabResponsavelVersao usando uniStCodigo e mreChAtivo e retorna o primeiro item da lista. * @param solicitacao * @return */ private LabResponsavelVersao buscaLabResponsavelversao(XmlSolicitacao solicitacao) { Map<String, Object> mapAnds = new HashMap<>(); mapAnds.put("uniStCodigo", solicitacao.getUniStCodigo()); mapAnds.put("mreChAtivo", 'S'); List<LabResponsavelVersao> listResp = OracleHelper.getListObjectsByAnds(LabResponsavelVersao.class, mapAnds, solicitacao.getStrDbName()); if (listResp != null && !listResp.isEmpty()) { return listResp.get(0); } else { return null; } } /** * Busca LabConvenioDepara para marcar ConStCodigo e RegStCodigo * @param labRequisicao * @param sistema * @param origem * @param solicitacao */ private void buscaESetConvenioERegra(LabRequisicao labRequisicao, LabSistema sistema, LabOrigem origem, XmlSolicitacao solicitacao) { if (solicitacao.getCodConvenio() != null) { LabConvenioDepara labConvenioDepara = ArrayItems.grabLabConvenioDepara(sistema.getSisStCodigo(), solicitacao.getUniStCodigo(), solicitacao.getCodConvenio(), solicitacao.getStrDbName()); if (labConvenioDepara != null) { labRequisicao.setConStCodigo(labConvenioDepara.getLabConvenioDeparaPK().getConStCodigo()); labRequisicao.setRegStCodigo(labConvenioDepara.getLabConvenioDeparaPK().getRegStCodigo()); // if(labConvenioDepara.getOriStCodigo() != null){ // req.setOriStCodigo(labConvenioDepara.getOriStCodigo()); // } } else { labRequisicao.setRegStCodigo(origem.getRegStCodigo()); labRequisicao.setConStCodigo(origem.getConStCodigo().getConStCodigo()); } } else { labRequisicao.setRegStCodigo(origem.getRegStCodigo()); labRequisicao.setConStCodigo(origem.getConStCodigo().getConStCodigo()); } } /** * Busca Exames Urgentes para marcar LabRequisicao como Urgente ou Nao * @param solicitacao * @return */ private Character buscaExamesUrgentes(XmlSolicitacao solicitacao) { if (solicitacao.getListXmlExames() != null && !solicitacao.getListXmlExames().isEmpty()) { for (XmlExame ex : solicitacao.getListXmlExames()) { if (ex.getUrgente() != null && ex.getUrgente().toString().equalsIgnoreCase("S")) { System.out.println("ex.getUrgente() ============> " + ex.getUrgente()); // labRequisicao.setReqChUrgente('S'); return 'S'; // break; } } } else { System.out.println( "solicitacao != null && solicitacao.getListXmlExames() != null && !solicitacao.getListXmlExames().isEmpty()"); } return 'N'; } }