
# 如何使用服务编排实现呼吸机申请服务
#### 场景描述
**实现场景**：由于呼吸机资源缺乏，为了有效利用剩余的呼吸机，需要提供呼吸机申请服务进行资源调度。申请人调用服务接口提供医院信息和申请呼吸机资源数量，服务根据系统中处于空闲状态下的呼吸机资源判断资源是否充足，在资源充足的情况下返回被申请的呼吸机信息并修改系统中相应呼吸机的医院信息和状态。
**实现方案**：使用服务编排实现上述功能，实现逻辑如下：
1. 通过调用[查询对象数据](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0604.html#astrozero_05_0604__section793016303412)中创建的服务编排，获取系统中空闲状态下的呼吸机信息。
2. 通过调用[如何使用服务编排开发业务的基本逻辑](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0603.html)中创建的服务编排，进行资源是否充足的判断，返回被申请的呼吸机信息。
3. 通过决策图元判断上一步骤返回的申请呼吸机信息，做出下一步操作。
   - 走"ResourceEnough"分支：在资源满足的情况下调用[修改对象数据](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0604.html#astrozero_05_0604__section390119377416)中创建的服务编排，修改系统中被申请的呼吸机的医院信息和状态。
   
   - 走"ResourceNotEnough"分支：在资源不足的情况下返回错误信息。
    
图1呼吸机申请服务总体流程   
![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960284497.png "点击放大")
#### 前提条件
- 参考[如何使用服务编排开发业务的基本逻辑](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0603.html)中操作，创建呼吸机资源对象Respirator，作为呼吸机申请服务处理的对象。
- 参考[如何使用服务编排开发业务的基本逻辑](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0603.html)中操作，开发服务编排，实现对Respirator对象数据进行逻辑处理。
- 参考[如何使用服务编排开发数据的增删改查](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0604.html)中操作，开发服务编排，实现对Respirator对象数据进行增删改查。
 
#### 如何开发呼吸机申请服务
1. 参考[如何创建服务编排](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0601.html#astrozero_05_0601__section1133218183213)中操作，创建"名称"和"标签"为"RespiratorApply"的服务编排。
   
   图2新建RespiratorApply服务编排   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045240.png "点击放大")
   
   
2. 参照[表1]，定义服务编排用到的变量，并设置该服务编排的入参和出参。
   
    表1变量说明 
   | 变量名             | 变量类型           | 变量说明                               |
   |:---|:---|:---|
   | num             | 数字             | 申请的呼吸机数量。                          |
   | hospital        | 文本             | 申请呼吸机的医院。                          |
   | msg             | 文本             | 申请结果。                              |
   | RespiratorInfos | Respirator对象数组 | 系统中空闲状态下的呼吸机资源数组（后用于存放信息修改后的资源数组）。 |
   | RespiratorRecs  | Respirator对象数组 | 此次申请的原始呼吸机资源数组。                    |
      
   1. 在服务编排编辑器页面右侧，选择![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045232.png)，在全局上下文页面单击"变量"后的加号。
      图3创建变量   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960124605.png "点击放大") 
   
   2. 单击新增变量后的"..."，选择"设置"。
      图4设置变量   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045280.png "点击放大") 
   
   3. 配置数字类型的变量"num"，单击"保存"。
      图5配置变量   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960284389.png "点击放大")
      
      表2普通变量参数说明 
      | 参数    | 参数说明                                                                     |
      |:---|:---|
      | 名称    | 新增变量的名称，直接输入"num"。                                                       |
      | 数据类型  | 变量的数据类型，根据业务需求直接在下拉框中选择。 本示例设置为"数字"。 |
      | 默认值   | 变量的默认取值。 本示例不用配置。                    |
      | 描述    | 新增变量的描述说明，建议填写该变量的作用。                                                    |
      | 是否为数组 | 是否为数组型变量即集合变量。 本示例不勾选。                 |
         
      
   
   4. 参考上述操作，创建**文本** 类型的变量"hospital"、"msg"。
      图6成功创建变量   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045352.png "点击放大") 
   
   5. 在服务编排编辑器页面右侧，选择![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960284353.png)，在全局上下文页面单击"对象变量"后的加号。
      图7创建对象变量   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045296.png "点击放大") 
   
   6. 参考上述操作，新建对象变量"RespiratorInfos"，对象中选择[前提条件](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0603.html#astrozero_05_0603__section1763019565010)中创建的对象Respirator，设置字段描述信息（可选），**选中"是否为数组"** ，单击"保存"。
      图8配置数组类型对象变量   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045244.png "点击放大") 
   
   7. 参考上述操作，创建**数组** 类型的对象变量"RespiratorRecs"，注意要**选中"是否为数组"。**
   
   8. 单击画布中的"开始"图元![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960284381.png)，在右侧菜单选择![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045360.png)，单击右上角"全局上下文"展开"全局上下文"页面，将变量num、变量hospital拖拽到"入参"中，将变量msg、对象变量RespiratorRecs拖拽到"出参"中。
      图9配置开始图元   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045284.png "点击放大") 
   
   
   
   
