创建钉钉审批流实例

1、依赖

<!--钉钉 api -->
<dependency><groupId>com.aliyun</groupId><artifactId>dingtalk</artifactId><version>2.0.14</version>
</dependency>
<!--钉钉 事件订阅-->
<dependency><groupId>com.dingtalk.open</groupId><artifactId>app-stream-client</artifactId><version>1.3.2</version>
</dependency>

2、参数

@Configuration
@ConfigurationProperties(prefix = InterfaceProperties.PREFIX)
@Setter
@Getter
public class InterfaceProperties {public static final String PREFIX = "interface";private String dingDingEnable;private String appKey;private String appSecret;private Long agentId;
}

3、获取Token

public String getToken() {try {com.aliyun.dingtalkoauth2_1_0.Client client = new com.aliyun.dingtalkoauth2_1_0.Client(DingDingImpl.createConfig());com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest getAccessTokenRequest = new com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest().setAppKey(interfaceProperties.getAppKey()).setAppSecret(interfaceProperties.getAppSecret());com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponse res = client.getAccessToken(getAccessTokenRequest);com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponseBody body = res.body;return body.getAccessToken();} catch (TeaException err) {log.error(err.code + err.message);} catch (Exception e) {log.error("获取token异常:", e);TeaException err = new TeaException(e.getMessage(), e);log.error(err.code + err.message);}return null;}

4、发起钉钉流程返回实例id

