本文介紹如何通過作業流 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 中文網!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/254364.html
標籤:其他
上一篇:2021寒假每日一題《摘花生》
下一篇:介面檔案在專案中的作用
