proyecto para imprimir las etiquetas RFID
Go to file
Guillermo Bonet f8a05fac72 Merge branch 'main' into 4452-vnChanges2 2024-09-16 08:22:17 +02:00
db refactor: refs #4452 Major changes 2024-09-16 08:13:29 +02:00
resources refactor: refs #4452 Major changes 2024-09-16 08:13:29 +02:00
worker Merge branch 'main' into 4452-vnChanges2 2024-09-16 08:22:17 +02:00
.dockerignore refactor: refs #4452 Major changes 2024-09-16 08:13:29 +02:00
.eslintrc.yaml Primer commit 2024-07-29 13:08:29 +02:00
.gitignore Merge branch 'main' into 4452-vnChanges2 2024-09-16 08:22:17 +02:00
Dockerfile refactor: refs #4452 Major changes 2024-09-16 08:13:29 +02:00
README.md Merge branch 'main' into 4452-vnChanges2 2024-09-16 08:22:17 +02:00
docker-compose.yml refactor: refs #4452 Major changes 2024-09-16 08:13:29 +02:00
main.js refactor: refs #4452 Major changes 2024-09-16 08:13:29 +02:00
package-lock.json refactor: refs #4452 Major changes 2024-09-16 08:13:29 +02:00
package.json refactor: refs #4452 Major changes 2024-09-16 08:13:29 +02:00

README.md

Backend Application

Este proyecto es una aplicación backend que utiliza Node.js, Docker, MariaDB y worker threads para gestionar la impresión de etiquetas ZPL.

Contenido

Instalación

  1. Clona el repositorio:

    git clone https://gitea.verdnatura.es/verdnatura/dismuntel.git
    
  2. Instala las dependencias de Node.js:

    npm install
    
  3. Asegúrate de tener Docker y Docker Compose instalados en tu máquina.

  4. Crea un archivo .env en el directorio raíz del proyecto y configura las variables de entorno necesarias:

    DB_HOST=mariadb
    DB_PORT=3306
    DB_USER=user
    DB_PASSWORD=password
    DB_NAME=database
    

Uso

  1. Levanta los servicios de Docker:

    docker-compose up --build
    
  2. La aplicación backend estará disponible en http://localhost:3000.

Descripción de Archivos

main.js

Este es el archivo de entrada principal que inicializa y comienza el procesamiento del pool de workers.

  • WorkerPool: Se importa la clase WorkerPool desde el archivo worker/workerPool.
  • threads: Se define el número de threads/workers que se van a utilizar.
  • workerPool: Se instancia un nuevo WorkerPool con el número de threads definido.
  • assignTasks: Se llama al método assignTasks para asignar las tareas iniciales a los workers.

docker-compose.yml

Define los servicios de Docker necesarios para la aplicación.

  • version: Especifica la versión del formato de docker-compose.
  • services: Define los servicios que se ejecutarán.
    • mariadb: Servicio para la base de datos MariaDB.
    • backend: Servicio para el backend de la aplicación.

Dockerfile

Define cómo construir la imagen Docker para el servicio de backend.

  • FROM: Utiliza la imagen base de Node.js más reciente.
  • COPY: Copia los archivos de configuración y el código de la aplicación al contenedor.
  • RUN: Instala las dependencias necesarias.
  • EXPOSE: Expone el puerto 3000.
  • CMD: Comando por defecto para iniciar la aplicación.

worker.js

Maneja el procesamiento de registros de impresión y la comunicación con las impresoras.

  • Configuración de logger: Se configura log4js para la salida de logs.
  • getConnectionWithRetries: Intenta obtener una conexión a la base de datos con reintentos.
  • sendZPL: Envía el contenido ZPL a la impresora con reintentos.
  • getPrinterIpAddress: Obtiene la dirección IP de una impresora basada en su ID.
  • getRecordForProcessing: Obtiene un registro para procesamiento, con manejo de transacciones y reintentos.
  • processRecord: Procesa un registro específico, generando el contenido ZPL y enviándolo a la impresora. Actualiza la base de datos con el estado de impresión.

workerPool.js

Maneja un pool de workers, creando y asignando tareas a los workers.

  • initWorkers: Inicializa el número especificado de workers.
  • createWorker: Crea un nuevo worker y maneja sus mensajes, errores y su finalización.
  • replaceWorker: Reemplaza un worker fallido creando uno nuevo.
  • assignTasks: Asigna tareas iniciales a todos los workers.
  • closeAllWorkers: Termina todos los workers.

pool.js

Configura y exporta un pool de conexiones MySQL.

  • dotenv: Carga las variables de entorno desde un archivo .env.
  • mysql.createPool: Crea un pool de conexiones MySQL usando las variables de entorno.

zplTemplate.js

Genera las etiquetas ZPL basadas en los registros y la plantilla de etiquetas.

  • generateZPL: Genera el código ZPL para una etiqueta específica basada en el registro y la plantilla de etiquetas.
  • rf_id_venature: Un valor fijo agregado al ID de expedición.
  • id_venature: Formatea el ID de expedición para que tenga una longitud de 20 caracteres.
  • upperCaseRecord: Convierte todos los valores de texto del registro a mayúsculas.
  • result: Contiene el ZPL generado para cada etiqueta.

package.json

Este archivo define las configuraciones básicas de tu proyecto backend, las dependencias necesarias para su funcionamiento, y las herramientas de desarrollo necesarias para mantener la calidad del código. Cada dependencia tiene un rol específico que ayuda a la aplicación a operar de manera eficiente y segura tanto en el desarrollo como en la producción.

label.json

Este archivo define el formato y los mapeos necesarios para la generación de etiquetas ZPL. Si deseas cambiar los datos que se pasan a ZPL para la impresión de etiquetas, siempre debes seguir este formato. El label.json tiene la siguiente estructura:

  • name: Nombre de la etiqueta.
  • mappings: Definición de los campos que serán reemplazados en la plantilla ZPL.
    • val1, val2, ...: Claves que se corresponden con los campos del registro.
  • zpl: Código ZPL que define el diseño de la etiqueta. Dentro del código ZPL, los valores de los mapeos se deben utilizar para ser reemplazados dinámicamente.
  • density: La densidad de impresión.
  • width: Ancho de la etiqueta.
  • height: Altura de la etiqueta.

devDependencies

Estas son las bibliotecas necesarias solo durante el desarrollo y no en producción.

  • eslint: ^7.32.0

    • Función: Una herramienta para encontrar y arreglar problemas en el código JavaScript. Ayuda a mantener un código limpio y consistente.
    • Uso en tu proyecto: Analizar el código y asegurar que sigue las convenciones de codificación especificadas.
  • eslint-plugin-import: ^2.29.1

    • Función: Un plugin para ESLint que ayuda a validar la importación/exportación de módulos ES6+.
    • Uso en tu proyecto: Asegurar que las importaciones en tu proyecto sean válidas y que no haya problemas de módulos no encontrados.