Sistema de Gerenciamento de Logística Desenvolvido em Java com Framework SSM

Introdução ao Sistema

Este sistema de gerenciamento de logística foi desenvolvido para atender às necessidades atuais do gerenciamento logístico, partindo das demandas práticas do dia a dia. O sistema analisa as limitações dos sistemas tradicionais e aproveita as vantagens da computação, utilizando o framework SSM (Spring, SpringMVC, MyBatis), uma das soluções mais populares em JSP, juntamente com o editor MyEclipse e banco de dados MySQL.

O sistema implementa diversas funcionalidades essenciais para o gerenciamento logístico, incluindo módulos de gerenciamento de usuários, informações de motoristas, gestão de veículos, controle de estoque de mercadorias, gestão de entrada de produtos, autenticação de acesso e outros componentes integrados. A implementação permite a informatização e networking das operações logísticas, otimizando o uso dos recursos de dados e reduzindo significativamente os custos operacionais.

Especificações Técnicas

  • Linguagem de Programação: Java
  • Framework: SSM (Spring, SpringMVC, MyBatis)
  • Versão JDK: JDK1.8
  • Servidor: Tomcat7
  • Banco de Dados: MySQL
  • Ferramenta de Banco de Dados: Navicat11
  • Ambiente de Desenvolvimento: Eclipse/MyEclipse/IntelliJ IDEA
  • Gestão de Dependências: Maven

Módulos Funcionais

O sistema foi projetado para abordar os problemas existentes e atender às necessidades específicas através de uma abordagem digitalizada e informatizada. Os principais módulos funcionais incluem:

Gerenciamento de Usuários

  • Autenticação de Administradores: Permite o acesso ao sistema para gerenciar todos os outros módulos.
  • Autenticação de Usuários: Facilita o login para consulta de informações pessoais e operação das funcionalidades disponíveis.
  • Cadastro de Usuários: Permite que novos visitantes se registrem no sistema, com feedback sobre o sucesso do registro.
  • Adição de Administradores: Possibilita a inclusão de novos gestores, com distinção entre administradores comuns e superadministradores.

Gestão de Veículos

  • Listagem de Veículos: Apresenta os veículos cadastrados em formato de tabela para os administradores.
  • Cadastro de Veículos: Implementa a funcionalidade de adicionar novos veículos ao sistema com todas as informações necessárias.
  • Atualização de Veículos: Permite modificar as informações dos veículos já cadastrados no sistema.

Controle de Estoque

  • Visualização de Estoque: Exibe a lista completa de mercadorias em estoque.

Gestão de Entrada de Mercadorias

  • Registro de Entradas: Mostra todas as entradas de mercadorias no sistema, com opção de pesquisa por palavras-chave.
  • Exclusão de Registros: Permite remover entradas incorretas ou desatualizadas do sistema.

Gestão de Saída de Mercadorias

  • Registro de Saídas: Exibe todas as saídas de mercadorias, com funcionalidade de busca por palavras-chave.
  • Exclusão de Registros: Facilita a remoção de registros de saída incorretos ou obsoletos.

Perfil do Usuário

  • Gestão de Perfil: Usuários podem visualizar e gerenciar suas informações pessoais.
  • Notificações do Sistema: Permite aos usuários visualizarem mensagens e alertas do sistema.
  • Atualiazção de Dados: Funcionalidade para modificar informações da conta e senha.
  • Pesquisa de Informações: Busca interna no sistema através de palavras-chave.
  • Alteração de Senha: Possibilidade de atualizar a senha de acesso.

Administração do Sistema

  • Backup de Dados: Funcionalidade para realização de cópias de segurança do sistema.

Saída do Sistema

  • Logout de Administradores: Finalização segura da sessão administrativa.
  • Logout de Usuários: Encerramento seguro da sessão do usuário.

Implementação Principal

A seguir, apresentamos um trecho do código-fonte que demonstra a implementação do controlador principal do sistema:

package com.logistica.controller;

import org.springframework.util.StringUtils;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import com.logistica.dto.RespostaDTO;
import com.logistica.enums.CodigoResposta;
import com.logistica.model.Usuario;
import com.logistica.exception.SistemaException;
import com.logistica.service.UsuarioService;
import com.logistica.util.MapeadorUtil;
import com.logistica.security.TokenUtil;
import com.logistica.vo.UsuarioVO;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping(value = "/api/usuarios")
public class UsuarioController {

    @Resource
    private UsuarioService usuarioService;

    @PostMapping
    public RespostaDTO<Usuario> adicionar(@RequestBody UsuarioVO usuarioVO) {
        usuarioService.adicionar(usuarioVO);
        return RespostaDTO.sucesso(usuarioVO);
    }

    @PostMapping("/removerVarios")
    public RespostaDTO<Usuario> removerVarios(@RequestBody UsuarioVO usuarioVO) {
        usuarioService.removerVarios(usuarioVO.getIds());
        return RespostaDTO.sucesso();
    }

    @DeleteMapping("/{id}")
    public RespostaDTO remover(@PathVariable Long id) {
        usuarioService.remover(id);
        return RespostaDTO.sucesso();
    }

    @PutMapping
    public RespostaDTO atualizar(@RequestBody UsuarioVO usuarioVO) {
        usuarioService.atualizar(usuarioVO);
        return RespostaDTO.sucesso();
    }

    @GetMapping("/{id}")
    public RespostaDTO<Usuario> detalhar(@PathVariable Integer id) {
        Usuario usuario = usuarioService.buscarPorId(id);
        return RespostaDTO.sucesso(usuario);
    }

    @GetMapping
    public RespostaDTO<List<Usuario>> listarTodos() {
        return RespostaDTO.sucesso(usuarioService.listarTodos());
    }

