MrShi
2026-01-13 3a154bdb0a5aaa2c0ac3eac95a6ba747068bd454
server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalkStream.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,96 @@
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();
    }
}