| 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(); | 
|     } | 
|   | 
|   | 
|   | 
| } |