br.com.wservice.dao.LabRequisicaoDao.java Source code

Java tutorial

Introduction

Here is the source code for br.com.wservice.dao.LabRequisicaoDao.java

Source

/*
 * 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';
    }

}