java提交钉钉审批的一个流程例子

简介: java提交钉钉审批的一个流程例子

这个例子通过自己定义流程,根据钉钉定义的流程表单来实现

首先需要进行钉钉api流程接口实现

package com.nbcio.modules.estar.controller;
import com.alibaba.fastjson.JSON;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.*;
import com.dingtalk.api.response.*;
import com.nbcio.modules.estar.config.Constant;
import com.nbcio.modules.estar.config.URLConstant;
import com.nbcio.modules.estar.model.ProcessInstanceInputVO;
import com.nbcio.modules.estar.util.AccessTokenUtil;
import com.nbcio.modules.estar.util.LogFormatter;
import com.nbcio.modules.estar.util.ServiceResult;
import com.nbcio.modules.estar.util.ServiceResultCode;
import com.nbcio.modules.estar.util.LogFormatter.LogEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
import java.util.*;
/**
 * 企业 E应用审批解决方案示例代码
 * 实现了审批的基础功能
 * 内网穿透工具地址:https://open-doc.dingtalk.com/microapp/debug/ucof2g
 * 待办接口地址:https://open-doc.dingtalk.com/microapp/serverapi2/gdzay4
 */
@RestController
public class WorkRecordController {
    private static final Logger bizLogger = LoggerFactory.getLogger(WorkRecordController.class);
    private volatile Map<String, String> localCache  = new HashMap<String, String>();
    /**
     * 发起待办事项
     * 文档地址:https://open-doc.dingtalk.com/microapp/serverapi2/gdzay4
     */
    @RequestMapping(value = "/workrecord/start", method = RequestMethod.POST)
    @ResponseBody
    public ServiceResult<String> startWorkRecord() {
        try {
            String userId = "manager7078";
            DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/workrecord/add");
            OapiWorkrecordAddRequest req = new OapiWorkrecordAddRequest();
            req.setUserid(userId);
            req.setCreateTime(System.currentTimeMillis());
            req.setTitle("title");
            String id = userId + System.currentTimeMillis();
            req.setUrl(Constant.CALLBACK_URL_HOST + "/workrecord/" + id + "/update");
            List<OapiWorkrecordAddRequest.FormItemVo> list2 = new ArrayList<>();
            OapiWorkrecordAddRequest.FormItemVo obj3 = new OapiWorkrecordAddRequest.FormItemVo();
            list2.add(obj3);
            obj3.setTitle("标题");
            obj3.setContent("内容");
            OapiWorkrecordAddRequest.FormItemVo obj4 = new OapiWorkrecordAddRequest.FormItemVo();
            list2.add(obj4);
            obj4.setTitle("发起时间");
            obj4.setContent(String.valueOf(System.currentTimeMillis()));
            req.setFormItemList(list2);
            OapiWorkrecordAddResponse rsp = client.execute(req, AccessTokenUtil.getToken());
            System.out.println(JSON.toJSONString(rsp));
            if (rsp.getErrcode().longValue() != 0) {
                return ServiceResult.failure(String.valueOf(rsp.getErrorCode()), rsp.getErrmsg());
            }
            localCache.put(id, rsp.getRecordId());
            return ServiceResult.success(rsp.getRecordId());
        } catch (Exception e) {
            String errLog = LogFormatter.getKVLogData(LogEvent.END,"startWorkRecord fail");
            bizLogger.info(errLog,e);
            return ServiceResult.failure(ServiceResultCode.SYS_ERROR.getErrCode(),ServiceResultCode.SYS_ERROR.getErrMsg());
        }
    }
    /**
     * 发起待办事项
     * 文档地址: https://open-doc.dingtalk.com/microapp/serverapi2/sltmwf
     */
    @RequestMapping(value = "/workrecord/{id}/update", method = RequestMethod.GET)
    @ResponseBody
    public String updateWorkRecord(@PathVariable String id) {
        try {
            if (!localCache.containsKey(id)) {
                return "can't find the workrecord";
            }
            String recordId = localCache.get(id);
            DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/workrecord/update");
            OapiWorkrecordUpdateRequest req = new OapiWorkrecordUpdateRequest();
            req.setUserid("manager7078");
            req.setRecordId(recordId);
            OapiWorkrecordUpdateResponse response = client.execute(req, AccessTokenUtil.getToken());
            System.out.println(JSON.toJSONString(response));
            if (response.getErrcode().longValue() != 0) {
                return "update workrecord fail";
            }
            return "待办事项更新完成";
        } catch (Exception e) {
            String errLog = LogFormatter.getKVLogData(LogEvent.END,"updateWorkRecord fail");
            bizLogger.info(errLog,e);
            return "update workrecord fail";
        }
    }
    /**
     * 获取待办事项
     * 文档地址:https://open-doc.dingtalk.com/microapp/serverapi2/ehn6bt
     * @return
     */
    @RequestMapping(value = "/workrecord/get", method = RequestMethod.GET)
    @ResponseBody
    public ServiceResult getWorkRecordByUserId() {
        try {
            DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/workrecord/getbyuserid");
            OapiWorkrecordGetbyuseridRequest req = new OapiWorkrecordGetbyuseridRequest();
            req.setUserid("manager7078");
            req.setOffset(0L);
            req.setLimit(50L);
            req.setStatus(0L);
            OapiWorkrecordGetbyuseridResponse rsp = client.execute(req, AccessTokenUtil.getToken());
            System.out.println(rsp.getBody());
            return ServiceResult.success(rsp.getRecords());
        } catch (Exception e) {
            return ServiceResult.failure(ServiceResultCode.SYS_ERROR.getErrCode(),ServiceResultCode.SYS_ERROR.getErrMsg());
        }
    }
}

