✏️ 正在编辑: SimulacaoAbertaModel.php
路径:
/srv/systems_dir/yuppiecred/application/Modules/SimulacaoAberta/Model/SimulacaoAbertaModel.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php namespace Modules\SimulacaoAberta\Model; use Model_Banco; use Model_DbTable_CallcenterFgts; use Model_DbTable_Contrato; use Model_DbTable_NotificacaoAgendamento; use Modules\SimulacaoAberta\Model\DbTable\SimulacaoAbertaBancosDbTable; use Modules\SimulacaoAberta\Model\DbTable\SimulacaoAbertaDbTable; use String_Refatorar; use Throwable; class SimulacaoAbertaModel { /** @var */ private $table; public function __construct() { $this->table = new SimulacaoAbertaDbTable(); } /** * @param array $dados * @return int */ public function salvarCliente(array $dados): int { $campanhaModel = new \Model_CallcenterCampanha(); $dados['campanha_id'] = $campanhaModel->getOrCreateCampanhaNome('CAMPANHA SIMULACAO ABERTA'); $dados['ativo'] = 1; $base = new \Model_CallcenterBase($dados); $cliente = $base->existeCpf($dados['cpf']); if ($cliente->status_atendimento) { $base->setCampanhaId($cliente->campanha_id); } $base->setId($cliente->id); return $base->salvar($base); } /** * @param array $dados * @return mixed * @throws \Core_Exception */ public function salvarTelefone($dados) { $baseFone = new \Model_DbTable_CallcenterTelefone(); return $baseFone->insert([ 'fone' => $dados['fone'], 'cliente_id' => $dados['cliente_id'], 'cpf_cliente' => \String_Refatorar::formatarCpf($dados['cpf']), 'origem' => 'SIMULAÇÃO ABERTA', ]); } /** * @param array $dados * @return bool|string */ public function existe(array $dados) { $simulacao = $this->table->fetchRow([ 'cliente_id = ?' => $dados['cliente_id'], 'tipo_simulacao = ?' => $dados['tipo_operacao'], 'convenio_id = ?' => $dados['convenio'], 'excluido = 0' ]); return $simulacao->id ?? false; } /** * @param array $dados * @return bool|mixed */ public function salvar(array $dados) { if (!empty($dados['utm_params'])) { $dados['utm_params'] = unserialize($dados['utm_params']); $dados = array_merge($dados, $dados['utm_params']); unset($dados['utm_params']); } $simulacaoId = $this->table->insert([ 'tipo' => $dados['tipo'], 'cliente_id' => $dados['cliente_id'], 'tipo_simulacao' => $dados['tipo_operacao'], 'banco_id' => $dados['banco_id'], 'tipo_valor' => $dados['tipo_valor'], 'valor' => String_Refatorar::parseStringToFloat($dados['valor_solicitado']), 'convenio_id' => $dados['convenio'], 'prazo' => $dados['prazo'] ?? 0, 'utm_source' => $dados['utm_source'] ?? null, 'utm_medium' => $dados['utm_medium'] ?? null, 'utm_campaign' => $dados['utm_campaign'] ?? null, 'utm_content' => $dados['utm_content'] ?? null, 'utm_term' => $dados['utm_term'] ?? null, 'http_referer' => $dados['http_referer'], 'corretor_id' => $dados['corretor_id'] ?? null ]); return $simulacaoId ?? false; } /** * @param int $simulacaoId * @return \Zend_Db_Table_Row_Abstract|null */ public function getSimulacaoPorId(int $simulacaoId) { return $this->table->fetchRow(['id = ?' => $simulacaoId]); } /** * @param int $simulacaoId * @return bool */ public function enviarEmailSimulacao(int $simulacaoId): bool { $dados = $this->table->getSimulacaoPorId($simulacaoId); if (empty($dados)) { return false; } if (current($dados)['tipo_simulacao'] != 'NOVO') { return true; } $configFile = CLIENT_PATH . '/configs/callcenter.php'; if (!file_exists($configFile)) { return true; } $cfg = include $configFile; if (empty($cfg['email_simulacao'])) { return true; } $mail = new \Core_Mail(); $view = new \Zend_View; $front = \Zend_Controller_Front::getInstance(); $server = (new \Zend_Controller_Request_Http())->getServer(); $view->setScriptPath(APPLICATION_PATH . '/views/scripts'); $view->cliente = current($dados)['cliente']; $view->link = \Core_Link::criaLink("{$server['REQUEST_SCHEME']}://{$_SERVER['HTTP_HOST']}{$front->getBaseUrl()}/simulacao-aberta/exibir", "chave={$simulacaoId}"); $view->style = file_get_contents(publicPath('/styles/layout_simulacao.min.css')); $mail->addDestinaraio(current($dados)['email']); $mail->newSend( utf8_encode('SIMULAÇÃO DE CRÉDITO'), $view->render('simulacao-aberta/email.phtml'), $cfg['email_simulacao'] ); return true; } /** * @param int $simulacaoId * @param array $dados */ public function enviarWhatsappProposta(int $simulacaoId, array $dados): void { $simulacao = $this->table->getSimulacaoPorId($simulacaoId); $textoMensagem = "Olá {$dados['nome']}! Tudo bem com você?\n" . "Essa é uma mensagem automática sobre a simulação que você solicitou em nosso site.\n" . "Ela está sendo preparada e já te enviamos.\n" . "Se precisar, você pode falar aqui que tiramos todas as suas dúvidas!"; if (!empty($simulacao) && current($simulacao)['tipo_simulacao'] == 'NOVO') { $front = \Zend_Controller_Front::getInstance(); $link = \Core_Link::criaLink( "https://{$_SERVER['HTTP_HOST']}{$front->getBaseUrl()}/simulacao-aberta/exibir", "chave={$simulacaoId}" ); $textoMensagem = "*Simulação de Crédito*\n\n" . "Olá {$dados['nome']},\n" . "sua simulação está pronta, acesse o link abaixo para visualizar.\n\n" . "{$link} \n"; } $this->notificarLead($textoMensagem, $dados['fone'], 1, false); } /** * @param int $simulacaoId * @return array */ public function getSimulacaoExibir(int $simulacaoId) { return $this->table->getSimulacaoPorId($simulacaoId); } /** * @param $fields * @return array * @throws \Zend_Date_Exception */ public function getSimulacoesRelatorio($fields) { return $this->table->getSimulacoesRelatorio($fields); } /** * @param $ids * @return int */ public function excluirSimulacoes($ids) { $result = 0; if (empty($ids) || !is_array($ids)) { return $result; } foreach ($ids as $id) { $result += $this->table->delete(['id = ?' => $id]); } return $result; } /** * @param $ids * @return int */ public function excluirSimulacoesBanco($ids) { $result = 0; if (empty($ids) || !is_array($ids)) { return $result; } $simulacaoBanco = new SimulacaoAbertaBancosDbTable(); foreach ($ids as $id) { $result += $simulacaoBanco->delete(['id = ?' => $id]); } return $result; } public function checarSimulacoesDelete() { $simulacoes = $this->table->checkSimulacaoDelete(); foreach ($simulacoes as $simulacao) { if ($simulacao['qtd_excluida'] >= $simulacao['qtd_simulacoes']) { $this->table->delete(['id = ?' => $simulacao['id']]); } } } public function marcarAtendimentoEmAndamento(int $simulacaoId) { return $this->table->atualizarStatusAtendimento($simulacaoId, 'PROCESSANDO'); } public function marcarAtendimentoDigitado(int $simulacaoId) { return $this->table->atualizarStatusAtendimento($simulacaoId, 'DIGITADO'); } public function liberarStatusAtendimento(int $simulacaoId) { return $this->table->atualizarStatusAtendimento($simulacaoId, null); } protected function notificarWhatsapp(string $mensagem, $celular) { if (!$whatsapp = \Core_Whatsapp_Factory::load()) { return; } $whatsapp->sendMessage(String_Refatorar::formatarTelefone($celular), $mensagem); } protected function notificarSms(string $mensagem, $celular) { if (empty(service('config')->get()->sms2you)) { return; } try { $sms2you = new \Core_Service_Sms(); $sms2you->sendMessage($celular, $mensagem); } catch (\Throwable $e) { \Yuppie_Log::write("Erro de envio de SMS na Simulação aberta: " . $e->getMessage()); } } /** * Envia notificação para o lead via Whatsapp ou SMS */ public function notificarLead(string $mensagem, $celular, int $tipoNotificacao = 1, $agendar = true) { if (service('config_callcenter')->get()->desativar_notificacao_whatsapp == 1) { return; } if ($tipoNotificacao == 1) { $this->notificarWhatsapp($mensagem, $celular); if ($agendar) { $this->agendarNotificacoes($celular, $mensagem, 'WHATSAPP'); } } else if($tipoNotificacao == 2) { $this->notificarSms($mensagem, $celular); if ($agendar) { $this->agendarNotificacoes($celular, $mensagem); } } } public function agendarNotificacoes($celular, $mensagem, string $tipo = 'SMS') { $agendamento1 = \Zend_Date::now()->addDay(1)->get('yyyy-MM-dd'); $agendamento2 = \Zend_Date::now()->addDay(2)->get('yyyy-MM-dd'); (new Model_DbTable_NotificacaoAgendamento())->insert([ 'data_agendada' => $agendamento1, 'celular' => \String_Refatorar::formatarTelefone($celular), 'mensagem' => $mensagem, 'tipo' => $tipo ]); (new Model_DbTable_NotificacaoAgendamento())->insert([ 'data_agendada' => $agendamento2, 'celular' => \String_Refatorar::formatarTelefone($celular), 'mensagem' => $mensagem, 'tipo' => $tipo ]); } public function excluirAgendamentoNotificacao($celular) { try { return (new Model_DbTable_NotificacaoAgendamento())->delete(['celular = ?' => $celular, 'data_envio is null']); } catch (\Zend_Db_Exception $e) { \Yuppie_Log::write("Falha na exclusão dos agendamentos de notificações. Fone {$celular} exception => " . $e->getMessage()); } } public function atualizarValorSaldo(int $simulacaoId, int $clienteId, float $valor, int $bancoId, $tipo = "fgts") { if ($valor <= 0) { return; } //atualiza a simulação $result = $this->table->update(['valor' => $valor], ['id = ?' => $simulacaoId]); if ($tipo != "fgts") { return $result; } //atualiza a tabela FGTS $hoje = \Zend_Date::now()->get('yyyy-MM-dd'); $where = [ 'base_id = ?' => $clienteId, "date_format(data_cadastro, '%Y-%m-%d') = '{$hoje}'" ]; $fgts = new Model_DbTable_CallcenterFgts(); $dadosFgts = $fgts->fetchRow($where, "id DESC"); $banco = (new Model_Banco())->exibir($bancoId)->nome; if (empty($dadosFgts)) { return $fgts->insert([ 'valor' => $valor, 'base_id' => $clienteId, 'origem_consulta' => $banco ]); } return $fgts->update([ 'valor' => $valor, 'descricao_erro' => NULL, 'codigo_erro' => NULl, 'origem_consulta' => $banco ], $where); } public function salvarUrlFormalizacao(string $banco, string $numeroContrato, string $urlFormalizacao) { if (!$banco || !$numeroContrato || !$urlFormalizacao) { return; } try { $bancoId = Model_Banco::bancoPorNome($banco); $table = new Model_DbTable_Contrato(); $table->update([ 'url_formalizacao' => $urlFormalizacao ], "banco_id = {$bancoId} AND numero_contrato = {$numeroContrato}"); } catch (Throwable $exception) { \Yuppie_Log::write("Falha na gravação da url de formalização. Exception => " . $exception->getMessage()); } } }
💾 保存文件
← 返回文件管理器