3. 编排该服务主要使用了三种图元，分别是"子服务编排""赋值"、"决策"图元，按照下图将相关图元拖拽到画布中对应位置。 
   图10拖拽图元   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932885896.png "点击放大")
   
   
4. 在画布上，把鼠标放在起点图元![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960284493.png)图元上，从"+"拖动鼠标，在起点图元和"子服务编排"图元Flow0间增加连线。
5. 配置"子服务编排"图元Flow0。 
   1. 单击画布中的"子服务编排"图元Flow0，在"基本信息"页面中配置图元标签为"查询呼吸机资源"，名称为"SelectRespirator"。
      图11配置"子服务编排"图元基本信息   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960284377.png "点击放大") 
   
   2. 如下图所示，单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932885884.png)，在"子服务编排"页面"服务编排实例"中选择[查询对象数据](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0604.html#astrozero_05_0604__section793016303412)创建的服务编排"SelectRespirator"。配置输出参数，从"全局上下文"页面拖拽变量到"目标"中。
      图12配置子服务编排图元Flow0   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960284421.png "点击放大")
      ![](https://support.huaweicloud.com/usermanual-astrozero/public_sys-resources/note_3.0-zh-cn.png)
      如上图配置，将调用[查询对象数据](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0604.html#astrozero_05_0604__section793016303412)中开发的查询对象记录服务编排，并将查询结果存放到对象变量RespiratorInfos中。
      
   
   
   
   
6. 从"子服务编排"图元"SelectRespirator"连向"子服务编排"图元Flow1。
7. 配置"子服务编排"图元Flow1。 
   1. 单击画布中的"子服务编排"图元Flow1，在"基本信息"页面中配置图元标签为"处理呼吸机资源"，名称为"ProcessRespiratorResource"。
   
   2. 如下图所示，单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960124561.png)，在"子服务编排"页面"服务编排实例"中选择[如何使用服务编排开发业务的基本逻辑](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0603.html)创建的服务编排"ProcessRespiratorResource"。配置入参和出参，其中变量是由展开的"全局上下文"页面拖拽来的。
      图13配置子服务编排图元Flow1   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045332.png "点击放大")
      ![](https://support.huaweicloud.com/usermanual-astrozero/public_sys-resources/note_3.0-zh-cn.png)
      如上图配置，将调用[如何使用服务编排开发业务的基本逻辑](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0603.html)中开发的资源处理服务编排，并将查询对象记录服务编排中返回的空闲状态下呼吸机资源以及申请医院、资源数量作为入参传入，返回申请结果、被申请的呼吸机资源以及修改信息后的呼吸机资源数组存入相应对象变量。
      
   
   3. 从"子服务编排"图元"ProcessRespiratorResource"连向"决策"图元Decision0。
   
   
   
   
8. 配置"决策"图元Decision0。 
   1. 单击画布中的"决策"图元Decision0，在"基本信息"页面中配置图元标签为"判断资源是否充足"，名称为"judgeResource"。
   
   2. 在"决策"页面中，单击"默认"结果，将名称设置为"ResourceEnough"，单击"新增"，新增一个名为"ResourceNotEnough"的结果，并如下图所示进行配置。
      图14配置默认结果   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932885984.png "点击放大")
      图15新增"ResourceNotEnough"   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045276.png "点击放大")
      ![](https://support.huaweicloud.com/usermanual-astrozero/public_sys-resources/note_3.0-zh-cn.png)
      "ResourceNotEnough"结果表示当返回的资源数组为空时，代表资源不足，走向赋值图元设置错误信息；默认的"ResourceEnough"结果代表资源充足，将进行系统中数据的修改。
      
   
   3. 从"决策"图元"judgeResource"连向"子服务编排"图元Flow2，连线类型为"ResourceEnough"，从"决策"图元Decision0连向"赋值"图元Assignment0，连线类型为"ResourceNotEnough"。
   
   
   
   
9. 配置"子服务编排"图元Flow2。 
   1. 单击画布中的"子服务编排"图元Flow2，在"基本信息"页面中配置图元标签为"修改呼吸机资源状态"，名称为"UpdateRespiratorResource"。
   
   2. 如下图所示，单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960284357.png)，在"子服务编排"页面"服务编排实例"中选择[修改对象数据](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0604.html#astrozero_05_0604__section390119377416)中创建的服务编排"UpdateRespirator"，并配置输入参数。
      图16配置子服务编排图元Flow2   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960124533.png "点击放大")
      ![](https://support.huaweicloud.com/usermanual-astrozero/public_sys-resources/note_3.0-zh-cn.png)
      如上图配置，将调用[修改对象数据](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0604.html#astrozero_05_0604__section390119377416)中开发的修改对象记录服务编排，根据传入的对象变量RespiratorInfos对系统中的对象数据进行修改。
      
   
   
   
   
10. 配置"赋值"图元Assignment0。 
    1. 单击画布中的"赋值"图元Assignment0，在"基本信息"页面中配置图元标签为"设置错误信息"，名称为"setError1"。
    
    2. 如下图所示，单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960284385.png)，在"赋值"页面进行配置赋值语句，在资源不足的情况下设置相应的错误信息。
       图17配置赋值图元Assignment0   
       ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960124537.png "点击放大") 
    
    
    
    
