Arquitetura e Tecnologias
Stack técnico, hierarquia de classes, dependências e conexões com bancos de dados.
Diagrama de componentes
graph LR FS(["FullStore\n(HTTP POST)"]) EP["isnapp\ncontrole.php\nPHP 7.3"] MY[("MySQL\nBanco OSK")] SS[("SQL Server\nLX_ZERO_300\nLinx/BI")] FS -->|"POST getVendas\nCNPJ + período"| EP EP -->|"PDV / Trocas / Omni\nSELECT com CTEs"| MY EP -->|"Resolve filiais\npor CNPJ"| MY EP -->|"W_BI_FAT_VENDEDOR...\nPrepared Statement"| SS EP -->|"JSON consolidado\nsuccess + data"| FS
Figura 1 — Componentes e fluxo de dados da integração.
Stack
| Camada | Tecnologia | Detalhe |
|---|---|---|
| Linguagem | PHP 7.3 | Namespaces, PDO, Traits |
| Framework | CodeIgniter (MY_Controller) |
Base do backend |
| Banco operacional | MySQL / PDO | PDV, Omni, Trocas |
| Banco BI/e-commerce | SQL Server / PDO sqlsrv: |
Linx LX_ZERO_300 |
| Resposta | JSON via setSubmit() |
Envelope padrão success / message / data |
Hierarquia de classes
classDiagram direction TB class MY_Controller { } class biblioteca { +getToken() +injection() } class util { +conexao PDO +setSubmit() } class utilOsk { +_setConexao() } class WebService { <> +run() +setSubmit() } class fullStoreWebService { +getVendasConsolidadas() +consultarVendasPdv() +getTrocas() +getVendaOmni() +buscarDadosEcommercePorLoja() } class db_sqlserver { +conexao PDO +query() } MY_Controller <|-- biblioteca biblioteca <|-- util util <|-- utilOsk utilOsk <|-- fullStoreWebService WebService <.. fullStoreWebService : usa trait db_sqlserver --o fullStoreWebService : instanciado
Figura 2 — Hierarquia de herança e dependências do endpoint.
MY_Controller (CodeIgniter) └── biblioteca → carregamento dinâmico por UUID └── util → define $banco, $conexao (Doctrine DBAL) └── utilOsk → sobrescreve $this->conexao com PDO direto (MySQL OSK) └── WOSK\Commons\WebService (trait) └── fullStoreWebService ← lógica do endpoint │ └── instancia → db_sqlserver (PDO sqlsrv: LX_ZERO_300)
Figura 1 — Cadeia de herança do endpoint FullStore.
Arquivos required
Em controle.php, carregamos três dependências via require_once(APPPATH . '...'):
| UUID | Arquivo | Fornece |
|---|---|---|
4cb18a6c-... |
wosk_webservice.php |
Trait WOSK\Commons\WebService — formata JSON (setSubmit), valida campos e salva logs no MySQL |
592ccfa0-... |
utilOsk.php |
Classe pai — conecta ao MySQL OSK e expõe $this->conexao (PDO) |
0670acec-... |
db_sqlserver.php |
Gerencia conexão PDO com SQL Server (driver sqlsrv:) |
Conexão MySQL
Como configuramos
A classe utilOsk chama getConfiguracao('db_osk_prod') — credenciais armazenadas em Base64 na tabela de configuração do sistema. Em seguida, _setConexao() cria a conexão PDO:
// connection string:
"mysql:host={host};port={porta};dbname={banco}"
// PDO::ATTR_PERSISTENT = true (conexão persistente)
// PDO::ATTR_TIMEOUT = 120 (timeout em segundos)
// charset = UTF-8
Conexão SQL Server
Instanciamos em buscarDadosEcommercePorLoja()
$sqlserver = new \db_sqlserver(false, 'LX_ZERO_300', true);
// false = produção (não homologação)
// 'LX_ZERO_300' = banco Linx
// true = conecta imediatamente
| Ambiente | Host | Porta | Banco |
|---|---|---|---|
| Produção | 127.0.0.1 |
1435 |
LX_ZERO_300 |
| Homologação | 35.198.60.88 |
1433 |
LINX_HMLG |
Credenciais hardcoded As credenciais do SQL Server estão diretamente em
db_sqlserver.php. Garanta que esse arquivo não seja exposto em repositórios públicos ou logs de sistema.Tabelas MySQL utilizadas
| Tabela | Alias | O que fornece |
|---|---|---|
movimentacao |
m | Cabeçalho da transação (tipo, data, situação, módulo) |
movimentacao_detalhe |
md | Itens da venda (produto, qtde, preço) |
movimentacao_nfe |
nf / nfe | Número, série e situação da NF-e |
movimentacao_movimentacao |
mm | Vínculos entre movimentações (troca↔venda, omni↔orçamento) |
pessoa |
v | Nome e código do vendedor |
entidade |
e | Código da filial / loja |
juridica |
j | CNPJ da empresa |
Objetos SQL Server utilizados
| Objeto | Tipo | O que fornece |
|---|---|---|
W_BI_FAT_VENDEDOR_VDK_OMNI_V0 |
View BI | Pedidos e-commerce por vendedor: NF, valor, CPF, filial, pedido site/WMS |
FILIAIS |
Tabela | Cadastro de filiais — usamos para excluir franquias (TIPO_FILIAL <> 'FRANQUIA') |