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
- Entorno de ejecución: Se recomienda JDK 1.8 (otras versiones son teóricamente compatibles).
- IDE: IDEA, Eclipse, MyEclipse (se recomienda IDEA).
- Entorno hardware: Windows 7/8/10 con 1GB de RAM o más; o Mac OS.
- 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);
}
}