Flowable钉钉对接001-人员同步

文章讲述了在企业业务系统中,如何通过集成钉钉SDK获取访问令牌,获取并同步用户信息,以实现在业务系统和钉钉上进行统一的待办任务审批。代码示例展示了获取用户ID和信息的方法,以及全量同步钉钉ID到用户表的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

企业中有自己的业务系统,审批都在业务系统中审批,如何结合移动办公的开放平台实现统一审批至关重要。

场景很简单,自己的系统中可以审批,钉钉上也可以审批,使用H5来适配,统一待办任务

目标:人员统一

实现相互之间可以创建待办,更新待办,删除待办
  • 第一 、集成钉钉的sdk

public OapiGettokenResponse getAccessToken() {
        Object accessToken = PlatformLocalCache.get(ACCESS_TOKEN);
        if (accessToken != null) {
            return (OapiGettokenResponse) accessToken;
        }
        DefaultDingTalkClient client = new DefaultDingTalkClient(DingtalkUrlConstant.URL_GET_TOKEN);
        OapiGettokenRequest request = new OapiGettokenRequest();
        request.setAppkey(dingtalkProperties.getAppKey());
        request.setAppsecret(dingtalkProperties.getAppSecret());
        request.setHttpMethod("GET");
        OapiGettokenResponse response = null;
        try {
            response = client.execute(request);
            if (response.isSuccess()) {
                PlatformLocalCache.put(ACCESS_TOKEN, response);
            }
        } catch (ApiException e) {
            log.error("getAccessToken failed", e);
        }
        return response;
    }

    @Override
    public OapiV2UserGetbymobileResponse getUserIdByMobile(String mobile) {
        OapiGettokenResponse accessToken = this.getAccessToken();
        DingTalkClient client = new DefaultDingTalkClient(DingtalkUrlConstant.URL_GETBY_MOBILE);
        OapiV2UserGetbymobileRequest req = new OapiV2UserGetbymobileRequest();
        req.setMobile(mobile);
        OapiV2UserGetbymobileResponse rsp = null;
        try {
            rsp = client.execute(req, accessToken.getAccessToken());
        } catch (ApiException e) {
            log.error("getUserIdByMobile failed", e);
        }
        return rsp;
    }

    @Override
    public OapiV2UserGetResponse getUserInfoByMobile(String mobile) {
        OapiV2UserGetbymobileResponse response = this.getUserIdByMobile(mobile);
        if (response.isSuccess()) {
            String userid = response.getResult().getUserid();
            OapiV2UserGetResponse userInfo = this.getUserInfoByUserId(userid);
            return userInfo;
        }
        return null;
    }

    @Override
    public OapiV2UserGetResponse getUserInfoByUserId(String userId) {
        OapiGettokenResponse accessToken = this.getAccessToken();
        DingTalkClient client = new DefaultDingTalkClient(DingtalkUrlConstant.URL_GETUSERINFOBY_USERID);
        OapiV2UserGetRequest req = new OapiV2UserGetRequest();
        req.setUserid(userId);
        OapiV2UserGetResponse rsp = null;
        try {
            rsp = client.execute(req, accessToken.getAccessToken());
        } catch (ApiException e) {
            log.error("getUserInfoByUserId failed", e);
        }
        return rsp;
    }
  • 第二 、全量同步钉钉的id到用户表中

public void syncUserInfo() {
        List<User> users = userService.getAll(null);
        users.forEach(user -> {
            if (StringUtils.isNotBlank(user.getMobile())) {
                OapiV2UserGetResponse response = dingtalkSdkService.getUserInfoByMobile(user.getMobile());
                if (response.isSuccess()) {
                    String unionid = response.getResult().getUnionid();
                    //TODO 更新用户的这个字段
                }
                try {
                    Thread.sleep(500);
                } catch (Exception e) {
                    log.error("休眠失败", e);
                }
            }
        });
    }
### 如何将Flowable钉钉集成 #### 流程转换函数实现 为了使Flowable能够处理来自钉钉的设计模型并将其转化为可执行的工作流,可以采用JavaScript编写一个用于转换的前端方法。此方法接收由钉钉提供的流程模型作为输入参数,并通过调用`ddToBpmnXml`函数来获取对应的BPMN XML字符串表示形式[^2]。 ```javascript const converterBpmn = () => { const processModel = { code: pCode.value, name: pName.value, icon: {name: 'el:HomeFilled', color: '#409EFF'}, process: props.process, enable: true, version: 1, sort: 0, groupId: '', remark: '' }; ddToBpmnXml(processModel).then(res => { console.log("ddToBpmnXml res", res); processView.title = pName.value; processView.index = pCode.value; processView.xmlData = res.result; processView.open = true; }); }; ``` 上述代码片段展示了如何构建一个过程对象并将之传递给`ddToBpmnXml`异步函数以获得XML数据的结果。一旦成功解析返回的数据,则更新视图组件的状态以便显示新创建或修改后的业务流程定义。 #### 工作流管理平台的选择 对于希望简化这一集成工作的开发者来说,可以选择已经集成了Flowable并与Vue框架兼容的应用程序模板,比如RuoYi-flowable或是更为先进的KonBAI/RuoYi-Flowable-Plus版本。后者不仅提供在线表单设计功能还增强了工作流设计器的功能性,使得用户无需离开浏览器即可完成复杂的流程建模操作[^1]。 #### 开发实践指导 初次接触此类技术栈的人士建议先尝试一些基本的例子去掌握Flowable的基础特性以及它同其他前后端组件之间的交互方式;而对于那些计划针对具体应用场景做定制化开发的人来说,则应该重点研究BPMN 2.0标准及其语法结构,因为这是理解和操纵任何基于Flowable系统的基石所在。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小学生05101

flowable

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值