11. 单击页面上方的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045288.png)，保存服务编排。
12. 保存成功后，单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045220.png)，运行服务编排。
13. 进行测试。 
    - 当资源不足时，测试服务是否报错并返回相应错误信息。
      1. 设置输入参数，单击"运行"，人民第66医院需要申请5台呼吸机。
         ```
         {
             "hospital": "人民第66医院",
             "num": 5
         }
         ```
         
      
      2. 检查输出页签的结果，是否符合预期。 返回如下信息，表示资源不足，申请失败。
         图18输出结果   
         ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960284505.png) 
       
    
    - 测试当资源充足时，返回信息"资源充足，呼吸机申请成功！"，以及申请的呼吸机资源信息，并修改系统中对象数据。
      1. 打开[创建对象数据](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0604.html#astrozero_05_0604__section1280872514113)中创建的服务编排"CreateRespirator"，单击页面上方的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960284365.png)，运行服务编排。
      
      2. 设置输入参数，单击"运行"，创建5台某医院空闲的呼吸机。
         其中，"CNAME"为命名空间名称，请替换为环境中实际配置的命名空间。
         ```
         {
             "RespiratorInfos": [
                 {
                     "name": "呼吸机1",
                     "CNAME__hospital__CST": "第1人民医院",
                     "CNAME__status__CST": "空闲"
                 },
                 {
                     "name": "呼吸机2",
                     "CNAME__hospital__CST": "第1人民医院",
                     "CNAME__status__CST": "空闲"
                 },
                 {
                     "name": "呼吸机3",
                     "CNAME__hospital__CST": "第1人民医院",
                     "CNAME__status__CST": "空闲"
                 },
                 {
                     "name": "呼吸机4",
                     "CNAME__hospital__CST": "第1人民医院",
                     "CNAME__status__CST": "空闲"
                 },
                 {
                     "name": "呼吸机5",
                     "CNAME__hospital__CST": "第1人民医院",
                     "CNAME__status__CST": "空闲"
                 }
             ]
         }
         ```
         
      
      3. 打开本节开发的服务编排"RespiratorApply"，单击页面上方的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960124589.png)，运行服务编排。
      
      4. 设置输入参数，单击"运行"，人民第66医院需要申请5台呼吸机。
         ```
         {
             "hospital": "人民第66医院",
             "num": 5
         }
         ```
         
      
      5. 检查输出页签的结果，是否符合预期。 资源充足时，如下图所示返回信息"资源充足，呼吸机申请成功！"，以及申请的呼吸机资源信息。
         图19输出界面   
         ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960284393.png "点击放大") 
      
      6. 在对象Respirator的"布局"页签，单击"Respirator Records"后的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960124601.png "点击放大")，查看到对象记录中状态已成功由"空闲"更新为"使用中"，且修改呼吸机资源所在的医院信息。
         图20查看布局页   
         ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045316.png "点击放大")
         图21查看对象记录   
         ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932885980.png "点击放大") 
       
    
    
    
    
14. 单击页面上方的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960124593.png)，启用服务编排。
 