public String sendData(String originatorUserId, String processCode, Long deptId, List<FormComponentValuesDto> param) {String token = this.getToken();if (null == token) {throw new BusinessException("接口Token获取失败");}List<StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues> formComponentValues = paramToEntity(param);try {com.aliyun.dingtalkworkflow_1_0.Client client = new com.aliyun.dingtalkworkflow_1_0.Client(DingDingImpl.createConfig());com.aliyun.dingtalkworkflow_1_0.models.StartProcessInstanceHeaders startProcessInstanceHeaders = new com.aliyun.dingtalkworkflow_1_0.models.StartProcessInstanceHeaders();startProcessInstanceHeaders.xAcsDingtalkAccessToken = token;StartProcessInstanceRequest startProcessInstanceRequest = new StartProcessInstanceRequest()//应用标识AgentId.setMicroappAgentId(interfaceProperties.getAgentId())//审批发起人的userId 必填.setOriginatorUserId(originatorUserId)//审批流的唯一码。process_code在审批模板编辑页面的URL中获取 必填.setProcessCode(processCode)//审批发起人所在的部门ID.setDeptId(deptId)//不使用审批流模板时,直接指定的审批人列表,最大列表长度:20.setApprovers(null)//使用审批流模板时,流程预测结果中节点规则上必填的自选操作人列表,最大列表长度:20.setTargetSelectActioners(null)//表单数据内容,控件列表,最大列表长度:150 必填.setFormComponentValues(formComponentValues);StartProcessInstanceResponse response = client.startProcessInstanceWithOptions(startProcessInstanceRequest, startProcessInstanceHeaders, new RuntimeOptions());StartProcessInstanceResponseBody body = response.body;responseContent = body.instanceId;return body.instanceId;} catch (TeaException err) {log.error(err.code + err.message);} catch (Exception e) {log.error("发起钉钉流程异常:", e);TeaException err = new TeaException(e.getMessage(), e);log.error(err.code + err.message);} throw new BusinessException("钉钉审批实例创建异常");}@Data
@EqualsAndHashCode
public class FormComponentValuesDto {@ApiModelProperty(value = "控件名称")@NotBlankpublic String name;@ApiModelProperty(value = "控件值")@NotBlankpublic String value;@ApiModelProperty(value = "控件类型")public String componentType;
}

5、钉钉事件订阅–OA审批

@Slf4j
@Component
public class DingDingEventListener implements InitializingBean {@Resourceprivate InterfaceProperties interfaceProperties;@Resourceprivate DingDingInterface dingDingInterface;@Overridepublic void afterPropertiesSet() {try {OpenDingTalkStreamClientBuilder.custom().credential(new AuthClientCredential(interfaceProperties.getAppKey(), interfaceProperties.getAppSecret()))//注册事件监听.registerAllEventListener(new GenericEventListener() {public EventAckStatus onEvent(GenericOpenDingTalkEvent event) {try {if ("bpms_task_change".equals(event.getEventType())) {//获取事件体JSONObject bizData = event.getData();//处理事件log.info(event.getEventType() + bizData.toString());//保存审批记录.....}//审批实例开始,结束if ("bpms_instance_change".equals(event.getEventType())) {//获取事件体JSONObject bizData = event.getData();//处理事件log.info(event.getEventType() + bizData.toString());//保存审批记录.....}return EventAckStatus.SUCCESS;} catch (Exception e) {log.error("钉钉订阅事件保存异常", e);//消费失败return EventAckStatus.LATER;}}}).build().start();} catch (Exception e) {log.error("钉钉事件订阅异常", e);}}
}

6、参数获取

1、审批模板唯一ID

在这里插入图片描述### 2、AppKey 、AppSecret
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2981386.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

32 信号入门

重点 1.掌握linux信号的基本概念 2.掌握信号产生的一般方式 3.理解信号递达和阻塞的概念&#xff0c;原理 4.掌握信号捕捉的一般形式 5.重新了解可重入函数的概念 6.了解竞态条件的情景和处理方式 7.了解SIGCHLD信号&#xff0c;重新编写信号处理函数的一般处理机制 目录 1.…

网络研讨会 | 数据中心中的人工智能

人工智能&#xff08;AI&#xff09;是嵌入式开发人员必须解决的最复杂的技术之一。将其集成到您的系统中会带来很多问题而不是很多答案。行业媒体Embedded Computing Design特地推出“工程师的人工智能集成指南”月度网络研讨会系列&#xff0c;目的是尽可能地简化嵌入式计算设…

[SWPUCTF 2022 新生赛]ez_ez_unserialize

要绕过wakeup函数&#xff0c;只要序列化的中的成员数大于实际成员数&#xff0c;即可绕过。 <?php class X {public $x fllllllag.php; }$anew X(); echo serialize($a); O:1:“X”:1:{s:1:“x”;s:13:“fllllllag.php”;} 修改为 O:1:“X”:3:{s:1:“x”;s:13:“flllll…

自动化立体库安全使用管理制度

导语 大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;老K。专注分享智能仓储物流技术、智能制造等内容。 新书《智能物流系统构成与技术实践》 完整版文件和更多学习资料&#xff0c;请球友到知识星球 【智能仓储物流技术研习社】自行下载 关于自动化立体库安…

如何看待AIGC技术

介绍 AIGC技术&#xff08;人工智能、互联网、物联网、大数据和云计算&#xff09;是指结合人工智能、互联网、物联网、大数据和云计算等技术&#xff0c;形成一个综合的技术体系。以下是一些观点&#xff0c;可供参考&#xff1a; • 创新和发展&#xff1a; AIGC技术…

北京筑龙当选中招协第二届招标采购数字化专业委员会执行主任单位

4月18-19日&#xff0c;中国招标投标协会&#xff08;以下简称中招协&#xff09;2024年年会在宁波召开&#xff0c;北京筑龙作为中招协理事会员单位受邀出席会议。会议期间举行了“电子招标采购专业委员会换届会议暨第二届第一次工作会议”&#xff0c;北京筑龙当选第二届招标…

MySQL--对于库的操作对于表的操作

一、库的查看创建删除 库的查看 show databases; 库的创建&#xff08;创建一个test1数据库&#xff09; create database test1; 同样&#xff0c;我们另起一个root会话&#xff0c;并执行 cd /var/lib/mysql 然后发现多了一个test1目录 删除库&#xff08;删除test1数…

消息队列 Kafka 入门篇(二) -- 安装启动与可视化工具

一、Windows 10 环境安装 1、下载与解压 首先&#xff0c;访问Apache Kafka的官方下载地址&#xff1a; https://kafka.apache.org/downloads 在本教程中&#xff0c;我们将使用kafka_2.13-2.8.1版本作为示例。下载完成后&#xff0c;解压到您的工作目录的合适位置&#xff…

操作系统—系统调用(实验)

文章目录 系统调用1.实验目标2.实验过程记录(1).理解系统调用接口(2).阅读argraw、argint、argaddr和argstr(3).理解系统调用的解耦合实现方式(4).wait系统调用的非阻塞选项实现(5).yield系统调用的实现 3.存在的问题及解决方案实验小结 系统调用 1.实验目标 阅读并了解xv6内核…

酷开科技逐步为用户构建健全的智慧家庭生活场景

大规模与精细化人群技术则是通过大量的计算能力和精细化的运营能力&#xff0c;建立用户专属数据储存区域&#xff0c;使得用户在使用不同电视的观影偏好和兴趣能够能够得以延续。 不拘泥于自有品牌终端数量&#xff0c;酷开系统除了集成在创维电视上&#xff0c;还服务于飞利…

http是什么?http的基础知识教程详解(2024-04-24)

1、http的概念 HTTP&#xff08;超文本传输协议&#xff0c;HyperText Transfer Protocol&#xff09;是一种用于分布式、协作式、超媒体信息系统的应用层协议。 HTTP 是万维网&#xff08;WWW&#xff09;的数据通信的基础&#xff0c;设计目的是确保客户端与服务器之间的通…

CUDA的开发框架

CUDA的开发框架主要提供了一系列工具和库&#xff0c;使得开发者可以充分利用NVIDIA GPU进行高效的并行计算。以下是CUDA开发框架的一些关键组成部分。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.CUDA核心库&#xff1a;这些是构…

苍穹外卖day11 Apache ECharts 数据统计-图形报表

文章目录 前言一、Apache ECharts二、营业额统计1. 业务规则2. 接口设计3. 代码实现 三、用户统计1. 业务规则2. 接口设计3. 代码实现 四、订单统计1. 业务规则2. 接口设计3. 代码实现 五、销量排名Top101. 业务规则2. 接口设计3. 代码实现 前言 作为后端开发人员使用Echarts&…

2024年阿里云新用户购买云服务器,六大优惠活动介绍

假如你是一个初次购买阿里云服务器产品的新手用户&#xff0c;在购买阿里云服务器过程中如果直接注册账号然后通过云服务器ECS产品页下单购买可能会多花很多钱&#xff0c;作为一个老用户&#xff0c;有必要把这2024年新手用户必须了解的六大优惠活动介绍给大家&#xff0c;让大…

护眼灯到底有用吗?必选机型护眼灯十大品牌推荐

护眼灯到底有用吗&#xff1f;答案是有用的。护眼灯不是智商税&#xff0c;尤其对有娃、爱玩游戏的人士。儿童青少年近视率高&#xff0c;学习环境照明影响大。普通灯光不足以满足需求&#xff0c;蓝光频闪加剧用眼疲劳&#xff0c;导致近视。选择适合孩子的护眼灯至关重要&…

Linux--内核移植(二)移植流程及驱动修改

本文来总结一下如何将 NXP 官方提供的 Linux 内核移植到正点原子的 I.MX6U-ALPHA 开发板上。 一、官方开发板内核测试 NXP 提供的 Linux 源码肯定是可以在自己的 I.MX6ULL EVK 开发板上运行下去的&#xff0c;所以我们肯定是以 I.MX6ULL EVK 开发板为参考&#xff0…

AWVS的使用

AWVS的使用 1、使用docker拉取AWVS的镜像 docker pull secfa/docker-awvs 2.使用AWVS docker run -it -d -p 13443:3443 --cap-add LINUX_IMMUTABLE secfa/docker-awvs 3.访问 4.输入账号密码 https://hub.docker.com/r/secfa/docker-awvs 找到账号密码 username:adminadmin.…

OpenCV如何实现拉普拉斯算子的离散模拟

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV的Sobel 衍生品 下一篇 &#xff1a;OpenCV 如何实现边缘检测器 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 Laplacian&#xff08;&#xff09; 实…

Django模型继承之多表继承

在Django模型继承中&#xff0c;支持的第二种模型继承方式是层次结构中的每个模型都是一个单独的模型。每个模型都指向分离的数据表&#xff0c;并且可以被独立查询和创建。在继承关系中&#xff0c;子类和父类之间通过一个自动创建的OneToOneField进行连接。示例代码如下&…

NCF29A1 高端阻抗匹配

一、前言 Class E 高端 L-Front 匹配集成了额外的滤波器&#xff0c;提供了足够的谐波衰减&#xff0c;使 NCF29A1 与天线在比基频更高的频率下具有相当大的增益。向 PA 提供的阻抗和输出电容与表 1 ZPAOUT 所示相同。 二、原理图 图 1 高端 L-Front 匹配原理图 1&#xff…