package com.smartor.service.impl; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.DingTalkClient; import com.dingtalk.api.request.OapiGettokenRequest; import com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request; import com.dingtalk.api.request.OapiUserListidRequest; import com.dingtalk.api.response.OapiGettokenResponse; import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response; import com.dingtalk.api.response.OapiUserListidResponse; import com.smartor.domain.DingTalkReqVo; import com.smartor.service.DingTalkService; import com.smartor.service.IntelligenceCenterService; import com.taobao.api.ApiException; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; /** * 智能中心 * * @author ls * @date 2023-05-23 */ @Service public class DingTalkServiceImpl implements DingTalkService { @Value("${dingAppid}") private String dingAppid; @Value("${dingAppSecret}") private String dingAppSecret; @Override public Boolean sendNotification(DingTalkReqVo dingTalkReqVo) { Boolean result = false; // Log.info("发送钉钉通知"); String accessToken = null; try { accessToken = getAccessToken(); } catch (ApiException e) { e.printStackTrace(); } DingTalkClient client3 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/listid"); OapiUserListidRequest request2 = new OapiUserListidRequest(); request2.setDeptId(675909059L); // 设置要获取的部门 ID,这里以根部门为例 // 设置部门 ID,如果获取所有员工手机号,可以设置为根部门的 ID OapiUserListidResponse response2 = null; try { response2 = client3.execute(request2, accessToken); } catch (ApiException e) { e.printStackTrace(); } String body = response2.getBody(); // 解析为JSONObject JSONObject jsonObject = JSONObject.parseObject(body); // 提取出JSONArray JSONArray jsonArray = new JSONArray(jsonObject.getJSONObject("result").getJSONArray("userid_list")); // 将JSONArray转为List列表 String str = JSONObject.toJSONString(jsonArray); List list = JSONObject.parseObject(str, List.class); //userid数组 for (String urid : list) { DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2"); OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request(); request.setUseridList(urid); request.setAgentId(1779052814L); request.setToAllUser(false); List contents = dingTalkReqVo.getContents(); ArrayList objects = new ArrayList<>(); for (int i = 0; i < contents.size(); i++) { OapiMessageCorpconversationAsyncsendV2Request.Form formSeverityDesc = new OapiMessageCorpconversationAsyncsendV2Request.Form(); formSeverityDesc.setKey("问题" + i); formSeverityDesc.setValue(contents.get(i).toString()); objects.add(formSeverityDesc); } OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg(); msg.setOa(new OapiMessageCorpconversationAsyncsendV2Request.OA()); msg.getOa().setMessageUrl("www.baidu.com"); msg.getOa().setPcMessageUrl("www.baidu.com"); msg.getOa().setHead(new OapiMessageCorpconversationAsyncsendV2Request.Head()); msg.getOa().getHead().setText("待办事宜"); msg.getOa().getHead().setBgcolor("00409eff"); msg.getOa().setBody(new OapiMessageCorpconversationAsyncsendV2Request.Body()); msg.getOa().getBody().setTitle("尊敬的 " + "AAA" + "(项目经理)"); msg.getOa().getBody().setContent("待审批:" + "123" + "条"); msg.getOa().getBody().setForm(objects); msg.setMsgtype("oa"); request.setMsg(msg); // log.info("获取发送通知消息体和获取发送通知人完成"); OapiMessageCorpconversationAsyncsendV2Response response = null; try { response = client.execute(request, accessToken); } catch (ApiException e) { e.printStackTrace(); } // log.info("消息任务ID"+response.getTaskId()); System.out.println(response.getTaskId()); result = response.isSuccess(); } return result; } /** * 获取 access_token */ private String getAccessToken() throws ApiException { DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken"); OapiGettokenRequest request = new OapiGettokenRequest(); //Appkey request.setAppkey(dingAppid); //Appsecret request.setAppsecret(dingAppSecret); /*请求方式*/ request.setHttpMethod("GET"); OapiGettokenResponse response = client.execute(request); return response.getAccessToken(); } }