✏️ 正在编辑: BmgStatus.php
路径:
/srv/systems_dir/yuppiecred/library/Core/Banco/Service/BmgStatus.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Core_Banco_Service_BmgStatus implements Core_Banco_Service_ImportacaoDireta { private $_usuario; private $_senha; private $_usuarioConsig; private $_senhaConsig; private $_bancoId; private $_erros; private $_client = null; private $_url = ''; protected $naoImportados = []; public function __construct($config) { $this->_bancoId = Model_Banco::bancoPorNome('bmg'); if(empty($this->_bancoId)){ throw new Yuppie_Exception("O banco BMG não foi configurado"); } if (empty($config->usuario)) { throw new Yuppie_Exception("API do BMG não foi configurada"); } $this->_url = 'https://ws1.bmgconsig.com.br/webservices/ConsultaStatusAde?wsdl'; $this->_usuario = $config->usuario; $this->_senha = $config->senha; $this->_usuarioConsig = $config->usuario_consig; $this->_senhaConsig = $config->senha_consig; $this->_erros = []; } public function getBancoId() { return $this->_bancoId; } public function getErros() { return $this->_erros; } private function addErro($mensagem) { array_push($this->_erros, $mensagem); } function getUsuario() { return $this->_usuario; } function getSenha() { return $this->_senha; } function getUrl() { return $this->_url; } protected function getClient() { $opts = [ 'http'=> [ 'user_agent' => 'PHPSoapClient' ] ]; $context = stream_context_create($opts); ini_set('default_socket_timeout', 600); $client = new SoapClient($this->getUrl(), [ 'trace' => true, 'soap_version' => SOAP_1_1, 'connection_timeout' => 500000, 'cache_wsdl' => WSDL_CACHE_NONE, 'keep_alive' => true, 'stream_context' => $context, 'exception' => true, ]); return $client; } /** * Requisita os dados do contrato no webservice * * @param string $dataMovimento * @return array return * * @throws Core_Exception */ protected function requestStatus($dataMovimento) { $request = <<<XML <soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservice.econsig.bmg.com"> <soapenv:Header/> <soapenv:Body> <web:consultaStatusAde soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <param xsi:type="web:ConsultaStatusAdeParameter"> <login xsi:type="soapenc:string">{$this->_usuario}</login> <senha xsi:type="soapenc:string">{$this->_senha}</senha> <dataFinal xsi:type="xsd:dateTime">{$dataMovimento}T23:59:59</dataFinal> <dataInicial xsi:type="xsd:dateTime">{$dataMovimento}T00:00:00</dataInicial> <listaAdes xsi:type="con:ArrayOf_soapenc_string" soapenc:arrayType="soapenc:string[]" xmlns:con="http://localhost:8080/webservices/ConsultaStatusAde" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"/> <loginConsig xsi:type="soapenc:string">{$this->_usuarioConsig}</loginConsig> <senhaConsig xsi:type="soapenc:string">{$this->_senhaConsig}</senhaConsig> </param> </web:consultaStatusAde> </soapenv:Body> </soapenv:Envelope> XML; return $this->_client->__doRequest($request, $this->_url, 'consultaStatusAde', 0); } public function importar($dataImportacao = null) { $data = Core_Util::convertDate($dataImportacao); $falhaImportacao = null; $this->_client = $this->getClient(); $retorno = $this->requestStatus($data); $result = $this->extrairDados($retorno); return $this->importarStatus($result); } public function importarStatus($sheetDataStatus) { if( empty($sheetDataStatus) ){ return; } foreach ( $sheetDataStatus->listaStatus as $adesao ) { $dadosStatus = [ 'status_proposta' => null, 'numero_ade' => $adesao->numero ]; try { $this->_getStatusProposta($adesao, $dadosStatus); $this->salvarLinhaStatus($adesao, $dadosStatus); } catch ( Exception $e ) { $this->_addNaoImportado($dadosStatus, $adesao, $this->naoImportados, $e->getMessage()); } } return $this->naoImportados; } private function extrairDados($response) { $xml = simplexml_load_string($response, NULL, NULL, "http://webservice.econsig.bmg.com"); $data = $xml->children("soapenv", true)->children("ns1", true)->children(); return $data->consultaStatusAdeReturn->listaStatus; } protected function salvarLinhaStatus($sheetData, &$dados) { $log = $this->getLogger("DADOS STATUS PROPOSTA"); $dbContrato = new Model_DbTable_Contrato(); $dbContrato->closeConnection(); $dadosContrato = $this->_adeExiste($dbContrato, $dados); $protocolos = null; if ($dadosContrato) { $protocolos = (new Model_DbTable_ProtocoloContrato)->fetchRow([ "contrato_id = ?" => $dadosContrato['id'] ], 'id DESC'); if ($protocolos) { $motivo = 'Contrato está pago e não pode ser alterado.'; $log->log("Contrato NAO foi atualizado. Motivo : $motivo", Zend_Log::INFO); $this->_addNaoImportado($dados, $sheetData, $this->naoImportados, $motivo); return; } if ($dados['status_proposta'] == 43 && !empty($dadosContrato['data_liberacao'])) { $motivo = 'Contrato está pago e não pode ser alterado.'; $log->log("Contrato NAO foi atualizado. Motivo : $motivo", Zend_Log::INFO); $this->_addNaoImportado($dados, $sheetData, $this->naoImportados, $motivo); return; } $result = $dbContrato->update($dados, ["id = ?" => $dadosContrato['id']]); if ($result) { $log->log("Contrato atualizado.", Zend_Log::INFO); } return $result; } } protected function _adeExiste($dbtable, $dados) { $where = ["numero_ade = ? " => $dados['numero_ade'], "banco_id = ?" => $this->getBancoId()]; $this->_dadosContrato = $dbtable->fetchRow($where); return $this->_dadosContrato; } protected function _getStatusProposta($sheetData, array &$dados) { $dataLiberacao = null; $statusProposta = $sheetData->status; $statusId = null; $status = new Model_StatusProposta(); $dadosStatus = $status->existe($statusProposta ?? null); if( empty($dadosStatus) && !empty($statusProposta) ){ // se não existir, cadastra $status->setDescricao($statusProposta); $statusId = $status->salvar($status); } else if( $dadosStatus['parent_id'] ){ //verifica se o status tem parent_id, se tiver, usa o parent_id $dadosParent = $status->exibir($dadosStatus['parent_id']); $statusId = $dadosParent['id']; //QUANDO FOR OPERACAO FINALIZADA, COLOCAR A DATA DE LIBERACAO if( isset($statusId) && $statusId == 43 ){ $dataLiberacao = $sheetData['data']; if( !empty($dataLiberacao) ){ $dataLiberacao = Core_Util::convertDate($dataLiberacao); if( is_array($dataLiberacao) ){ throw new Core_Exception("Não foi possível converter a data de liberação para o banco de dados. ({$dataLiberacao})"); } } } } else { $statusId = $dadosStatus['id']; } if( $statusId != null ){ $dados['status_proposta'] = $statusId; } $dados['data_liberacao'] = $dataLiberacao; } /** * Transforma a data para o padrão Y-m-d * * @param string $dataImportacao * @return string * * @throws Yuppie_Exception */ private function formatData($dataImportacao) { if (empty($dataImportacao)){ $dt = new DateTime(); return $dt->sub(new DateInterval('P1D'))->format('Y-m-d'); } $data = Core_Util::convertDate($dataImportacao, 'Y-m-d'); if( is_array($data) ){ throw new Yuppie_Exception('Data inválida'); } return $data; } protected function _addNaoImportado($dados, $sheetData, array &$naoImportados, $motivo = '') { array_push($naoImportados, [ 'numero_ade' => current($sheetData->numero), 'motivo' => $motivo, 'cpf' => String_Refatorar::formatarCpf($sheetData->cpfCliente), 'cliente' => trim($sheetData->nomeCliente), 'data_falha' => Zend_Date::now()->get('yyyy-MM-dd HH:mm:ss') ]); } private function getLogger($tipoImportacao){ /* Apenas para LOG */ $urlSistema = Yuppie_Auth::getSiteKey(); $writer = new Zend_Log_Writer_Stream("/var/log/sistemayuppie/zf_log_webservice_{$urlSistema}_" . date('dmY') . ".txt"); $classeChamada = get_class($this); $log = new Zend_Log($writer); $log->log('#######################', Zend_Log::INFO); $log->log("IMPORTAÇÃO $tipoImportacao: " . $classeChamada, Zend_Log::INFO); $log->log('ARQUIVO IMPORTADO: ' . print_r('webservice', true), Zend_Log::INFO); $log->log("Usuário logado: " . Yuppie_Auth::getIdentity()->login, Zend_Log::INFO); return $log; } }
💾 保存文件
← 返回文件管理器