Sistema completo de gestão comercial com interface desktop (Java/Swing) e aplicativo mobile (React Native/Expo), comunicando-se via API REST.
| Módulo | Desktop | Mobile |
|---|---|---|
| Login | ✅ | ✅ |
| Clientes (CRUD) | ✅ | ✅ |
| Produtos (CRUD + imagem) | ✅ | ✅ |
| Fornecedores (CRUD) | ✅ | ✅ |
| Funcionários (CRUD) | ✅ | ✅ |
| PDV — Ponto de Venda | ✅ | ✅ |
| Histórico de Vendas | ✅ | ✅ |
| Cancelamento de Venda | ✅ | ✅ |
| Movimentação de Estoque | ✅ | ✅ |
| Relatório de Estoque | ✅ | ✅ |
| Relatório Financeiro | ✅ | ✅ |
| Reset de Senha (OTP e-mail) | ✅ | ✅ |
Backend / Desktop
- Java 17+ (Swing para UI desktop,
com.sun.net.httpserverpara API REST) - SQLite via
sqlite-jdbc(banco de dados local, sem servidor) - Servidor HTTP na porta
8080
Mobile
- React Native 0.74 + Expo SDK 51
- React Navigation 6 (Stack Navigator)
- Expo Image Picker / Image Manipulator
- JDK 17 ou superior — Download
- Verifique:
java -versionejavac -version
- Verifique:
- O arquivo
lib/sqlite-jdbc.jarjá está incluído no repositório
- Node.js 18 ou superior — Download
- Verifique:
node -venpm -v
- Verifique:
- Expo Go instalado no celular:
- Celular e computador na mesma rede Wi-Fi
git clone https://github.com/brunnodev50/sistema-gestao.git
cd sistema-gestaoNo Windows, execute o arquivo compilar_e_executar.bat com duplo clique ou via terminal:
compilar_e_executar.batIsso vai:
- Compilar todos os arquivos
.java - Iniciar o sistema desktop (janela Swing)
- Subir a API REST na porta
8080automaticamente
Login padrão criado na primeira execução:
Usuário: admin
Senha: admin
⚠️ Troque a senha do admin após o primeiro acesso.
Com o sistema desktop em execução (API na porta 8080):
cd mobile
npm install
npx expo startAbra o Expo Go no celular e escaneie o QR Code exibido no terminal.
O endereço da API está configurado em
mobile/src/config/api.js.
Para emulador Android Studio use10.0.2.2:8080.
Para celular físico, substitua pelo IP da sua máquina na rede local (ex:192.168.1.100:8080).
sistema-gestao/
├── compilar_e_executar.bat # Script de compilação e execução (Windows)
├── lib/
│ └── sqlite-jdbc.jar # Driver SQLite
├── src/
│ └── main/java/com/sistema/
│ ├── Main.java
│ ├── SessaoAtual.java
│ ├── api/ # Handlers da API REST
│ │ ├── ApiServer.java
│ │ ├── ApiUtils.java
│ │ ├── AuthHandler.java
│ │ ├── ClienteHandler.java
│ │ ├── ProdutoHandler.java
│ │ ├── FornecedorHandler.java
│ │ ├── FuncionarioHandler.java
│ │ ├── VendaHandler.java
│ │ ├── MovimentacaoHandler.java
│ │ ├── RelatorioHandler.java
│ │ └── ResetSenhaHandler.java
│ ├── db/
│ │ └── Banco.java # Conexão e criação das tabelas SQLite
│ ├── model/ # Entidades (Cliente, Produto, Venda, etc.)
│ ├── service/ # Regras de negócio
│ └── ui/ # Interface Swing (desktop)
└── mobile/
├── App.js # Navegação principal
├── app.json
├── package.json
└── src/
├── config/
│ ├── api.js # Configuração da URL da API
│ └── colors.js # Paleta de cores
├── screens/ # Telas do app
│ ├── LoginScreen.js
│ ├── HomeScreen.js
│ ├── ResetSenhaScreen.js
│ ├── ClientesScreen.js
│ ├── NovoClienteScreen.js
│ ├── ProdutosScreen.js
│ ├── NovoProdutoScreen.js
│ ├── FornecedoresScreen.js
│ ├── NovoFornecedorScreen.js
│ ├── FuncionariosScreen.js
│ ├── NovoFuncionarioScreen.js
│ ├── PdvScreen.js
│ ├── VendasScreen.js
│ ├── VendaDetalhesScreen.js
│ ├── MovimentacaoScreen.js
│ ├── RelatorioEstoqueScreen.js
│ └── RelatorioFinanceiroScreen.js
└── utils/
└── mascaras.js # Máscaras: CPF, CNPJ, celular, data, CEP
Todos os endpoints usam Content-Type: application/json e rodam em http://localhost:8080.
| Método | Rota | Descrição |
|---|---|---|
| POST | /api/login |
Autenticação |
| GET | /api/clientes |
Listar clientes |
| POST | /api/clientes |
Criar cliente |
| PUT | /api/clientes/{id} |
Editar cliente |
| GET | /api/produtos |
Listar produtos |
| POST | /api/produtos |
Criar produto |
| PUT | /api/produtos/{id} |
Editar produto |
| GET | /api/fornecedores |
Listar fornecedores |
| POST | /api/fornecedores |
Criar fornecedor |
| PUT | /api/fornecedores/{id} |
Editar fornecedor |
| GET | /api/funcionarios |
Listar funcionários |
| POST | /api/funcionarios |
Criar funcionário |
| PUT | /api/funcionarios/{id} |
Editar funcionário |
| GET | /api/vendas |
Listar vendas |
| GET | /api/vendas/{id} |
Detalhes da venda (com itens) |
| POST | /api/vendas |
Finalizar venda |
| POST | /api/vendas/{id}/cancelar |
Cancelar venda |
| GET | /api/movimentacoes |
Listar movimentações |
| POST | /api/movimentacoes |
Registrar movimentação |
| GET | /api/relatorios/estoque |
Relatório de estoque |
| GET | /api/relatorios/financeiro |
Relatório financeiro |
| POST | /api/reset/solicitar |
Solicitar código OTP |
| POST | /api/reset/verificar |
Verificar código OTP |
| POST | /api/reset/confirmar |
Confirmar nova senha |
O banco SQLite (sistema.db) é criado automaticamente na pasta raiz na primeira execução. Não é necessário instalar nenhum servidor de banco de dados.
Tabelas criadas automaticamente:
clientesfuncionariosfornecedoresprodutosvendasitens_vendamovimentacoes_estoque
O reset de senha por e-mail requer configuração SMTP. No sistema desktop, acesse Configurações → E-mail e preencha:
| Campo | Exemplo (Gmail) |
|---|---|
| Host | smtp.gmail.com |
| Porta | 587 |
| SSL | Não (usa STARTTLS) |
| Usuário | seu@gmail.com |
| Senha | Senha de app do Google |
Para Gmail, gere uma Senha de App em: Conta Google → Segurança → Verificação em duas etapas → Senhas de app.
As configurações são salvas em email.properties (arquivo ignorado pelo Git por segurança).
Instaladas automaticamente com npm install:
"@react-navigation/native": "^6.1.9",
"@react-navigation/native-stack": "^6.9.17",
"@react-navigation/bottom-tabs": "^6.5.11",
"expo": "~51.0.0",
"expo-image-picker": "~15.0.7",
"expo-image-manipulator": "~12.0.5",
"expo-status-bar": "~1.12.1",
"react": "18.2.0",
"react-native": "0.74.5",
"react-native-safe-area-context": "4.10.5",
"react-native-screens": "3.31.1",
"@react-native-picker/picker": "2.7.5"- O banco de dados e as credenciais de e-mail (
sistema.dbeemail.properties) estão no.gitignoree nunca são versionados. - O sistema foi desenvolvido para uso em rede local — o celular e o computador precisam estar na mesma rede Wi-Fi.
- Para produção, recomenda-se migrar a API para um servidor com HTTPS.