共计 5347 个字符,预计需要花费 14 分钟才能阅读完成。
本文介绍如何通过工作流 ASW 编排云函数,疾速实现订单数据的解决。
工作原理
- 工作流调用函数获取肯定时间段内的订单数据,对数据进行预处理。
- 将预处理的数据交给 Map 迭代工作解决:每个订单进行数据处理后,别离写到不同的数据库表中,或者绘制成图表展现。
操作步骤
创立工作流程须要首先创立一个状态机,通过编排状态机的不同元件,扭转状态机构造,从而实现用户自定义的性能汇合。
简略三步即可实现:创立云函数 → 创立工作流 → 运行状态机
Step 1:创立云函数
创立 GetOrder 函数
- 登录 云函数控制台,单击左侧导航栏的【函数服务】。
- 在主界面上方函数服务区域抉择广州,并单击【新建】,进入函数创立流程。
-
在新建函数页面,根本信息中填写以下信息:
- 函数名称:GetOrder。
- 运行环境:Nodejs10.15。
- 创立形式:抉择空白函数,单击【下一步】进入函数配置。
- 在函数配置页面中的 Cloud Studio 窗格中,删除原有代码,复制如下所示的代码:
'use strict'; | |
exports.main_handler = async (event, context) => {console.log("this is get order function"); | |
# 您能够通过 api 申请获取实在的订单数据,样例中数据不便模仿工作流执行 | |
var orderlist = [ | |
{ | |
"orderId":"202012200001", | |
"goodsId":"1004", | |
"goodsName":"橘子 #1004", | |
"unit":"件", | |
"specific":"5 斤一箱", | |
"linePrice":100, | |
"salePrice":90, | |
"costPrice":80, | |
"number":30, | |
"isVoucher":1, | |
"voucherPrice":2, | |
"voucherId":"3dr55678hj", | |
"isDiscount":1, | |
"discountPrice":3, | |
"carriage": 8, | |
"receiver":"susu", | |
"phone":"18633567898", | |
"address":"深圳市南山区腾讯大厦 20 楼", | |
"createTime":"2020-12-20 10:00:00", | |
"payTime":"2020-12-20 11:00:00", | |
"payMethod":1, | |
"payOrder":"202012201100003940", | |
"orderStatus":3, | |
"deliveryTime":"2020-12-21 11:00:00", | |
"finishTime":"2020-12-25 11:00:00", | |
"deliveryOrder":"ZT12345789d786", | |
"isReturn":1, | |
"returnId":"2020122600012", | |
"returnNumber":2, | |
}, | |
{ | |
"orderId":"202012200001", | |
"goodsId":"2001", | |
"goodsName":"梨子 #2001", | |
"unit":"件", | |
"specific":"6 斤一箱", | |
"linePrice":150, | |
"salePrice":120, | |
"costPrice":90, | |
"number":20, | |
"isVoucher":1, | |
"voucherPrice":3, | |
"voucherId":"3dr55678hj", | |
"isDiscount":1, | |
"discountPrice":5, | |
"carriage": 0, | |
"receiver":"susu", | |
"phone":"18633567898", | |
"address":"深圳市南山区腾讯大厦 20 楼", | |
"createTime":"2020-12-20 10:00:00", | |
"payTime":"2020-12-20 11:00:00", | |
"payMethod":1, | |
"payOrder":"202012201100003940", | |
"orderStatus":3, | |
"deliveryTime":"2020-12-21 11:00:00", | |
"finishTime":"2020-12-25 11:00:00", | |
"deliveryOrder":"ZT12345789d786", | |
"isReturn":0, | |
"returnId":"","returnNumber":0, | |
}, | |
{ | |
"orderId":"202012200001", | |
"goodsId":"3005", | |
"goodsName":"香蕉 #3005", | |
"unit":"件", | |
"specific":"10 斤一箱", | |
"linePrice":180, | |
"salePrice":150, | |
"costPrice":98, | |
"number":6, | |
"isVoucher":1, | |
"voucherPrice":8, | |
"voucherId":"3dr55678hj", | |
"isDiscount":1, | |
"discountPrice":20, | |
"carriage": 0, | |
"receiver":"susu", | |
"phone":"18633567898", | |
"address":"深圳市南山区腾讯大厦 20 楼", | |
"createTime":"2020-12-20 10:00:00", | |
"payTime":"2020-12-20 11:00:00", | |
"payMethod":1, | |
"payOrder":"202012201100003940", | |
"orderStatus":3, | |
"deliveryTime":"2020-12-21 11:00:00", | |
"finishTime":"2020-12-25 11:00:00", | |
"deliveryOrder":"ZT12345789d786", | |
"isReturn":1, | |
"returnId":"2020122600013", | |
"returnNumber":3, | |
} | |
]; | |
return {"orderList":orderlist}; | |
}; |
- 单击【保留】,则胜利创立了云函数
创立 ProcessOrder 函数
参考【创立 GetOrder 函数】的形式,创立 ProcessOrder 函数,代码如下:
'use strict'; | |
exports.main_handler = async (event, context) => {console.log("this is processOrder function"); | |
var order = event; | |
#数据处理 | |
var income = order["salePrice"]-order["costPrice"]; | |
var goodsInfo = {"goodsId":order["goodId"],"goodsName":order["goodsName"],"number":order["number"]}; | |
var incomeInfo = {"goodsId":order["goodId"],"goodsName":order["goodsName"],"number":order["number"],"income":income}; | |
return { | |
"goodsInfo":goodsInfo, | |
"incomeInfo":incomeInfo, | |
"salesInfo":salesInfo | |
}; | |
} |
创立 GoodsSold 函数
参考【创立 GetOrder 函数】的形式,创立 GoodsSold 函数,代码如下:
'use strict'; | |
exports.main_handler = async (event, context) => {console.log("this is goodsSold function"); | |
// 一些写入数据库或者图表展现操作 | |
console.log(event); | |
return "GoodsSold success"; | |
}; |
创立 Income 函数
参考【创立 GetOrder 函数】的形式,创立 Income 函数,代码如下:
'use strict'; | |
exports.main_handler = async (event, context) => {console.log("this is income function"); | |
// 一些写入数据库或者图表展现操作 | |
console.log(event); | |
return "Income success"; | |
}; |
创立 SalesReturn 函数
参考【创立 GetOrder 函数】的形式,创立 SalesReturn 函数,代码如下:
'use strict'; | |
exports.main_handler = async (event, context) => {console.log("this is salesReturn function"); | |
// 一些写入数据库或者图表展现操作 | |
console.log(event); | |
return "SalesReturn success"; | |
}; |
Step 2:创立工作流
- 登录 利用与编排服务流控制台。
- 在状态机页面,单击【新建】,进入创立工作流页面中,抉择应用【代码创立】:
- 间接在代码编辑框中粘贴以下 TCSL 代码:
{ | |
"Comment": "订单解决", | |
"StartAt": "GetOrder", | |
"States": { | |
"GetOrder": { | |
"Type": "Task", | |
"Comment": "拉取数据", | |
"Resource": "qrn:qcs:asw:ap-guangzhou:12345678:sdk:json:qcloud:scf:Invoke/GetOrder", | |
"Next": "MapProcess" | |
}, | |
"MapProcess": { | |
"Type": "Map", | |
"ItemsPath": "$.orderList", | |
"MaxConcurrency": 6, | |
"Iterator": { | |
"StartAt": "ProcessOrder", | |
"States": { | |
"ProcessOrder": { | |
"Type": "Task", | |
"Resource": "qrn:qcs:asw:ap-guangzhou:12345678:sdk:json:qcloud:scf:Invoke/ProcessOrder", | |
"Next": "ParallelDataProcess" | |
}, | |
"ParallelDataProcess": { | |
"Type": "Parallel", | |
"End": true, | |
"Branches": [ | |
{ | |
"StartAt": "GoodsSold", | |
"States": { | |
"GoodsSold": { | |
"InputPath": "$.goodsInfo", | |
"Type": "Task", | |
"Resource": "qrn:qcs:asw:ap-guangzhou:12345678:sdk:json:qcloud:scf:Invoke/GoodsSold", | |
"End": true | |
} | |
} | |
}, | |
{ | |
"StartAt": "Income", | |
"States": { | |
"Income": { | |
"InputPath": "$.incomeInfo", | |
"Type": "Task", | |
"Resource": "qrn:qcs:asw:ap-guangzhou:12345678:sdk:json:qcloud:scf:Invoke/Income", | |
"End": true | |
} | |
} | |
}, | |
{ | |
"StartAt": "SalesReturn", | |
"States": { | |
"SalesReturn": { | |
"InputPath": "$.salesInfo", | |
"Type": "Task", | |
"Resource": "qrn:qcs:asw:ap-guangzhou:12345678:sdk:json:qcloud:scf:Invoke/SalesReturn", | |
"End": true | |
} | |
} | |
} | |
] | |
} | |
} | |
}, | |
"End": true | |
} | |
} | |
} |
- 单击右上角【下一步】,进入保留界面,输出状态机名称,运行角色抉择【新建角色】,类型抉择【规范状态机】,单击右上角【实现】,在状态机列表页能够看到创立好的状态机。
应用已有角色须要先创立角色,并给角色受权相干策略,操作详情参考 运行角色。
Step 3:运行状态机
状态机创立实现后,您能够在登录后的主页面查看创立好的状态机。
- 单击须要运行的状态机的【名称】,进入状态机。
- 您能够在界面中看到状态机的根本信息。单击【工作流执行】下的【开始执行】。
- 在弹出的“输出”窗口中,以 JSON 格局输出状态机须要的输出内容。例如:
{"comment": "invoke workflow"}
- 单击【确定】,实现状态执行后,能够在详情页查看执行后果:
- 滑动至页面最下方,在【执行历史记录】条目下,您能够查看子节点的运行状况。
上述步骤介绍了一个订单数据处理场景的根本工作流流程。
实在的业务场景中每个 Task 节点会波及配置一些相干参数信息,例如做参数传递、异样重试和谬误捕捉解决等,更多详情参考 状态机语言。
申请试用 ASW
ASW 目前处于公测阶段,公测阶段收费提供服务。欢送提出产品改良倡议,反馈驳回后即可取得腾讯萌新短鹅公仔!
立刻申请公测,咱们将会在 3 个工作日内实现审批,并通过短信和站内信告诉您,感谢您的反对。
One More Thing
立刻体验腾讯云 Serverless Demo,支付 Serverless 新用户礼包 ???? serverless/start
欢送拜访:Serverless 中文网!
正文完