Sistema de Gestión de Medicamentos con SpringBoot y MySQL

Entorno de Ejecución

  • Java ≥ 8, MySQL ≥ 5.7

Herramientas de Desarrollo

  • Eclipse/IDEA/MyEclipse/STS (todas compatibles)

Aplicaciones

  • Diseño de cursos, trabajos académicos, proyectos de graduación, práctica de proyectos, demostraciones de aprendizaje

Descripción de Funcionalidades

Este sistema de gestión de medicamentos está basado en JavaWeb y utiliza SpringBoot. El sistema cuenta con dos roles principales: administrador de medicamentos y personal de dispensación.

Funcionalidades del Administrador de Medicamentos:

  • Inicio y cierre de sesión
  • Registro de infomración de medicamentos
  • Registro de información de fabricantes
  • Registro de información de compradores
  • Visualización de información de medicamentos, fabricantes y compradores
  • Búsqueda, modificación y eliminación de medicamentos
  • Búsqueda, modificación y eliminación de fabricantes
  • Búsqueda, modificación y eliminación de compradores
  • Visualización de registros de entrada y salida
  • Sistema de ayuda

Funcionalidades del Personal de Dispensación:

  • Inicio y cierre de sesión
  • Visualización de información de medicamentos, fabricantes y compradores
  • Búsqueda y dispensación de medicamentos
  • Visualización de registros de salida
  • Sistema de ayuda

Requisitos del Entorno

  1. Entorno de ejecución: Se recomienda JDK 1.8 (otras versiones son teóricamente compatibles).
  2. IDE: IDEA, Eclipse, MyEclipse (se recomienda IDEA).
  3. Entorno hardware: Windows 7/8/10 con 1GB de RAM o más; o Mac OS.
  4. Base de datos: MySQL versión 5.7.

Tecnologías Utilizadas

  • Backend: SpringBoot
  • Front end: HTML + Layui + jQuery + Bootstrap + ECharts

Descripción del Código

A continuación se presentan ejemplos de código que ilustran la implementación de las funcionalidades del sistema:

Controlador de Consultas

@RestController
@CrossOrigin
@RequestMapping("/query")
public class QueryController {
    
    @Autowired
    private QueryService queryService;
    
    @RequestMapping("/buscarMedicamento")
    public AjaxInfo buscarMedicamento(MedicineTable tablaMedicamento, HttpSession sesion) {
        AjaxInfo respuestaAjax = new AjaxInfo();
        
        if (sesion.getAttribute("nombreUsuario") != null) {
            int pagina = (tablaMedicamento.getPagina() - 1) * tablaMedicamento.getLimite();
            tablaMedicamento.setPagina(pagina);
            List<medicamento> medicamentos = queryService.buscarMedicamentoPorNombre(tablaMedicamento);
            respuestaAjax.setMensaje("Búsqueda exitosa");
            respuestaAjax.setConteo(queryService.contarMedicamentosPorNombre(tablaMedicamento));
            respuestaAjax.setCodigo(0);
            respuestaAjax.setDatos(medicamentos);
        } else {
            respuestaAjax.setCodigo(-2);
            respuestaAjax.setMensaje("¡Permiso insuficiente! Por favor inicie sesión primero.");
        }
        return respuestaAjax;
    }
    
    @RequestMapping("/buscarFabricante")
    public AjaxInfo buscarFabricante(MedicineTable tablaMedicamento, HttpSession sesion) {
        AjaxInfo respuestaAjax = new AjaxInfo();
        
        if (sesion.getAttribute("nombreUsuario") != null) {
            int pagina = (tablaMedicamento.getPagina() - 1) * tablaMedicamento.getLimite();
            tablaMedicamento.setPagina(pagina);
            List<fabricante> fabricantes = queryService.buscarFabricantePorNombre(tablaMedicamento);
            respuestaAjax.setMensaje("Búsqueda exitosa");
            respuestaAjax.setConteo(queryService.contarFabricantesPorNombre(tablaMedicamento));
            respuestaAjax.setCodigo(0);
            respuestaAjax.setDatos(fabricantes);
        } else {
            respuestaAjax.setCodigo(-2);
            respuestaAjax.setMensaje("¡Permiso insuficiente! Por favor inicie sesión primero.");
        }
        return respuestaAjax;
    }
}
</fabricante></medicamento>

Controlador de Administración

@RestController
@CrossOrigin
@RequestMapping("/admin")
public class AdminController {
    