    @PostMapping("/paginar")
    public RespostaDTO<UsuarioVO> paginar(@RequestBody UsuarioVO usuarioVO) {
        return RespostaDTO.sucesso(usuarioService.buscarPagina(usuarioVO));
    }
    
    @PostMapping("/autenticar")
    public RespostaDTO autenticar(@RequestBody Usuario usuario, HttpServletRequest requisicao) {
        if (!StringUtils.hasText(usuario.getLogin()) || !StringUtils.hasText(usuario.getSenha())) {
            throw new SistemaException(CodigoResposta.PARAMETRO_AUSENTE);
        }
        
        Usuario usuarioAutenticado = usuarioService.autenticar(usuario);
        
        if(usuarioAutenticado != null) {
            Map<String, Object> dadosResposta = new java.util.HashMap<>();
            dadosResposta.put("usuario", usuarioAutenticado);
            Map<String, Object> dadosToken = MapeadorUtil.criarMapa(MapeadorUtil.CHAVE_USUARIO_ID, usuario.getId());
            String token = TokenUtil.gerarToken(dadosToken);
            dadosResposta.put("token", token);
            return RespostaDTO.sucesso(dadosResposta);
        } else {
            return RespostaDTO.erro();
        }
    }
    
    @PutMapping("/atualizarSenha")
    public RespostaDTO atualizarSenha(@RequestBody Usuario dados, HttpServletRequest requisicao) {
        Usuario usuario = usuarioService.buscarPorId(dados.getId());
        BCryptPasswordEncoder codificador = new BCryptPasswordEncoder();
        
        if (!codificador.matches(dados.getSenhaAtual(), usuario.getSenha())) {
            return RespostaDTO.erro(CodigoResposta.SENHA_INVALIDA.codigo, CodigoResposta.SENHA_INVALIDA.mensagem);
        }
        
        dados.setSenha(codificador.encode(dados.getNovaSenha()));
        Usuario usuarioAtualizado = new Usuario();
        BeanUtils.copyProperties(dados, usuarioAtualizado);
        usuarioService.atualizar(usuarioAtualizado);
        return RespostaDTO.sucesso();
    }
}

Estrutura do Banco de Dados

O sistema utiliza MySQL como banco de dados principal. A seguir, apresentamos um exemplo da estrutura das tabelas:

SET FOREIGN_KEY_CHECKS=0;

-- Estrutura da tabela `usuarios`
DROP TABLE IF EXISTS `usuarios`;
CREATE TABLE `usuarios` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `login` varchar(50) DEFAULT NULL,
  `senha` varchar(100) DEFAULT NULL,
  `perfil` varchar(50) DEFAULT 'OPERADOR',
  `data_criacao` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;

-- Estrutura da tabela `armazens`
DROP TABLE IF EXISTS `armazens`;
CREATE TABLE `armazens` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(50) DEFAULT NULL,
  `localizacao` varchar(100) DEFAULT NULL,
  `data_criacao` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4;

-- Estrutura da tabela `veiculos`
DROP TABLE IF EXISTS `veiculos`;
CREATE TABLE `veiculos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `codigo` varchar(50) DEFAULT NULL,
  `descricao` varchar(50) DEFAULT NULL,
  `placa` varchar(20) DEFAULT NULL,
  `imagem` varchar(100) DEFAULT NULL,
  `status` varchar(20) DEFAULT NULL,
  `data_criacao` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4;

-- Estrutura da tabela `saidas`
DROP TABLE IF EXISTS `saidas`;
CREATE TABLE `saidas` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `codigo_produto` varchar(50) DEFAULT NULL,
  `nome_produto` varchar(50) DEFAULT NULL,
  `quantidade_estoque` int(11) DEFAULT NULL,
  `data_saida` date DEFAULT NULL,
  `quantidade_saida` int(11) DEFAULT NULL,
  `data_criacao` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4;

Sumário da Documentação

  1. Introdução
    1. Contexto de Desenvolvimento
    2. Relevância do Projeto
    3. Escopo do Estudo
  2. Tecnologias e Ferramentas Utilizadas
    1. Framework SSM
      1. Framework Spring
      2. SpringMVC
      3. MyBatis
    2. Banco de Dados MySQL
    3. Tecnologia JSP
  3. Análise do Sistema
    1. Análise de Viabilidade
      1. Viabilidade Econômica
      2. Viabilidade Técnica
      3. Viabilidade Operacional
    2. Análise de Requisitos
    3. Análise do Fluxo de Entrada de Mercadorias
    4. Análise do Fluxo de Dados
  4. Projeto do Sistema
    1. Arquitetura do Sistema
    2. Design dos Módulos Funcionais
    3. Projeto do Banco de Dados
      1. Visão Geral do Projeto de Dados
      2. Modelagem Conceitual
      3. Estrutura das Tabelas
  5. Implementação do Sistema
    1. Objetivos Principais
    2. Implementação do Módulo de Autenticação
      1. Tela Principal
      2. Autenticação do Administrador
    3. Implementação do Módulo Administrativo
      1. Gestão de Usuários
      2. Gestão de Veículos
      3. Controle de Estoque
      4. Gestão de Entradas
      5. Gestão de Saídas
  6. Testes do Sistema
    1. Objetivos dos Testes
    2. Visão Geral dos Testes
    3. Testes Unitários
      1. Testes de Inclusão
      2. Testes de Autenticação
    4. Testes de Integração
  7. Conclusões
  8. Agradecimentos
  9. Referências Bibliográficas

Tags: java SSM Framework Spring SpringMVC MyBatis

Publicado em 8-6 04:52