审批流接入[数字工厂]

最近更新时间:8/30/2022, 9:31:53 PM作者:andrewren(任豪)

审批流打通接口设计

待办接入流程

图 1-0-1 申请秘钥对

img

图 1-0-2 配置应用待办

img

图1-0-3 企业微信审核待办

img

图1-0-4 数字工厂审核待办

img

审批流打通时序图

img

授权接口(应用侧提供)

接口描述:应用侧提供授权接口,数字工厂后续调用应用侧接口会携带授权令牌供应用侧校验身份。

请求方式 POST

请求地址 {url}/access_token

请求参数

名称 类型 描述
url string 合作方应用接口地址
appId string App ID,应用的唯一ID
appSecret string App Secret,应用的凭证密钥
  • 请求体(Request Body)
{
    "appId":"appidtest",
    "appSecret":"appsecrettest",
}
  • 请求返回体(Response Body):
{
    "errorCode": 0, 
    "accessToken":"xxxxx",
    "expiresIn":7200
}
名称 类型 错误码
errorCode int 错误码。0表示成功
accessToken string 授权令牌
expiresIn int 令牌过期时间,单位:秒。

注意:所返回的 Token 凭证需要在一定时间内保持有效,一般推荐此有效期 2 小时。以下所有接口都需要提供此Token 凭证进行鉴权。

鉴权完成获得Token凭证后,以下所有的其他 API 必须检查该凭证,即在请求的 header 中Authorization字段获取凭证信息。 Authorization: [Bearer token]

获取审批列表接口(应用侧提供)

接口描述:应用侧提供查询审批列表接口,数字工厂待办页面展示待办列表会使用该接口去应用侧查回数据。

请求方式 GET

请求地址 {url}/backlog_list?pageIndex={pageIndex}&pageSize={pageSize}&userid=123&status=0

请求参数

名称 类型 描述
url string 合作方应用接口地址
pageIndex int 分页索引(从0开始)
pageSize int 分页大小
status int 待办状态,0表示待审批,1表示已审批
userid string 数字工厂用户id
  • 请求返回体(Response Body):
{
    "errorCode": 0,
    "total":1000,
    "data":[
        {
            "id":"123",
            "backlogName":"物料申请单审批",
            "describe":"有一条物料申请单待审批",
            "createAt":"2022-07-18 11:31:48",
            "backlogDetail":"https://www.qq.com",
            "status":"待审批"
        }
    ]
}
名称 类型 错误码
errorCode int 错误码。0表示成功
total int 待办列表总数
data int 待办数据
data.id string 待办任务id
data.backlogName string 待办任务名称
data.describe string 待办任务描述
data.createAt string 待办任务创建时间
data.backDetail string 预留字段,待办详情页地址
data.status string 审批状态,可取值:待审批、已同意、已驳回等。

审批待办接口(应用侧提供)

接口描述:用户处理应用侧的回调,用户在企业微信审核后,数字工厂会使用该接口更新应用侧审批状态。

请求方式 POST

请求地址 {url}/check

参数说明:

参数 说明
SpNo 审批编号
SpName 审批申请类型名称(审批模板名称)
SpStatus 申请单状态:1-审批中;2-已通过;3-已驳回;4-已撤销;6-通过后撤销;7-已删除;10-已支付
TemplateId 审批模板id。
ApplyTime 审批申请提交时间,Unix时间戳
Applyer 申请人信息
└ UserId 申请人userid
SpRecord 审批流程信息,可能有多个审批节点。
└ SpStatus 审批节点状态:1-审批中;2-已同意;3-已驳回;4-已转审
└ ApproverAttr 节点审批方式:1-或签;2-会签
└ Details 审批节点详情。当节点为标签或上级时,一个节点可能有多个分支
└ └ Approver 分支审批人
└ └ └ UserId 分支审批人userid
└ └ Speech 审批意见字段
└ └ SpStatus 分支审批人审批状态:1-审批中;2-已同意;3-已驳回;4-已转审
└ └ SpTime 节点分支审批人审批操作时间,0为尚未操作
└ └ Attach 节点分支审批人审批意见附
Notifyer 抄送信息,可能有多个抄送节点
└ UserId 节点抄送人userid
Comments 审批申请备注信息,可能有多个备注节点
└ CommentUserInfo 备注人信息
└ └ UserId 备注人userid
└ CommentTime 备注提交时间
└ CommentContent 备注文本内容
└ CommentId 备注id
└ └ Attach 备注意见
StatuChangeEvent 审批申请状态变化类型:1-提单;2-同意;3-驳回;4-转审;5-催办;6-撤销;8-通过后撤销;10-添加备注
  • 请求体(Request Body)
{
        "SpNo":"202208120002",
        "SpName":"加班",
        "SpStatus":"1",
        "TemplateId":"C4RYzCPXZDSmHDvj2jCfYMBeSz9zVrBoYi3TqzZ7v",
        "ApplyTime":"1660274443",
        "Notifyer":null,
        "StatuChangeEvent":"1",
        "Applyer":null,
        "SpRecord":[
            {
                "SpStatus":"1",
                "ApproverAttr":"1",
                "Details":{
                    "Approver":{
                        "UserId":"1056950290147705389"
                    },
                    "Speech":"",
                    "SpStatus":"1",
                    "SpTime":"0"
                }
            }
        ],
          "Comments":{
            "CommentUserInfo":{
                "UserId":"LiuZhi"
            },
            "CommentTime":"1571732272",
            "CommentContent":"这是一个备注",
            "CommentId":"6750538708562308220"
        }
    }
  • 请求返回体(Response Body):
{
    "errorCode": 0, 
    "errorMsg":"success"
}
名称 类型 错误码
errorCode int 错误码。0表示成功
errorMsg string 错误提示