    @Autowired
    private AdminService adminService;
    
    @RequestMapping("/entradaInventario")
    public AjaxInfo registrarEntrada(@RequestBody EntradaInventario entrada, HttpSession sesion) {
        AjaxInfo respuestaAjax = new AjaxInfo();
        EntradaInventario nuevaEntrada = new EntradaInventario();
        
        if (sesion.getAttribute("nombreUsuario") != null) {
            Medicamento medicamento = adminService.buscarMedicamentoPorId(entrada.getIdMedicamento());
            SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            Date fecha = new Date();
            
            nuevaEntrada.setIdMedicamento(entrada.getIdMedicamento());
            nuevaEntrada.setIdComprador(entrada.getIdComprador());
            nuevaEntrada.setFechaEntrada(formato.format(fecha));
            nuevaEntrada.setCantidadEntrada(entrada.getCantidadEntrada());
            
            if (medicamento == null) {
                respuestaAjax.setCodigo(-1);
                respuestaAjax.setMensaje("¡Entrada fallida! El medicamento no existe.");
            } else {
                adminService.registrarEntrada(nuevaEntrada);
                adminService.actualizarInventario(entrada.getIdMedicamento(), 
                    entrada.getCantidadEntrada() + medicamento.getStockActual());
                respuestaAjax.setMensaje("¡Entrada registrada exitosamente!");
                respuestaAjax.setCodigo(0);
            }
            return respuestaAjax;
        } else {
            respuestaAjax.setCodigo(-2);
            respuestaAjax.setMensaje("¡Permiso insuficiente! Por favor inicie sesión primero.");
        }
        return respuestaAjax;
    }
}

Controlador de Dispensación

@RestController
@CrossOrigin
@RequestMapping("/dispensar")
public class DispensacionController {
    
    @Autowired
    private AdminService adminService;
    
    @Autowired
    private DispensacionService dispensacionService;
    
    @RequestMapping("/salidaMedicamento")
    public AjaxInfo dispensarMedicamento(@RequestBody SalidaMedicamento salida, HttpSession sesion) {
        AjaxInfo respuestaAjax = new AjaxInfo();
        SalidaMedicamento registroSalida = new SalidaMedicamento();
        
        if (sesion.getAttribute("nombreUsuario") != null) {
            Medicamento medicamento = adminService.buscarMedicamentoPorId(salida.getIdMedicamento());
            SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            Date fecha = new Date();
            
            if (medicamento == null) {
                respuestaAjax.setCodigo(-1);
                respuestaAjax.setMensaje("¡Salida fallida! El medicamento no existe.");
            } else {
                if (medicamento.getStockActual() >= salida.getCantidadSalida()) {
                    registroSalida.setIdMedicamento(salida.getIdMedicamento());
                    registroSalida.setIdPaciente(salida.getIdPaciente());
                    registroSalida.setCantidadSalida(salida.getCantidadSalida());
                    registroSalida.setFechaSalida(formato.format(fecha));
                    
                    adminService.actualizarInventario(medicamento.getIdMedicamento(), 
                        medicamento.getStockActual() - salida.getCantidadSalida());
                    
                    respuestaAjax.setMensaje("¡Dispensación exitosa!");
                    respuestaAjax.setCodigo(0);
                    dispensacionService.registrarSalida(registroSalida);
                } else {
                    respuestaAjax.setCodigo(-1);
                    respuestaAjax.setMensaje("¡Cantidad solicitada excede el stock actual! " +
                        "Stock actual: " + medicamento.getStockActual());
                }
            }
            return respuestaAjax;
        } else {
            respuestaAjax.setMensaje("¡Permiso insuficiente! Por favor inicie sesión primero.");
        }
        return respuestaAjax;
    }
}

Filtro de CORS

@WebFilter
public class FiltroCORS implements Filter {
    
    @Override
    public void doFilter(SolicitudPetición peticion, SolicitudRespuesta respuesta, CadenaFiltros cadena)
            throws IOException, ServletException {
        HttpServletResponse respuestaHttp = (HttpServletResponse) respuesta;
        
        respuestaHttp.setHeader("Access-Control-Allow-Origin", "*");
        respuestaHttp.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
        respuestaHttp.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
        
        cadena.doFilter(peticion, respuesta);
    }
}

Etiquetas: SpringBoot MySQL java HTML Layui

Publicado el 6-24 05:19