Automatiser l'impression de produits avec n8n et MySQL
Ce workflow a pour objectif d'automatiser le processus d'impression de produits en utilisant n8n, MySQL et des requêtes HTTP. Dans un contexte où la gestion des étiquettes de produits est cruciale pour les entreprises, ce workflow permet de récupérer les données nécessaires à partir d'une base de données MySQL, de configurer les paramètres d'impression via une requête HTTP, et de traiter les informations avant de générer l'étiquette finale. Étape 1 : le déclencheur est un webhook qui reçoit les données d'entrée. Étape 2 : les données du produit sont extraites d'une base de données MySQL grâce au nœud 'dadosProduto'. Étape 3 : une requête HTTP est envoyée pour récupérer la configuration d'impression via le nœud 'PegarConfiguracaoImpressao'. Étape 4 : les données de rouleau sont récupérées à partir d'une base de données PostgreSQL avec le nœud 'dadosRolo'. Étape 5 : les données sont ensuite traitées dans le nœud 'trataRetorno' pour préparer la réponse finale. Enfin, le nœud 'roloProduto' fusionne les informations nécessaires pour générer l'étiquette. Ce workflow offre une solution efficace pour réduire les erreurs manuelles et améliorer la productivité, permettant ainsi aux entreprises de se concentrer sur des tâches à plus forte valeur ajoutée. Tags clés : automatisation, MySQL, impression.
Vue d'ensemble du workflow n8n
Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.
Inscris-toi pour voir l'intégralité du workflow
Inscription gratuite
S'inscrire gratuitementBesoin d'aide ?{
"nodes": [
{
"name": "emitirEtiqueta",
"type": "n8n-nodes-base.webhook",
"position": [
440,
1290
],
"webhookId": "4431a14c-62c6-4602-8e20-e661f1d3d706",
"parameters": {
"path": "emitirEtiqueta",
"options": {},
"httpMethod": "POST",
"responseData": "allEntries",
"responseMode": "lastNode"
},
"typeVersion": 1
},
{
"name": "dadosProduto",
"type": "n8n-nodes-base.mySql",
"position": [
1270,
1440
],
"parameters": {
"query": "=-- CONSULTA DO PRODUTO GRADE\nWITH pg as (\n\tSELECT\n\t\tid,\n\t\tid_produto,\n\t\tid_gradex,\n\t\tid_gradey,\n\t\tcodigo \n\tFROM\n\t\tproduto_grade \n\tWHERE\n\t\tid = '{{$node[\"emitirEtiqueta\"].json[\"body\"][\"id_produto_grade\"]}}'\n),\n\n-- CONSULTA DO PRODUTO\np as (\n\tSELECT * FROM produto \n\tWHERE id IN ( SELECT id_produto FROM pg)\n\tAND situacao = 'ATIVO'\n),\n\n-- CONSULTA TECIDO\nt as (\n\tSELECT\n\t\ttoken,\n\t\t JSON_UNQUOTE(json_extract( objeto, '$.largura')) AS largura\n\tFROM\n\t\t`{{$node[\"PegarConfiguracaoImpressao\"].json[\"params\"][\"bancoRelatorio\"]}}`.`i_objeto` \n\tWHERE\n\t\tmodulo = 'produto_grade_tecido'\n\t\tand token in (select id from pg)\n\t\tand situacao = 'ATIVO'\n),\n\n\n-- CONSULTA COMPOSICAO\ncp as (\n\t\n\tSELECT\n\t token,\n group_concat(concat(cps.participacao,'% ',cps.descricao)) as composicao\n\tFROM\n\t\t`{{$node[\"PegarConfiguracaoImpressao\"].json[\"params\"][\"bancoRelatorio\"]}}`.`i_objeto`,\n\t\tJSON_TABLE (\n\t\t\t\t\t\t\t\t\tobjeto,\n\t\t\t\t\t\t\t\t\t\t\t'$[*]' COLUMNS ( \n\t\t\t\t\t\t\t\t\t\t\t\t\tparticipacao INT path '$.participacao',\n\t\t\t\t\t\t\t\t\t\t\t\t\tdescricao TEXT path '$.descricao'\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) AS cps \n\t\tWHERE modulo = 'produto_grade_tecido_composicao'\n\t\tAND token in (select id from pg)\n\t\tAND situacao = 'ATIVO'\n\t\tAND cps.participacao > 0\n\t\tGROUP BY token\n\t\tORDER BY participacao desc\n\t\t\n)\n\n\n-- CONSULTA RELATORIO\nSELECT\n{{$node[\"emitirEtiqueta\"].json[\"body\"][\"id_movimentacao_detalhe\"]}} as id_movimentacao_detalhe ,\n pg.id, \n\tpg.codigo,\n\tp.descricao,\n\tm.nome as marca,\n\tgx.nome as gradex,\n\tgy.nome as gradey,\n\tcurdate() as data_entrada,\n t.largura,\n\tcp.composicao\nFROM\n\tpg inner join p on (p.id = pg.id_produto)\n\tinner join marca m on(m.id = p.id_marca)\n\tleft join grade gx on (gx.id = pg.id_gradex)\n\tleft join grade gy on (gy.id = pg.id_gradey)\n\tleft join t on (t.token = pg.id)\n\tleft join cp on (cp.token = pg.id)",
"operation": "executeQuery"
},
"credentials": {
"mySql": {
"id": "2",
"name": "illi"
}
},
"typeVersion": 1
},
{
"name": "PegarConfiguracaoImpressao",
"type": "n8n-nodes-base.httpRequest",
"position": [
730,
1290
],
"parameters": {
"url": "http://localhost:1337/parse/config",
"options": {},
"jsonParameters": true,
"headerParametersJson": "{\"X-Parse-Application-Id\": \"iwms\"}"
},
"typeVersion": 1
},
{
"name": "dadosRolo",
"type": "n8n-nodes-base.postgres",
"position": [
1260,
1220
],
"parameters": {
"query": "=select * from \"tecido_rolo\"\nwhere \"objectId\" in ('{{$json[\"idRolos\"].join(\"','\")}}')",
"operation": "executeQuery",
"additionalFields": {}
},
"credentials": {
"postgres": {
"id": "1",
"name": "Postgres account"
}
},
"typeVersion": 1
},
{
"name": "trataRetorno",
"type": "n8n-nodes-base.function",
"position": [
1010,
1220
],
"parameters": {
"functionCode": "// Code here will run only once, no matter how many input items there are.\n// More info and help: https://docs.n8n.io/nodes/n8n-nodes-base.function\n\n\n// var produto = items[0].json;\n\n\nvar rolos = $node[\"emitirEtiqueta\"].json[\"body\"][\"rolos\"];\n\n\nvar idRolos = rolos.map(\n function(rolo){\n return rolo.objectId\n });\n \nvar retorno = [];\n\nretorno.push({json:{\n // produto:produto,\n idRolos:idRolos \n}})\n\nreturn retorno;"
},
"typeVersion": 1
},
{
"name": "roloProduto",
"type": "n8n-nodes-base.merge",
"position": [
1640,
1330
],
"parameters": {
"mode": "mergeByKey",
"propertyName1": "id_movimentacao_detalhe",
"propertyName2": "id_movimentacao_detalhe"
},
"typeVersion": 1
}
],
"connections": {
"dadosRolo": {
"main": [
[
{
"node": "roloProduto",
"type": "main",
"index": 0
}
]
]
},
"dadosProduto": {
"main": [
[
{
"node": "roloProduto",
"type": "main",
"index": 1
}
]
]
},
"trataRetorno": {
"main": [
[
{
"node": "dadosRolo",
"type": "main",
"index": 0
}
]
]
},
"emitirEtiqueta": {
"main": [
[
{
"node": "PegarConfiguracaoImpressao",
"type": "main",
"index": 0
}
]
]
},
"PegarConfiguracaoImpressao": {
"main": [
[
{
"node": "dadosProduto",
"type": "main",
"index": 0
},
{
"node": "trataRetorno",
"type": "main",
"index": 0
}
]
]
}
}
}Pour qui est ce workflow ?
Ce workflow s'adresse aux entreprises de taille moyenne à grande qui souhaitent automatiser leur processus d'impression de produits. Il est particulièrement utile pour les équipes techniques et les responsables de la production qui ont des connaissances en intégration de systèmes et en gestion de bases de données.
Problème résolu
Ce workflow résout le problème de la gestion manuelle des impressions de produits, qui peut être source d'erreurs et de pertes de temps. En automatisant ce processus, les utilisateurs peuvent réduire le risque d'erreurs humaines, améliorer la précision des étiquettes imprimées et accélérer le temps de traitement des commandes. L'automatisation permet également une meilleure traçabilité des données et une gestion plus efficace des ressources.
Étapes du workflow
Étape 1 : le flux commence par un webhook qui reçoit les données nécessaires. Étape 2 : les informations du produit sont récupérées à partir d'une base de données MySQL via le nœud 'dadosProduto'. Étape 3 : une requête HTTP est effectuée pour obtenir la configuration d'impression avec le nœud 'PegarConfiguracaoImpressao'. Étape 4 : les données de rouleau sont extraites d'une base de données PostgreSQL grâce au nœud 'dadosRolo'. Étape 5 : les informations sont traitées dans le nœud 'trataRetorno' pour préparer la réponse finale. Étape 6 : enfin, le nœud 'roloProduto' fusionne toutes les données pour générer l'étiquette imprimable.
Guide de personnalisation du workflow n8n
Pour personnaliser ce workflow, commencez par modifier l'URL du webhook dans le nœud 'emitirEtiqueta' pour qu'elle corresponde à votre point d'entrée. Ensuite, ajustez la requête dans le nœud 'dadosProduto' pour cibler la bonne table de votre base de données MySQL. Vous pouvez également personnaliser les paramètres de la requête HTTP dans le nœud 'PegarConfiguracaoImpressao' pour répondre à vos besoins spécifiques d'impression. Assurez-vous que les champs dans le nœud 'dadosRolo' correspondent à votre structure de données PostgreSQL. Enfin, adaptez le code dans le nœud 'trataRetorno' pour traiter les données comme vous le souhaitez avant la fusion finale dans le nœud 'roloProduto'.