package com.doumee.core.dingTalk; import com.dingtalk.open.app.api.GenericEventListener; import com.dingtalk.open.app.api.OpenDingTalkStreamClientBuilder; import com.dingtalk.open.app.api.message.GenericOpenDingTalkEvent; import com.dingtalk.open.app.api.security.AuthClientCredential; import com.dingtalk.open.app.stream.protocol.event.EventAckStatus; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.utils.Constants; import com.doumee.dao.business.dao.CompanyMapper; import com.doumee.dao.business.dao.MemberMapper; import com.doumee.service.business.CompanyService; import com.doumee.service.business.MemberService; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.mp.config.WxMpConfigStorage; import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import shade.com.alibaba.fastjson2.JSONObject; /** * 钉钉 订阅事件通知 * * @Author : Rk * @create 2025/9/24 17:14 */ @Slf4j @Configuration public class DingTalkStream { @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private MemberService memberService; @Autowired private CompanyService companyService; @Bean public void DingTalkStreamRun() throws Exception { String appKey = systemDictDataBiz.queryByCode(Constants.DD_TALK,Constants.APP_KEY).getCode(); String appSecret = systemDictDataBiz.queryByCode(Constants.DD_TALK,Constants.APP_SECRET).getCode(); OpenDingTalkStreamClientBuilder .custom() .credential(new AuthClientCredential(appKey, appSecret)) //注册事件监听 .registerAllEventListener(new GenericEventListener() { @Override public EventAckStatus onEvent(GenericOpenDingTalkEvent event) { try { //事件唯一Id String eventId = event.getEventId(); log.error("钉钉推送事件Id:{}"+eventId); //事件类型 String eventType = event.getEventType(); log.error("钉钉推送事件类型:{}"+eventType); // org_dept_create 部门新建 {"timeStamp":"1758783935796","eventId":"0c779adba04143958a3960e8e36bbce5","deptId":[1040735458]} // org_dept_modify 部门修改 {"timeStamp":"1758785791639","eventId":"6c2d8c7a61a7419e8928fda3effb3bf4","deptId":[1040735458]} // org_dept_remove 部门删除 {"timeStamp":"1758785817760","eventId":"47e289f334e041719ed354052da474de","deptId":[1040735458]} // user_add_org 员工添加 // user_modify_org 员工修改 {"timeStamp":"1758786235842","diffInfo":[{"prev":{"extFields":"{}","hiredDate":"2022-03-30","name":"任康","telephone":"145","remark":"","workPlace":"莲花科创园 F401","jobNumber":"","email":"rk@doumee.com"},"curr":{"extFields":"{}","hiredDate":"2022-03-30","name":"任康","telephone":"145","remark":"","workPlace":"莲花科创园 F401","jobNumber":"","email":"rk@doumee.com"},"userid":"1568490244651036"}],"eventId":"e54d8991aed14c669e22e460459433f6","optStaffId":"045831294126209983","userId":["1568490244651036"]} // user_leave_org 员工删除 //事件产生时间 Long bornTime = event.getEventBornTime(); log.error("钉钉推送事件产生时间:{}"+bornTime); //获取事件体 JSONObject bizData = event.getData(); log.error("钉钉推送事件详情:{}"+bizData); if(eventType.startsWith("org")){ companyService.ddPushCompanyInfo(eventType,bizData); }else if(eventType.startsWith("user")){ memberService.ddPushMemberInfo(eventType,bizData); } //处理事件 // process(bizData); //消费成功 return EventAckStatus.SUCCESS; } catch (Exception e) { //消费失败 return EventAckStatus.LATER; } } }) .build().start(); } }