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.request.OapiV2UserGetbymobileRequest; import com.dingtalk.api.response.OapiGettokenResponse; import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response; import com.dingtalk.api.response.OapiUserListidResponse; import com.dingtalk.api.response.OapiV2UserGetbymobileResponse; import com.ruoyi.common.utils.StringUtils; import com.smartor.domain.DingTalkReqVo; import com.smartor.service.DingTalkService; import com.taobao.api.ApiException; import lombok.extern.log4j.Log4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * 智能中心 * * @author ls * @date 2023-05-23 */ @Service @Log4j public class DingTalkServiceImpl implements DingTalkService { @Value("${dingAppid}") private String dingAppid; @Value("${dingAppSecret}") private String dingAppSecret; @Override public Boolean sendNotification(DingTalkReqVo dingTalkReqVo) { String body = null; List userIdlist = new ArrayList(); Boolean result = false; log.info("发送钉钉通知"); String accessToken = null; try { accessToken = getAccessToken(); } catch (ApiException e) { e.printStackTrace(); } if (StringUtils.isNotEmpty(dingTalkReqVo.getNumber())) { DingTalkClient clientT = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getbymobile"); OapiV2UserGetbymobileRequest req = new OapiV2UserGetbymobileRequest(); req.setMobile(dingTalkReqVo.getNumber()); OapiV2UserGetbymobileResponse rsp = null; try { rsp = clientT.execute(req, accessToken); body = rsp.getBody(); String jsonObject = JSONObject.parseObject(body).getJSONObject("result").get("userid").toString(); userIdlist.add(jsonObject); } catch (ApiException e) { e.printStackTrace(); } } else { DingTalkClient client3 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/listid"); OapiUserListidRequest request2 = new OapiUserListidRequest(); request2.setDeptId(dingTalkReqVo.getDeptId()); // 设置要获取的部门 ID,这里以根部门为例675909059L // 设置部门 ID,如果获取所有员工手机号,可以设置为根部门的 ID OapiUserListidResponse response2 = null; try { response2 = client3.execute(request2, accessToken); } catch (ApiException e) { e.printStackTrace(); } 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); userIdlist = JSONObject.parseObject(str, List.class); } //userid数组 for (String urid : userIdlist) { 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++) { ConcurrentHashMap map = contents.get(i); for (Map.Entry entry : map.entrySet()) { OapiMessageCorpconversationAsyncsendV2Request.Form formSeverityDesc = new OapiMessageCorpconversationAsyncsendV2Request.Form(); formSeverityDesc.setKey(entry.getKey()); formSeverityDesc.setValue(entry.getValue()); objects.add(formSeverityDesc); } } OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg(); msg.setOa(new OapiMessageCorpconversationAsyncsendV2Request.OA()); msg.getOa().setMessageUrl(dingTalkReqVo.getUrl()); msg.getOa().setPcMessageUrl(dingTalkReqVo.getUrl()); 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(dingTalkReqVo.getTitle()); // 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(); } }