gitea/rfidnatura/pipeline/head This commit looks good
Details
|
||
---|---|---|
db | ||
resources | ||
worker | ||
.gitignore | ||
Dockerfile | ||
Jenkinsfile | ||
README.md | ||
docker-compose.yml | ||
log.js | ||
main.js | ||
package-lock.json | ||
package.json |
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
-
Clona el repositorio:
git clone https://gitea.verdnatura.es/verdnatura/dismuntel.git
-
Instala las dependencias de Node.js:
npm install
-
Asegúrate de tener Docker y Docker Compose instalados en tu máquina.
-
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 archivoworker/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.