本文介绍如何经过工做流 ASW 编排云函数,快速完成订单数据的处理。数据库
建立工做流程须要首先建立一个状态机,经过编排状态机的不一样元件,改变状态机结构,从而实现用户自定义的功能集合。json
简单三步便可完成:建立云函数 → 建立工做流 → 运行状态机api
'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}; };
参考【建立 GetOrder 函数】的方式,建立 ProcessOrder 函数,代码以下:less
'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 }; }
参考【建立 GetOrder 函数】的方式,建立 GoodsSold 函数,代码以下:async
'use strict'; exports.main_handler = async (event, context) => { console.log("this is goodsSold function"); //一些写入数据库或者图表展现操做 console.log(event); return "GoodsSold success"; };
参考【建立 GetOrder 函数】的方式,建立 Income 函数,代码以下:函数
'use strict'; exports.main_handler = async (event, context) => { console.log("this is income function"); //一些写入数据库或者图表展现操做 console.log(event); return "Income success"; };
参考【建立 GetOrder 函数】的方式,建立 SalesReturn 函数,代码以下:this
'use strict'; exports.main_handler = async (event, context) => { console.log("this is salesReturn function"); //一些写入数据库或者图表展现操做 console.log(event); return "SalesReturn success"; };
{ "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 } } }
使用已有角色须要先建立角色,并给角色受权相关策略,操做详情参考 运行角色。3d
状态机建立完成后,您能够在登陆后的主页面查看建立好的状态机。code
{"comment": "invoke workflow"}
上述步骤介绍了一个订单数据处理场景的基本工做流流程。server
真实的业务场景中每一个 Task 节点会涉及配置一些相关参数信息,例如作参数传递、异常重试和错误捕获处理等,更多详情参考 状态机语言。
ASW 目前处于公测阶段,公测阶段免费提供服务。欢迎提出产品改进建议,反馈采纳后便可得到腾讯萌新短鹅公仔!
当即申请公测,咱们将会在 3 个工做日内完成审批,并经过短信和站内信通知您,感谢您的支持。
当即体验腾讯云 Serverless Demo,领取 Serverless 新用户礼包 👉 serverless/start
欢迎访问:Serverless 中文网!