前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单三步,通过工作流(ASW)快速完成订单数据处理

简单三步,通过工作流(ASW)快速完成订单数据处理

原创
作者头像
腾讯云工作流
发布2021-03-19 16:54:37
5990
发布2021-03-19 16:54:37
举报
文章被收录于专栏:云工作流云工作流

本文介绍如何通过工作流 ASW 编排云函数,快速完成订单数据的处理。

工作原理

  1. 工作流调用函数获取一定时间段内的订单数据,对数据进行预处理。
  2. 将预处理的数据交给 Map 迭代任务处理:每个订单进行数据处理后,分别写到不同的数据库表中,或者绘制成图表展示。

操作步骤

创建工作流程需要首先创建一个状态机,通过编排状态机的不同元件,改变状态机结构,从而实现用户自定义的功能集合。

简单三步即可完成:创建云函数 → 创建工作流 → 运行状态机

Step 1:创建云函数

创建 GetOrder 函数

  1. 登录 云函数控制台,单击左侧导航栏的【函数服务】。
  2. 在主界面上方函数服务区域选择广州,并单击【新建】,进入函数创建流程。
  3. 在新建函数页面,基本信息中填写以下信息:
  4. 函数名称:GetOrder。
  5. 运行环境:Nodejs10.15。
  6. 创建方式:选择空白函数,单击【下一步】进入函数配置。
  7. 在函数配置页面中的 Cloud Studio 窗格中,删除原有代码,复制如下所示的代码:
代码语言:javascript
复制
'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};
   };
  1. 单击【保存】,则成功创建了云函数

创建 ProcessOrder 函数

参考【创建 GetOrder 函数】的方式,创建 ProcessOrder 函数,代码如下:

代码语言:javascript
复制
'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 函数,代码如下:

代码语言:javascript
复制
'use strict';
exports.main_handler = async (event, context) => {
    console.log("this is goodsSold function");
    //一些写入数据库或者图表展示操作
    console.log(event);
    return "GoodsSold success";
};

创建 Income 函数

参考【创建 GetOrder 函数】的方式,创建 Income 函数,代码如下:

代码语言:javascript
复制
'use strict';
exports.main_handler = async (event, context) => {
    console.log("this is income function");
    //一些写入数据库或者图表展示操作
    console.log(event);
    return "Income success";
};

创建 SalesReturn 函数

参考【创建 GetOrder 函数】的方式,创建 SalesReturn 函数,代码如下:

代码语言:javascript
复制
'use strict';
exports.main_handler = async (event, context) => {
    console.log("this is salesReturn function");
    //一些写入数据库或者图表展示操作
    console.log(event);
    return "SalesReturn success";
};

Step 2:创建工作流

  1. 登录 应用与编排服务流控制台
  2. 在状态机页面,单击【新建】,进入创建工作流页面中,选择使用【代码创建】:
  1. 直接在代码编辑框中粘贴以下 TCSL 代码:
代码语言:javascript
复制
{
     "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
       }
     }
   }
  1. 单击右上角【下一步】,进入保存界面,输入状态机名称,运行角色选择【新建角色】,类型选择【标准状态机】,单击右上角【完成】,在状态机列表页可以看到创建好的状态机。

使用已有角色需要先创建角色,并给角色授权相关策略,操作详情参考 运行角色

Step 3:运行状态机

状态机创建完成后,您可以在登录后的主页面查看创建好的状态机。

  1. 单击需要运行的状态机的【名称】,进入状态机。
  1. 您可以在界面中看到状态机的基本信息。单击【工作流执行】下的【开始执行】 。
  1. 在弹出的“输入”窗口中,以 JSON 格式输入状态机需要的输入内容。例如:
代码语言:javascript
复制
{"comment": "invoke workflow"}
  1. 单击【确定】,完成状态执行后,可以在详情页查看执行结果:
  1. 滑动至页面最下方,在【执行历史记录】条目下,您可以查看子节点的运行情况。

上述步骤介绍了一个订单数据处理场景的基本工作流流程。

真实的业务场景中每个 Task 节点会涉及配置一些相关参数信息,例如做参数传递、异常重试和错误捕获处理等,更多详情参考 状态机语言

申请试用 ASW

ASW 目前处于公测阶段,公测阶段免费提供服务。欢迎提出产品改进建议,反馈采纳后即可获得腾讯萌新短鹅公仔!

立即申请公测,我们将会在 3 个工作日内完成审批,并通过短信和站内信通知您,感谢您的支持。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 工作原理
  • 操作步骤
    • Step 1:创建云函数
      • 创建 GetOrder 函数
        • 创建 ProcessOrder 函数
          • 创建 GoodsSold 函数
            • 创建 Income 函数
              • 创建 SalesReturn 函数
                • Step 2:创建工作流
                  • Step 3:运行状态机
                  • 申请试用 ASW
                  相关产品与服务
                  云函数
                  云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。云函数是实时文件处理和数据处理等场景下理想的计算平台。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档