创建企业微信审批(平台侧提供)

接口描述:创建企业微信审批通道

ApplyEvent

请求域名:请求域名:http://iam-api.{工业环境域名}

接口类型:OpenAPI

接口请求方式:POST

请求参数

名称 类型 描述 必须
creator_userid string 申请人账号id
template_id string 模板的唯一标识id,取值参考注释1
approver object 审批流程信息,用于指定审批申请的审批流程,支持单人审批、多人会签、多人或签,可能有多个审批节点
approver.userid string 审批节点审批人userid列表,若为多人会签、多人或签,需填写每个人的userid
approver.attr int 节点审批方式:1-或签;2-会签,仅在节点为多人审批时有效
notifyer string 抄送人节点userid列表
notify_type int 抄送方式:1-提单时抄送(默认值); 2-单据通过后抄送;3-提单和单据通过后抄送
apply_data object 审批申请数据,可定义审批申请中各个控件的值。取值参考注释2
summary_list object 摘要信息,用于显示在审批通知卡片、审批列表的摘要信息,最多3行
summary_list.summary_info object 摘要行信息,用于定义某一行摘要显示的内容
summary_list.summary_info.text string 摘要行显示文字,用于记录列表和消息通知的显示,不要超过20个字符
  • 请求体(Request Body)
{
  "apply_data": {
    "contents": [
      {
        "control": "Date",
        "id": "item-item-1493800425749",
        "date": {
          "attendance": {
            "date_range": {
              "type": "halfday",
              "new_begin": 1658128880,
              "new_end": 1658128880,
              "new_duration": 86400
            },
            "type": 4
          }
        }
      },
      {
        "control": "Textarea",
        "id": "item-item-1493800414708",
        "value": {
          "text": "文本填写的内容"
        }
      },
      {
        "control": "Text",
        "id": "item-item-1493800442836",
        "value": {
          "text": "文本填写的内容"
        }
      
      }
    ]
  },
  "creator_userid": "1059198702884749910",
  "template_id": "C4RYzCPXZDSmHDvj2jCfYMBeSz9zVrBoYi3TqzZ7v",
  "use_template_approver": 0,
  "approver": [
    {
      "attr": 2,
      "userid": [
        "RenHao"
      ]
    },
    {
      "attr": 1,
      "userid": [
        "RenHao"
      ]
    }
  ],
  "notifyer": [
    "RenHao"
  ],
  "notify_type": 1
}
  • 请求返回体(Response Body):
{
    "Code": 0, 
    "Msg":"success",
    "sp_no": "202001010001"
}
名称 类型 错误码
Code int 错误码。0表示成功
Msg string 错误提示
sp_no string 表单提交成功后,返回的表单编号

注释1

模板id取值参考

模板名称 模板id(dev环境) 模板id(test环境)
出差 C4RYzCPXZDSmHDvj2jCfYMBeSz9zVpgzZSpNzPCnM 3WKhn8axeNKHD4uajazhnAD9Qzv54BPBUoLU3ULy
加班 C4RYzCPXZDSmHDvj2jCfYMBeSz9zVrBoYi3TqzZ7v C4RYzCUtbw5gYGF5ty3gzKec8vdEqmqzhHM47jRzR
生产订单审批 3WKhuwSeZKgvu9jfN5oeUEJ4LkZjbrV2z8JMJfPW
... ...

注释2

apply_data 取值参考

当模板取值为出差时(templateId=C4RYzCPXZDSmHDvj2jCfYMBeSz9zVpgzZSpNzPCnM),apply_data 取值如下:

