Php实现钉钉OA一级审批,二级审批

news/2024/11/2 11:31:20/

Php实现钉钉OA一级审批,二级审批
一级审批

php"> public function oaPush($user_id,$person,$data){//测试数据,上线需要删除$user_id = '154502333155';//发起人$person = ['154502665555'];//审批人$len = count($person);$result = null;if($len>0){$approve_config = DingApproveConfig::where("type", 8)->first();$url = $approve_config->url;$rep['originatorUserId']    = $user_id;$rep['processCode']         = $approve_config->processCode;$type = $len>1?'AND':'NONE';$rep['approvers'][]         = ['actionType'=>$type,'userIds'=>$person];$rep['microappAgentId']     = env("DD_AGENT_ID");$rep['formComponentValues'] = $data;$result = $this->oaCurl($url,$rep);}return $result;}

一级审批

php">public function oaPush2l($user_id,$person,$data){//测试数据,上线需要删除$user_id = '154502333155';//发起人$person = ['154502333155','013359400664'];//审批人$len = count($person);$result = null;if($len>0){// 审批人,按照顺序审批$arr = [];foreach ($person as $key => $value) {$level2 = [];$level2['actionType'] = "NONE";$level2['userIds'] = [$value];array_push($arr, $level2);}$approve_config = DingApproveConfig::where("type", 9)->first();$url = $approve_config->url;$rep['originatorUserId']    = $user_id;$rep['processCode']         = $approve_config->processCode;$rep['approvers']           = $arr;$rep['microappAgentId']     = env("DD_AGENT_ID");$rep['formComponentValues'] = $data;$result = $this->oaCurl($url,$rep);}return $result;}

区别在于参数: approvers

一级审批传入的是:

php">$type = $len>1?'AND':'NONE';
$rep['approvers'][]  = ['actionType'=>$type,'userIds'=>$person];
  'AND' 是两个人以审批,同时收到,然后同时通过才算通过。

二级审批传入的是

php">array:2 [0 => array:2 ["actionType" => "NONE""userIds" => array:1 [0 => "154502335555"]]1 => array:2 ["actionType" => "NONE""userIds" => array:1 [0 => "01335926400664"]]
]
php"> $rep['approvers'] = $arr;
php">public function oaCurl($url,$data){$ding = new Dingd();$access_token = $ding->getDingdAccessToken(env('DD_APPKEY_COM'),env('DD_APPSECRET_COM'));$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));curl_setopt($ch, CURLOPT_REFERER, '');curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt( $ch,CURLOPT_HTTPHEADER, array('Content-Type: application/json','x-acs-dingtalk-access-token:' . $access_token));curl_setopt($ch, CURLOPT_TIMEOUT, 30);$result = curl_exec($ch);curl_close($ch);$result = mb_convert_encoding($result, 'UTF-8','UTF-8 ,GBK, GB2312, BIG5');return json_decode($result,true);}

钉钉回调处理
app\Jobs

php">public function handle(){// 钉钉审批事件$config = DingApproveConfig::where("type", 4)->first();$code= $config->processCode;if ($this->type == "bpms_task_change") {if (isset($this->res['result'])) {// 有result才有返回结果if($this->res['processCode']==$paper_code){//对数据库进行处理}}}if ($this->type == 'bpms_instance_change') {if (isset($this->res['result'])) {// 有result才有返回结果if ($this->res['processCode'] == $code) {//对数据库进行处理}}if ($this->res['type'] === 'terminate') {// 审批撤回if ($this->res['processCode'] == $code) {//对数据库进行处理}}}}

http://www.ppmy.cn/news/1543854.html

相关文章

开源趣味艺术画板Paint Board

什么是 Paint Board ? Paint Board 是简洁易用的 Web 端创意画板。它集成了多种创意画笔和绘画功能,支持形状绘制、橡皮擦、自定义画板等操作,并可以将作品保存为图片。 软件功能: 不过非常可惜,老苏最期待的数据同步还…

躺平成长-下一个更新的数据(躺平成长数据显示核心)

旭日图(Sunburst Chart)是一种用于展示具有层次结构数据的可视化图表。 它起源于饼图和环形图,并随着数据可视化需求的发展而演变。 旭日图通过将层次结构数据以由内向外的同心圆环形式展示,使数据的层次关系更加清晰直观。 以下…

golang的RSA加密解密

参考:https://blog.csdn.net/lady_killer9/article/details/118026802 1.加密解密工具类PasswordUtil.go package utilimport ("crypto/rand""crypto/rsa""crypto/x509""encoding/pem""fmt""log"&qu…

分享一个生成二维码的js

生成二维码js https://pan.quark.cn/s/826a69dba5b3 提取码:WrrC 生成二维码js,并可设置边距border https://pan.quark.cn/s/18251a515fb2 提取码:psSr 在线生成二维码:https://www.51bj.top/tools/qrcode.html

如何实现图片懒加载,原生 + React 实现方式

前言 有时候列表存在许多图片,那么一次性加载会阻塞 http 请求,为了避免在可视窗口之外的元素进行不必要的图片加载,可以尝试使用懒加载进行优化。懒加载可以显著提高页面加载性能,特别是当页面包含大量图片时。为了实现延迟加载…

深度学习中的核心概念详解

目录 前言1. 深度神经网络与残差网络1.1 深度神经网络的挑战1.2 残差网络的提出与实现1.3 残差网络的作用 2. 词向量:语义理解的基础2.1 词向量的基本概念2.2 词向量的实现方法与作用 3. 对象嵌入:从词向量到对象表示3.1 对象嵌入的概念3.2 对象嵌入的应…

【SSM详细教程】-15-Spring Restful风格【无敌详细】

精品专题: 01.《C语言从不挂科到高绩点》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. 《SpringBoot详细教程》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12789841.html?spm1001.20…

聊一聊Elasticsearch的基本原理与形成机制

1、搜索引擎的基本原理 通常搜索引擎包括:数据采集、文本分析、索引存储、搜索等模块,它们之间的协作流程如下图: 数据采集模块负责采集需要搜索的数据源。 文本分析模块是将结构化数据中的长文本切分成有实际意义的词,这样用户…