n8n工作流自动化平台的实操:生成统计图的两种方式

1.成果展示

1.1n8n的工作流

 牵涉节点:Postgres、Code、QuickChart、Edit Fields、HTTP Request

12.显示效果

 

 

2.实操过程

2.1节点说明

2.1.1Postgres节点:

注:将明细数据进行汇总。 

2.1.2code节点:

注:将 查询的数据转换成QuickChart需要的格式,代码如下:

let data = $input.all();
let rawData = data.map(item => item.json);

// 按年份分组数据
const groupedData = rawData.reduce((acc, item) => {
    if (!acc[item.nf]) acc[item.nf] = [];
    acc[item.nf].push({ month: item.yf, value: parseInt(item.sl) });
    return acc;
}, {});

// 构建完整的12个月份列表,作为 X 轴标签
const allMonths = Array.from({ length: 12 }, (_, i) => {
    const month = (i + 1).toString().padStart(2, '0'); // 01 - 12
    return month;
});

// 构建 QuickChart 需要的 chartData 格式
const chartData = {
    type: 'line',
    data: {
        labels: allMonths, // 使用完整12个月作为 X 轴
        datasets: Object.keys(groupedData).map(year => {
            // 补全缺失月份的数据为 null(图表上该点为空)
            const values = allMonths.map(month => {
                const found = groupedData[year].find(d => d.month === month);
                return found ? found.value : null;
            });

            return {
                label: `${year}年 事故起数`,
                data: values,
                borderColor: getRandomColor(),
                fill: false,
                pointRadius: values.map(v => v !== null ? 3 : 0), // 可选:隐藏空值点
            };
        })
    },
    options: {
        responsive: true,
        scales: {
            xAxes: [{
                scaleLabel: {
                    display: true,
                    labelString: '月份'
                }
            }],
            yAxes: [{
                ticks: {
                    beginAtZero: true
                },
                scaleLabel: {
                    display: true,
                    labelString: '事故起数'
                }
            }]
        }
    }
};

// 随机颜色生成函数
function getRandomColor() {
    const r = Math.floor(Math.random() * 256);
    const g = Math.floor(Math.random() * 256);
    const b = Math.floor(Math.random() * 256);
    return `rgba(${r},${g},${b},1)`;
}

return chartData;

2.1.3Edit Fields节点:

注:将json对象转换成字符串,主要图中的红框。 

2.1.4HTTP Request节点:

 

注:通过https://quickchart.io/chart?width=650&height=450&c={{ $json.data }}实现图片的生成,图中红框部分。

通过 QuickChart节点,最后也是转成url地址。因此不能在无互联网的环境下生成图片,希望有缘人提供更好的思路。

2.1.5QuickChart节点:

注:生成单曲线,单柱状图,通过 QuickChart节点没有问题,如果有上传多条曲线,则无法实现,只能通过https://quickchart.io/chart?width=650&height=450&c={{ $json.data }}方式实现。

### 创建或改进 n8n 图像生成工作流 为了创建或改进一个用于图像生成工作流,可以利用 `awesome-deepseek-integration` 中提供的工具和资源[^3]。此项目不仅提供了与 DeepSeek API 集成的方法,还支持多种集成方式,如 Siri 快捷方式、n8n 工作流等。 #### 设计思路 考虑到图像生成的需求,在构建工作流时应关注以下几个方面: - **数据输入**:定义如何接收待处理的原始图像或者描述目标图像的文字提示。 - **模型调用**:选择合适的预训练模型执行图像生成任务;DeepSeek 提供的强大 AI 功能可以帮助完成这一环节。 - **结果输出**:设定流程结束后的动作,比如保存新生成的图片至指定位置或是发送通知给用户。 #### 实现步骤概述 ##### 准备环境 确保已经安装并配置好了 n8n 平台以及必要的插件,特别是那些能够连接到外部服务(例如 DeepSeek)的节点组件。 ##### 构建基础架构 1. 添加触发器节点 (Trigger Node),用来启动整个自动化过程; 2. 插入 HTTP 请求/响应类型的节点来交互式地向用户提供界面收集所需信息; 3. 利用函数节点(Function Nodes)编写自定义逻辑代码片段,以便更好地控制流程走向; 4. 连接到第三方API的服务节点(Service Nodes), 如使用官方提供的 DeepSeek 节点访问其图像生成功能; 5. 结果展示节点(Result Display Nodes),负责呈现最终成果给终端使用者查看。 ```json { "nodes": [ { "parameters": {}, "name": "Start", "type": "n8n-nodes-base.start" }, ... { "parameters": { "functionCode": "async function execute(node, data) {\n const response = await fetch('https://api.deepseek.com/vision/generate',{\n method:'POST',\n body: JSON.stringify({prompt:data.json.prompt}),\n headers:{'Content-Type': 'application/json'}\n });\n\n let result=await response.json();\n return [node.helpers.returnJsonArray(result)];\n}" }, "name": "Generate Image via DeepSeek", "type": "n8n-nodes-base.functionItem" } ], "connections": {} } ``` 上述JSON展示了部分可能构成完整工作流的一部分节点及其之间的关系示意。其中包含了发起HTTP POST请求以获取来自DeepSeek服务器的新合成图象的关键操作。 #### 测试优化 经过初步搭建之后,应当反复测试所建立起来的工作流,调整各阶段参数直至达到满意的效果为止。同时也要注意监控性能表现,必要时引入缓存机制或其他手段提高效率降低延迟。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值