定义好流程

进行审批单定义

提交钉钉审批

手机端收到的信息


相关文章
|
6月前
|
前端开发 Java API
2025 年 Java 全栈从环境搭建到项目上线实操全流程指南:Java 全栈最新实操指南(2025 版)
本指南涵盖2025年Java全栈开发核心技术,从JDK 21环境搭建、Spring Boot 3.3实战、React前端集成到Docker容器化部署,结合最新特性与实操流程,助力构建高效企业级应用。
1991 1
|
6月前
|
消息中间件 Java Kafka
Java 事件驱动架构设计实战与 Kafka 生态系统组件实操全流程指南
本指南详解Java事件驱动架构与Kafka生态实操,涵盖环境搭建、事件模型定义、生产者与消费者实现、事件测试及高级特性,助你快速构建高可扩展分布式系统。
333 7
|
6月前
|
消息中间件 Java 数据库
Java 基于 DDD 分层架构实战从基础到精通最新实操全流程指南
本文详解基于Java的领域驱动设计(DDD)分层架构实战,结合Spring Boot 3.x、Spring Data JPA 3.x等最新技术栈,通过电商订单系统案例展示如何构建清晰、可维护的微服务架构。内容涵盖项目结构设计、各层实现细节及关键技术点,助力开发者掌握DDD在复杂业务系统中的应用。
1224 0
|
6月前
|
Java 编译器
Java 17 Switch表达式:更简洁、更强大的流程控制
Java 17 Switch表达式:更简洁、更强大的流程控制
778 111
|
6月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
748 64
|
6月前
|
JavaScript 安全 前端开发
Java开发:最新技术驱动的病人挂号系统实操指南与全流程操作技巧汇总
本文介绍基于Spring Boot 3.x、Vue 3等最新技术构建现代化病人挂号系统,涵盖技术选型、核心功能实现与部署方案,助力开发者快速搭建高效、安全的医疗挂号平台。
338 3
|
7月前
|
安全 Java 测试技术
Java 项目实战中现代技术栈下代码实现与测试调试的完整流程
本文介绍基于Java 17和Spring技术栈的现代化项目开发实践。项目采用Gradle构建工具,实现模块化DDD分层架构,结合Spring WebFlux开发响应式API,并应用Record、Sealed Class等新特性。测试策略涵盖JUnit单元测试和Testcontainers集成测试,通过JFR和OpenTelemetry实现性能监控。部署阶段采用Docker容器化和Kubernetes编排,同时展示异步处理和反应式编程的性能优化。整套方案体现了现代Java开发的最佳实践,包括代码实现、测试调试
252 0
|
11月前
|
存储 弹性计算 安全
课时23:案例分享——钉钉
钉钉作为企业级产品,采用SaaS平台技术,依托阿里云的ECS、OSS等服务,实现快速部署与客户需求的高效适应。其数据存储于阿里云RDS中,确保安全性和可靠性,并通过高强度加密保障信息传输安全。阿里云的安全防护措施为钉钉提供了坚实后盾,使其能专注于优化和创新,提升用户体验。
348 0
|
存储 弹性计算 安全
成功案例-钉钉 | 学习笔记
快速学习 成功案例-钉钉
622 0