{
  "apply_data": {
    "contents": [
      {
        "control": "Attendance",
        "id": "smart-time",
        "value": {
          "attendance": {
            "date_range": {
              "type": "halfday",
              "new_begin": 1658128880,
              "new_end": 1658128880,
              "new_duration": 86400
            },
            "type": 4
          }
        }
      },
      {
        "control": "Textarea",
        "id": "item-1497581558567",
        "value": {
          "text": "文本填写的内容" //出差事由
        }
      },
      {
        "control": "Text",
        "id": "item-1497581575653",
        "value": {
          "text": "文本填写的内容" //出差地点
        }
      
      }
    ]
  },
  "creator_userid": "123456",
  "template_id": "C4RYzCPXZDSmHDvj2jCfYMBeSz9zVpgzZSpNzPCnM",
  "use_template_approver": 0,
  "approver": [
    {
      "attr": 2,
      "userid": [
        "1234567"
      ]
    },
    {
      "attr": 1,
      "userid": [
        "1234567"
      ]
    }
  ],
  "notifyer": [
    "RenHao"
  ],
  "notify_type": 1
}
参数 说明
attendance 假勤内容,即申请人在此组件内选择的假勤信息
└ type 假勤组件类型:1-请假;3-出差;4-外出;5-加班
└ date_range 假勤组件时间选择范围
└ └ type 时间展示类型:day-日期;hour-日期+时间
└ └ new_begin 开始时间戳,同一人new_begin不能重复
└ └ new_end 结束时间戳,同一人new_end不能重复
└ └ new_duration 请假时长,单位秒
apply_data.contents.control 控件类型。填示例中的值
apply_data.contents.id 控件id:控件的唯一id。填示例中的值

注释3

img img apply_data 取值参考

dev环境

当模板取值为加班时(templateId=C4RYzCPXZDSmHDvj2jCfYMBeSz9zVrBoYi3TqzZ7v),apply_data 取值如下:

"apply_data": {
      "contents": [
         {
                "control":"Date",
                "id":"item-item-1493800425749",
                "value":{
                    "date":{
                        "s_timestamp":"1660545012",
                        "type":"day"
                    }
                }
            },
            {
                "control":"Date",
                "id":"item-item-1493800431502",
                "value":{
                    "date":{
                        "s_timestamp":"1660631412",
                        "type":"day"
                    }
                }
            },
          {
              "control": "Textarea",
              "id": "item-1497581558567",
              "value": {
                  "text": "⽂本填写的内容"
              }
          },
          {
              "control": "Text",
              "id": "item-1497581575653",
              "value": {
                  "text": "⽂本填写的内容"
              }

          }
      ]
  }

test环境

当模板取值为出差时(templateId=C4RYzCUtbw5gYGF5ty3gzKec8vdEqmqzhHM47jRzR),apply_data 取值如下:

"apply_data": {
      "contents": [
         {
                "control":"Date",
                "id":"Date-1661153120688",
                "value":{
                    "date":{
                        "s_timestamp":"1660545012",
                        "type":"day"
                    }
                }
            },
            {
                "control":"Date",
                "id":"Date-1661153138657",
                "value":{
                    "date":{
                        "s_timestamp":"1660631412",
                        "type":"day"
                    }
                }
            },
          {
              "control": "Textarea",
              "id": "item-item-1493800414708",
              "value": {
                  "text": "⽂本填写的内容"
              }
          },
          {
              "control": "Text",
              "id": "Text-1661153152690",
              "value": {
                  "text": "⽂本填写的内容"
              }

          }
      ]
  }
参数 说明
date 日期/日期+时间内容
└ type 时间展示类型:day-日期;hour-日期+时间 ,和对应模板控件属性一致
└ s_timestamp 时间戳-字符串类型,在此填写日期/日期+时间控件的选择值,以此为准

注释4

img img apply_data 取值参考

dev环境

当模板取值为生产订单审批时(templateId=3WKhuwSeZKgvu9jfN5oeUEJ4LkZjbrV2z8JMJfPW),apply_data 取值如下:

"apply_data": {
    "contents": [
      {
        "control": "Text",
        "id": "Text-1660810781039",
        "value": {
          "text": "文本填写的内容加班时长"
        }
      },
      {
        "control": "Text",
        "id": "Text-1660810687843",
        "value": {
          "text": "文本填写的内容加班事由"
        }
      },
      {
        "control": "Text",
        "id": "Text-1660810805672",
        "value": {
          "text": "文本填写的内容加班时长"
        }
      },
      {
        "control": "Number",
        "id": "Number-1660810835156",
        "value": {
          "new_number": "123"
        }
      }
    ]
  }