1. 概述
1.1 应用场景
群通知中,用户希望:
每条消息对应一个通知人。
某个人对应的通知内容中,文字使用颜色代表事务的紧急程度。
通知内容中包含链接,用户点击即可跳转到详情页面。
如下图所示:
1.2 实现思路
1)未处理任务总数量通知,如下图所示:
将「未处理任务总数量」算出后,使用「参数输出」算子作为参数输出;然后自定义一个参数,值为 yyyy-mm-dd;在「消息通知」节点中,这两个参数构成消息通知内容。
2)每个人收到的消息内容如下图所示:
将待处理成员,使用「参数输出」算子作为参数输出;「循环容器」节点中遍历所有待处理成员,发送对应消息(详情可参见本文第二章内容)。
1.3 任务展示
FineDataLink 中的数据处理过程,详情参见:https://demo.finedatalink.com/ 「一条消息提醒一个人,可发送多条消息」。
2. 示例
2.1 场景模拟
示例数据:文档任务处理.xlsx
「文档任务处理」是已经过处理后的表,部分数据如下图所示:
希望每天在企业微信群中,先通知今日未处理任务总数量。
再通知对应成员还未处理(「当前工作流状态名称」为「组员处理」的任务)的文档任务、对应的任务编号、超期时间;未处理的文档任务可以点击链接跳转。其中:
当前时间距离「需求创建时间」小于 30 天的为未超期任务------文字颜色不做设置。
大于等于 30 天小于 60 天的为超期任务------希望企业微信群消息中,文字内容为黄色(链接文字除外)。
大于 60 天的为严重超期任务------希望企业微信群消息中,文字内容为红色(链接文字除外)。
2.2 今日未处理任务总数量通知
消息内容中需要用到两个参数,代表着今日日期、未完成任务总数量。
2.2.1 设置日期参数
设置日期参数,在消息内容中告知用户今日日期。
新建定时任务,点击「参数列表」,新增日期参数「今日时间」,值为「yyyy-mm-dd」,如下图所示:
2.2.2 今日未处理任务总数量作为参数输出
1)拖入「数据转换」节点,进入「数据转换」节点。
2)拖入「DB表输入」算子,读取「文档任务处理」表数据。如下图所示:
3)拖入「数据过滤」算子,过滤出「当前工作流状态名称」为「组员处理」的任务。如下图所示:
4)拖入「Spark SQL」算子,计算出所有未处理的文档任务。如下图所示:
注:公式中,表名和字段名为点击生成。
SELECT COUNT(DISTINCT 数据过滤.需求编号) FROM 数据过滤
5)将未处理任务总数量作为参数输出。如下图所示:
6)点击右上角「保存」按钮。
2.2.3 消息通知
拖入「消息通知」节点,在企业微信群中提醒所有人未处理的文档任务总数量。如下图所示:
2.3 每条消息对应一个接收人
2.3.1 将要通知的成员输出为参数
1)拖入「数据转换」节点,进入「数据转换」节点。
2)拖入「DB表输入」算子,读取「文档任务处理」表数据。如下图所示:
3)拖入「数据过滤」算子,过滤出「当前工作流状态名称」为「组员处理」的任务。如下图所示:
4)拖入「分组汇总」算子,将「成员名称」分组汇总。如下图所示:
5)拖入「数据过滤」算子,过滤出非空数据。如下图所示:
6)拖入「参数输出」算子,将成员名称输出为参数。如下图所示:
7)点击右上角「保存」按钮。
2.3.2 循环容器设置
需要遍历所有成员名称,获得每个成员下未完成的任务,所以需要使用「循环容器」节点。
拖入「循环容器」节点,设置如下图所示:
2.3.3 未处理任务的编号、标题、超期时间输出为参数
1)「循环容器」节点中拖入「数据转换」节点,进入「数据转换」节点。
2)拖入「DB表输入」算子,读取「文档任务处理」表数据。如下图所示:
3)拖入「数据过滤」算子,过滤出「当前工作流状态名称」为「组员处理」、且「成员名称」为 2.3.1 节参数的任务。如下图所示:
4)新增计算列,计算已超期时间、拼接任务链接:
已超期时间:DATEDIF(需求创建时间},now(),"D");当前时间距离「需求创建时间」的天数,便于后续将未完成任务划分为:严重超期任务、超期任务、未超期任务。
任务链接:CONCATENATE('https://help.fanruan.com/finedatalink/',需求编号);「文档任务处理」表中只有「需求编号」,文档任务是在业务系统中流转的,将固定链接与「任务编号」拼接起来。
如下图所示:
5)拖入「分组汇总」算子,根据「已超期时间」将未完成任务划分为三类:严重超期任务、超期任务、未超期任务。
字段 | 说明 |
---|---|
已超期时间 | 根据超期时间,对未完成任务进行分类:严重超期任务、超期任务、未超期任务 |
成员编号 | 根据「成员编号」分组汇总下,便于后续根据已超期时间排序 |
需求编号 | 企业微信群消息中,这些字段组成消息内容 |
任务链接 | |
需求名称 | |
已超期时间1 | 作用一:同上 作用二:消息通知内容中,严重超期的任务显示为红色,已超期的任务显示为黄色,未超期的任务颜色不做处理,为了消息通知内容整洁,需要根据已超期时间排序,消息通知内容中相同分类的任务连续显示 |
点击「已超期时间」字段>区间分组,根据超期时间对未完成任务进行分类。如下图所示:
将「已超期时间」名称改为「任务状态」,「已超期时间1」名称改为「已超期时间」。如下图所示:
6)拖入「Spark SQL」算子,将数据根据成员编号、已超期时间(降序)分组汇总。如下图所示:
点击「数据预览」,可看到数据根据任务状态、成员编号分组展示,已超期时间降序显示。
这样保证,消息内容中,某成员严重超期的任务(红色)能连续显示、超期的任务(黄色)连续显示、未超期任务连续显示,更加整洁。
7)「已超期时间」字段后续需要在新增计算列的公式的 CONCATENATE 函数中用到,该函数中参数类型需要为字符串类型,目前「已超期时间」字段类型为 double 类型,需要先修改字段类型。
拖入「字段设置」算子,将「已超期时间」字段的类型改为 varchar 。如下图所示:
8)后续步骤中,「新增计算列」算子的公式中使用单引号表示字符串(公式中使用到「需求名称」字段),如果「需求名称」的值中包含单引号,可能引起语法错误,所以需要将「需求名称」中的单引号去掉。
拖入「新增计算列」算子,新增「需求名称2」字段,将「需求名称」中的单引号替换为空格。如下图所示:
9)拖入「新增计算列」算子,将需求编号、需求名称、任务链接、已超期时间作为参数输出。如下图所示:
其中,严重超期任务在消息内容中,文字颜色为红色(链接文字不做处理);超期任务在消息内容中,文字颜色为黄色(链接文字不做处理);未超期任务,文字颜色不做处理;需求名称可点击,跳转到业务系统中查看任务详情。
10)拖入「参数输出」算子,将「输出参数」字段作为参数输出。如下图所示:
11)点击右上角「保存」按钮。
2.4 去掉需求名称中的逗号
若不去掉逗号,消息通知内容如下所示:
所以需要将逗号去掉。
1)「循环容器」节点中拖入「数据转换」节点,进入「数据转换」节点。
2)拖入「Spark SQL」算子,将「输出参数」字段中的逗号替换为空字符串。如下图所示:
3)拖入「参数输出」算子,将 canshu 输出为参数。如下图所示:
4)点击右上角「保存」按钮。
2.5 消息通知
拖入「消息通知」节点,通知渠道选择「企业微信群机器人」,消息类型选择「markdown消息」,消息内容如下图所示:
2.6 使用虚拟节点将两个数据转换节点连接(可不做)
本节内容可忽略不做,只是为了使用「虚拟节点」对多个分支节点进行汇总,不影响节点执行顺序。
拖入「虚拟节点」,将两个「数据转换」节点连接起来。如下图所示:
2.7 效果查看
任务运行成功后,消息通知内容如下图所示:
2.8 设置执行频率
点击右上角「调度计划」,设置任务执行频率。如下图所示: