proyecto para imprimir las etiquetas RFID
Go to file
Guillermo Bonet e24d4f4687
gitea/rfidnatura/pipeline/head This commit looks good Details
feat: update version to 1.0.4
2025-04-07 10:43:24 +02:00
db feat: refs #4452 vn changes 2024-10-23 14:49:07 +02:00
resources Fix barcode position 2025-04-07 10:12:40 +02:00
worker feat: refs #4452 Fix 2025-02-07 08:29:22 +01:00
.gitignore feat: refs #4452 vn changes 2024-10-23 14:49:07 +02:00
Dockerfile feat: refs #4452 vn changes 2024-10-23 14:49:07 +02:00
Jenkinsfile refactor: refs #4452 Jenkins file 2024-12-17 10:39:02 +01:00
README.md refactor: refs #4452 Test 2024-12-17 10:43:36 +01:00
docker-compose.yml feat: refs #4452 vn changes 2024-10-23 14:49:07 +02:00
log.js feat: refs #4452 vn changes 2024-10-23 14:49:07 +02:00
main.js feat: refs #4452 vn changes 2024-10-23 14:49:07 +02:00
package-lock.json feat: refs #4452 vn changes 2024-10-23 14:49:07 +02:00
package.json feat: update version to 1.0.4 2025-04-07 10:43:24 +02:00

README.md

RfidNatura (Print Server RFID)

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:

    # DEBUG=1
    # KEEP_TMP_FILES=1
    # DRY_PRINT=1
    DB_HOST=mariadb
    DB_PORT=3306
    DB_USER=user
    DB_PASSWORD=password
    DB_NAME=name
    DB_PRINTER_SCHEMA=name
    WORKERS=10
    REPLACE_WORKER_DELAY=10000
    DB_RECORD_DELAY=6000
    DB_CONN_DELAY=2000
    DB_CONN_ATTEMPTS=1
    PRINTER_CONN_TIMEOUT=1000
    PRINTER_CONN_ATTEMPTS=2
    PRINTER_CONN_PORT=9100
    

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.
  • start: Se llama al método start para asignar las tareas iniciales a los workers.

worker.js

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

  • getConnWithRetries: 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.
  • start: Asigna tareas iniciales a todos los workers.
  • end: 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.

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.