✏️ 正在编辑: DigitacaoAutomatica.php
路径:
/srv/systems_dir/yuppiecred/application/models/DigitacaoAutomatica.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php use Modules\SimulacaoAberta\Service\SimulacaoAbertaService; class Model_DigitacaoAutomatica { public const VLR_SALARIO_MINIMO = 1631; public const DIFF_SALARIO_MINIMO = 113; public const PERC_REAJUSTE = 7.44; /** * Verifica se tem digitação em andamento no banco informado * @param $cpf CPF do cliente para busca * @param $banco Nome do banco que será digitado * @return mixed array|bool */ public function temDigitacaoAndamento(string $cpf, string $banco, string $tipoOperacao) : array { $digitacaoEmAndamento = (new Model_DbTable_DigitacaoAutomatica())->fetchRow(["cpf = ?" => $cpf, "banco = ?" => $banco, "tipo_operacao = ?" => $tipoOperacao]); $diasDigitado = $digitacaoEmAndamento ? (new DateTime('now'))->diff(new DateTime($digitacaoEmAndamento->data_cadastro))->days : 0; if ($digitacaoEmAndamento && in_array($digitacaoEmAndamento->status_digitacao, ["A Digitar", "PROCESSANDO"])) { return [ 'erro' => true, 'descricao' => "Digitação já acionada para este cliente neste banco", 'dias_digitado' => $diasDigitado ]; } if ($digitacaoEmAndamento && $digitacaoEmAndamento->status_digitacao == "DIGITADO" && $diasDigitado < 30) { return [ 'erro' => true, 'descricao' => "Cliente já possui operação digitada nesse banco com menos de 30 dias", 'dias_digitado' => $diasDigitado ]; } return [ 'erro' => false, 'id' => $digitacaoEmAndamento->id, 'dados_digitacao_andamento' => $digitacaoEmAndamento, 'dias_digitado' => $diasDigitado ]; } /** * Verifica se o cliente possui contrato na base do Yuppie * @param int $clienteId ID do cliente cadastrado no Yuppie * @param stdClass $dadosContrato * @param Zend_Db_Table_Row_Abstract $dadosCliente */ public function temContrato(int $clienteId, stdClass &$dadosContrato, Zend_Db_Table_Row_Abstract &$dadosCliente) : void { $contratos = (new Model_Cliente())->getContratos(['cliente_id' => $clienteId], "id DESC"); if (empty($contratos)) { return; } foreach ($contratos as $contrato) { if (empty($dadosContrato->banco_beneficiado) && !empty($contrato->banco_beneficiado)) { $dadosContrato->banco_beneficiado = $contrato->banco_beneficiado; } if ($dadosContrato->banco_beneficiado == $contrato->banco_beneficiado) { if (empty($dadosContrato->agencia_beneficiado) && !empty($contrato->agencia_beneficiado)) { $dadosContrato->agencia_beneficiado = $contrato->agencia_beneficiado; } if (empty($dadosContrato->conta_beneficiado) && !empty($contrato->conta_beneficiado)) { $dadosContrato->conta_beneficiado = $contrato->conta_beneficiado; } } $dadosContrato->valor_beneficio = empty($dadosContrato->valor_beneficio) && !empty($contrato->valor_beneficio) ? $contrato->valor_beneficio : self::VLR_SALARIO_MINIMO; $dadosContrato->numero_beneficio = empty($dadosContrato->numero_beneficio) && !empty($contrato->numero_beneficio) ? $contrato->numero_beneficio : ""; $dadosContrato->especie = empty($dadosContrato->especie) && !empty($contrato->especie)? $contrato->especie : ""; $dadosCliente->cep = !empty($contrato->cep) ? String_Refatorar::soNumeros($contrato->cep) : String_Refatorar::soNumeros($dadosCliente->cep); $dadosCliente->endereco = !empty($contrato->endereco) ? $contrato->endereco : $dadosCliente->endereco; $dadosCliente->bairro = !empty($contrato->bairro) ? $contrato->bairro : $dadosCliente->bairro; $dadosCliente->cidade = !empty($contrato->cidade) ? $contrato->cidade : $dadosCliente->cidade; $dadosCliente->uf = !empty($contrato->uf) ? $contrato->uf : $dadosCliente->uf; if (empty($dadosContrato->corretor_id) && !empty($contrato->corretor_id)) { $dadosContrato->corretor_id = $contrato->corretor_id; } } } /** * Verifica se o cliente existe no banco de dados para puxar os dados * @param string $cpf * @param stdClass $dadosCliente Onde serão retornados os dados para uso */ public function clienteExiste($cpf, array &$dadosCliente) : bool { $cliente = (new Model_Cliente())->existe($cpf); if (empty($cliente)) { return false; } $dadosCliente['itens']['telefones'][0]['celular'] = !empty($cliente->celular) ? String_Refatorar::soNumeros($cliente->celular) : null; $dadosCliente['data_nascimento'] = !empty($cliente->data_nascimento) ? $cliente->data_nascimento : null; $dadosCliente['rg'] = !empty($cliente->rg) ? $cliente->rg : null; $dadosCliente['orgao_emissor'] = !empty($cliente->orgao_expedidor) ? $cliente->orgao_expedidor : null; $dadosCliente['uf_emissor'] = !empty($cliente->uf_expedidor) ? $cliente->uf_expedidor : null; $dadosCliente['data_emissao_rg'] = !empty($cliente->data_expedicao) ? $cliente->data_expedicao : null; $dadosCliente['sexo'] = !empty($cliente->sexo) ? $cliente->sexo : null; $dadosCliente['nome_mae'] = !empty($cliente->nome_mae) ? $cliente->nome_mae : null; $dadosCliente['possui_representante_legal'] = !empty($cliente->representante_legal) ? $cliente->representante_legal : null; $dadosCliente['nome_representante_legal'] = !empty($cliente->nome_representante) ? $cliente->nome_representante : null; $dadosCliente['cpf_representante_legal'] = !empty($cliente->cpf_representante) ? $cliente->cpf_representante : null; $dadosCliente['itens']['enderecos'][0]['cep'] = !empty($cliente->cep) ? String_Refatorar::soNumeros($cliente->cep) : null; $dadosCliente['itens']['enderecos'][0]['endereco'] = !empty($cliente->endereco) ? $cliente->endereco : null; $dadosCliente['itens']['enderecos'][0]['bairro'] = !empty($cliente->bairro) ? $cliente->bairro : null; $dadosCliente['itens']['enderecos'][0]['cidade'] = !empty($cliente->cidade) ? $cliente->cidade : null; $dadosCliente['itens']['enderecos'][0]['uf'] = !empty($cliente->uf) ? $cliente->uf : null; // $dadosCliente->numero = !empty($cliente->numero) ? $cliente->numero : null; $dadosCliente['banco_beneficiado'] = !empty($cliente->banco_beneficiado) ? $cliente->banco_beneficiado : null; $dadosCliente['agencia_beneficiado'] = !empty($cliente->agencia_beneficiado) ? $cliente->agencia_beneficiado : null; $dadosCliente['conta_beneficiado'] = !empty($cliente->conta_beneficiado) ? $cliente->conta_beneficiado : null; $dadosCliente['digito_conta_beneficiado'] = !empty($cliente->digito_conta_beneficiado) ? $cliente->digito_conta_beneficiado : null; $dadosCliente['tipo_conta_beneficiado'] = !empty($cliente->tipo_conta_beneficiado) ? $cliente->tipo_conta_beneficiado : null; // $dadosCliente->recebe_pagto_cartao = !empty($cliente->recebe_pagto_cartao) ? $cliente->recebe_pagto_cartao : null; return true; } /** * Verifica se o cliente existe na base do callcenter * @param string $cpf * @param array $dadosCliente * @return bool */ public function clienteExisteCallcenter($cpf, array &$dadosCliente) : bool { $cliente = (new Model_CallcenterBase())->existeCpf($cpf); if (empty($cliente)) { return false; } $dadosCliente['itens']['telefones'][0] = !empty($cliente->celular) ? String_Refatorar::soNumeros($cliente->celular) : $dadosCliente['celular']; $dadosCliente['data_nascimento'] = !empty($cliente->data_nascimento) ? $cliente->data_nascimento : $dadosCliente['data_nascimento']; $dadosCliente['rg'] = !empty($cliente->rg) ? $cliente->rg : $dadosCliente['rg']; $dadosCliente['orgao_emissor'] = !empty($cliente->orgao_expedidor) ? $cliente->orgao_expedidor : $dadosCliente['orgao_expedidor']; $dadosCliente['uf_emissor'] = !empty($cliente->uf_expedidor) ? $cliente->uf_expedidor : $dadosCliente['uf_expedidor']; $dadosCliente['data_emissao_rg'] = !empty($cliente->data_expedicao) ? $cliente->data_expedicao : $dadosCliente['data_expedicao']; $dadosCliente['sexo'] = !empty($cliente->sexo) ? $cliente->sexo : $dadosCliente['sexo']; $dadosCliente['nome_mae'] = !empty($cliente->nome_mae) ? $cliente->nome_mae : $dadosCliente['nome_mae']; $dadosCliente['possui_representante_legal'] = !empty($cliente->rep_legal) ? $cliente->rep_legal : $dadosCliente['representante_legal']; $dadosCliente['nome_representante_legal'] = !empty($cliente->nome_responsavel) ? $cliente->nome_responsavel : $dadosCliente['nome_representante']; $dadosCliente['cpf_representante_legal'] = !empty($cliente->cpf_responsavel) ? $cliente->cpf_responsavel : $dadosCliente['cpf_representante']; $dadosCliente['itens']['enderecos'][0]['cep'] = !empty($cliente->cep) ? String_Refatorar::soNumeros($cliente->cep) : $dadosCliente['cep']; $dadosCliente['itens']['enderecos'][0]['endereco'] = !empty($cliente->endereco) ? $cliente->endereco : $dadosCliente['endereco']; $dadosCliente['itens']['enderecos'][0]['bairro'] = !empty($cliente->bairro) ? $cliente->bairro : $dadosCliente['bairro']; $dadosCliente['itens']['enderecos'][0]['cidade'] = !empty($cliente->cidade) ? $cliente->cidade : $dadosCliente['cidade']; $dadosCliente['itens']['enderecos'][0]['uf'] = !empty($cliente->uf) ? $cliente->uf : $dadosCliente['uf']; $dadosCliente['itens']['enderecos'][0]['numero'] = !empty($cliente->numero) ? $cliente->numero : ''; return true; } /** * Verifica se tem benefícios/matrículas do cliente no callcenter. * É importante ser usado após o método clienteExisteCallcenter * @param string $cpf * @param array $dadosCliente */ public function clienteTemBeneficioCallcenter(string $cpf, array &$dadosCliente) : void { $where = ["cpf_cliente = ?" => $cpf]; if (!empty($dadosCliente['numero_beneficio'])) { $where["TRIM(LEADING '0' FROM beneficio) = ?"] = ltrim($dadosCliente['numero_beneficio'], '0'); } $beneficio = (new Model_DbTable_CallcenterBeneficio())->fetchRow($where, ["data_consulta DESC", "id DESC"]); if (empty($beneficio)) { return; } $dadosCliente['numero_beneficio'] = !empty($beneficio->beneficio) ? $beneficio->beneficio : $dadosCliente['numero_beneficio']; $dadosCliente['especie'] = !empty($beneficio->especie) ? $beneficio->especie : $dadosCliente['especie']; $dadosCliente['valor_beneficio'] = !empty($beneficio->mr) ? $beneficio->mr : null; $dadosCliente['mr'] = !empty($beneficio->mr) ? $beneficio->mr : null; $dadosCliente['margem_livre'] = !empty($beneficio->margem_livre) ? $beneficio->margem_livre : null; $dadosCliente['margem_cartao'] = !empty($beneficio->margem_cartao) ? $beneficio->margem_cartao : null; $dadosCliente['banco_beneficiado'] = !empty($beneficio->banco_pagto) ? $beneficio->banco_pagto : null; $dadosCliente['agencia_beneficiado'] = !empty($beneficio->agencia_pagto) ? $beneficio->agencia_pagto : null; $dadosCliente['conta_beneficiado'] = !empty($beneficio->conta_pagto) ? $beneficio->conta_pagto : null; $dadosCliente['recebe_pagto_cartao'] = !empty($beneficio->tipo_pagto) && stristr($beneficio->tipo_pagto, "Magnetico") ? true : false; } public function notificarCorretorDigitacoes(?array $digitacoes) : void { if (empty($digitacoes)) { return; } $mail = new Core_Mail(); $view = new \Zend_View; $view->setScriptPath(APPLICATION_PATH . '/views/scripts'); foreach ($digitacoes as $corretorId => $digitacao) { $view->corretor = (new Model_Corretor())->exibir($corretorId); $view->digitacoes = $digitacao; try { $mail->enviarMensagemHtml($view->corretor->nome, $view->corretor->email, "Atenção! Digitações Automáticas", $view->render('corretor/notificar-digitacoes-automaticas.phtml'), $corretorId); Yuppie_Log::write("Email enviado para o parceiro " . $view->corretor->nome . " e-mail ({$view->corretor->email}) com as digitações => " . print_r($digitacao, true), $this); } catch (Core_Exception $e) { Yuppie_Log::write("Falha no envio do email o parceiro " . $view->corretor->nome . " e-mail ({$view->corretor->email}) com as digitações => " . print_r($digitacao, true) . " Erro: " . $e->getMessage(), $this); } } } public function tratarDadosCliente(array &$dadosCliente) { $dadosCliente['celular'] = $dadosCliente['celular'] ?: $dadosCliente['itens']['telefones'][0]; $dadosCliente['cep'] = $dadosCliente['cep'] ?: $dadosCliente['itens']['enderecos'][0]['cep']; $dadosCliente['logradouro'] = $dadosCliente['logradouro'] ?: $dadosCliente['itens']['enderecos'][0]['logradouro']; $dadosCliente['bairro'] = $dadosCliente['bairro'] ?: $dadosCliente['itens']['enderecos'][0]['bairro']; $dadosCliente['cidade'] = $dadosCliente['cidade'] ?: $dadosCliente['itens']['enderecos'][0]['cidade']; $dadosCliente['uf'] = $dadosCliente['uf'] ?: $dadosCliente['itens']['enderecos'][0]['uf']; $dadosCliente['numero'] = !empty($dadosCliente['itens']['enderecos'][0]['numero']) ? $dadosCliente['itens']['enderecos'][0]['numero'] : "S/N"; if (!empty($dadosCliente['data_nascimento'])) { try { $dt = new Zend_Date($dadosCliente['data_nascimento']); $dadosCliente['nascto'] = $dt->get('yyyy-MM-dd'); } catch (Exception $e) { // } } if (!empty($dadosCliente['data_expedicao'])) { try { $dt = new Zend_Date($dadosCliente['data_expedicao']); $dadosCliente['data_expedicao'] = $dt->get('yyyy-MM-dd'); } catch (Exception $e) { // } } if (!empty($dadosCliente['banco_beneficiado'])) { $dadosCliente['banco_pagto'] = $dadosCliente['banco_beneficiado']; } if (!empty($dadosCliente['agencia_beneficiado'])) { $dadosCliente['agencia_pagto'] = $dadosCliente['agencia_beneficiado']; } if (!empty($dadosCliente['conta_beneficiado'])) { $dadosCliente['conta_pagto'] = $dadosCliente['conta_beneficiado']; } } public function digitarRefins(array $proposta, SimulacaoAbertaService $service, &$digitados, &$digitadosPorCorretor, $idEsteira) { $serviceDigitacao = new Core_Banco_Service_Autocontratacao_Inss(); $bancosRefin = $serviceDigitacao::getBancosHabilitados('REFINANCIAMENTO'); $allow = false; array_map(function($banco) use ($proposta, &$allow) { if ($banco['metodo'] == $proposta['consulta_banco']) { $allow = true; } }, $bancosRefin); if (!$allow) { (new Model_DbTable_DigitacaoAutomatica())->update([ "status_digitacao" => 'ERRO', "descricao_andamento" => "API do {$proposta['banco']} não está habilitada para digitar REFINANCIAMENTO" ], "id = " . $idEsteira); Yuppie_Log::write("API do {$proposta['banco']} não está habilitada para digitar REFINANCIAMENTO", $this); return; } try { $baseId = $service->getDados()['cliente_id']; $retorno = $serviceDigitacao->consultar($proposta, $baseId); foreach ($retorno as $condicoes) { $condicoesCredito = current($condicoes->condicoes_credito); $bancoId = Model_Banco::bancoPorNome($proposta['banco']); $api = $serviceDigitacao->getBancoFromClass($proposta['banco']); $propostaModel = new Model_Proposta(['banco_id' => $bancoId]); $propostaId = $propostaModel->saveByInclusaoAutocontratacao($proposta, $condicoesCredito, $proposta['convenio'], $proposta['tipo_operacao']); Yuppie_Log::write("Dados enviados para inclusao: " . print_r($proposta, true) . "\n" . 'Condicoes de credito: ' . print_r((array)$condicoesCredito, true), $this); $retornoInclusao = $api->inclusaoConsignadoRefin($proposta, (array)$condicoesCredito, $propostaId); $efetivado = (new Model_Proposta())->efetivarPropostaInclusao($propostaId, current($retornoInclusao)); $linkformalizacao = $api->enviarLinkFormalizacaoRefin(current($retornoInclusao)->numero_proposta ?: null, $proposta['cpf'], $proposta['fone']); $api->tratarMensagemErro($baseId, $retornoInclusao); Yuppie_Log::write(print_r($retornoInclusao, true), $this); if (empty($efetivado)) { Yuppie_Log::write("Houve um erro ao efetivar a proposta. " . print_r(['post' => $proposta, 'retorno' => $retornoInclusao, 'condicoes_credito' => $condicoesCredito], true), $this); $service->adicionarPendencia($propostaId, "Erro na digitação ao efetivar a proposta"); continue; } $table->update(["status_digitacao" => 'DIGITADO'], "id = " . $idEsteira); $digitadosPorCorretor[$proposta['corretor_id']][] = [ 'cliente' => $proposta['nome'], 'cpf' => $proposta['cpf'], 'numero_contrato' => current($retornoInclusao)->numero_proposta, 'banco_id' => $bancoId, 'banco' => $proposta['banco'], 'link_formalizacao' => $linkformalizacao ]; $digitados++; } } catch (Core_Exception $erro) { (new Model_DbTable_DigitacaoAutomatica())->update([ "status_digitacao" => 'ERRO', "descricao_andamento" => $erro->getMessage() ], "id = " . $idEsteira); Yuppie_Log::write("Proposta não inserida! " . $erro->getMessage() . "\n" . $erro->getTraceAsString(), $this); } catch (Throwable $erro) { (new Model_DbTable_DigitacaoAutomatica())->update([ "status_digitacao" => 'ERRO', "descricao_andamento" => "Erro interno" ], "id = " . $idEsteira); Yuppie_Log::write("Proposta não inserida! " . $erro->getMessage() . "\n" . $erro->getTraceAsString(), $this); } } }
💾 保存文件
← 返回文件管理器