REQ-2333: 企业内部应用机器人推送
This commit is contained in:
parent
5f8bc0bef0
commit
60f60c14df
@ -1,7 +1,7 @@
|
||||
package cn.axzo.riven.client.feign;
|
||||
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.riven.client.req.SendCorpMsgReq;
|
||||
import cn.axzo.riven.client.req.DingDingSendRebootMsgReq;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
@ -17,6 +17,6 @@ public interface DingDingMsgApi {
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/api/dingDing/msg/send")
|
||||
ApiResult<Long> send(@RequestBody SendCorpMsgReq req);
|
||||
@PostMapping("/api/dingDing/reboot/msg/send")
|
||||
ApiResult<Void> sendRebootMsg(@RequestBody DingDingSendRebootMsgReq req);
|
||||
}
|
||||
|
||||
@ -1,18 +0,0 @@
|
||||
package cn.axzo.riven.client.req;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author yangchen@axzo.cn
|
||||
*/
|
||||
@Data
|
||||
public class DingDingMsgReq {
|
||||
/**
|
||||
* 消息类型
|
||||
*/
|
||||
private String msgType;
|
||||
/**
|
||||
* 消息类型:action_card
|
||||
*/
|
||||
private DingDingActionCardDto actionCard;
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
package cn.axzo.riven.client.req;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author yangchen@axzo.cn
|
||||
*/
|
||||
@Data
|
||||
public class DingDingSampleActionCardReq {
|
||||
/**
|
||||
* 消息接收状态栏标题
|
||||
*/
|
||||
private String title;
|
||||
/**
|
||||
* markdown文本
|
||||
*/
|
||||
private String text;
|
||||
/**
|
||||
* 按钮标题
|
||||
*/
|
||||
private String singleTitle;
|
||||
/**
|
||||
* 按钮跳转地址 URL编码
|
||||
*/
|
||||
private String singleURL;
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
package cn.axzo.riven.client.req;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author yangchen@axzo.cn
|
||||
*/
|
||||
@Data
|
||||
public class DingDingSendRebootMsgReq {
|
||||
/**
|
||||
* 人员id
|
||||
*/
|
||||
private List<Long> personIds;
|
||||
/**
|
||||
* 消息类型 sampleActionCard
|
||||
*/
|
||||
private String msgType;
|
||||
/**
|
||||
* 消息内容 sampleActionCard
|
||||
*/
|
||||
private DingDingSampleActionCardReq sampleActionCard;
|
||||
}
|
||||
@ -1,20 +0,0 @@
|
||||
package cn.axzo.riven.client.req;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author yangchen@axzo.cn
|
||||
*/
|
||||
@Data
|
||||
public class SendCorpMsgReq {
|
||||
/**
|
||||
* 人员id
|
||||
*/
|
||||
private List<Long> personIds;
|
||||
/**
|
||||
* 消息内容
|
||||
*/
|
||||
private DingDingMsgReq msg;
|
||||
}
|
||||
@ -2,8 +2,7 @@ package cn.axzo.riven.controller;
|
||||
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.riven.client.feign.DingDingMsgApi;
|
||||
import cn.axzo.riven.client.req.SendCorpMsgReq;
|
||||
import cn.axzo.riven.service.DingDingCorpMsgService;
|
||||
import cn.axzo.riven.client.req.DingDingSendRebootMsgReq;
|
||||
import cn.axzo.riven.service.DingDingRebootService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
@ -14,12 +13,11 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class DingDingMsgController implements DingDingMsgApi {
|
||||
private final DingDingCorpMsgService dingDingCorpMsgService;
|
||||
private final DingDingRebootService dingDingRebootService;
|
||||
|
||||
@Override
|
||||
public ApiResult<Long> send(SendCorpMsgReq req) {
|
||||
String res = dingDingRebootService.sendCorpMsg(req);
|
||||
public ApiResult<Void> sendRebootMsg(DingDingSendRebootMsgReq req) {
|
||||
dingDingRebootService.sendCorpRebbootMsg(req);
|
||||
return ApiResult.ok();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,68 +0,0 @@
|
||||
package cn.axzo.riven.service;
|
||||
|
||||
import cn.axzo.framework.data.mybatisplus.model.BaseEntity;
|
||||
import cn.axzo.framework.domain.web.code.BaseCode;
|
||||
import cn.axzo.riven.client.req.SendCorpMsgReq;
|
||||
import cn.axzo.riven.common.constants.DingDingJumpConstant;
|
||||
import cn.axzo.riven.common.util.Throws;
|
||||
import cn.axzo.riven.config.DeliverConfig;
|
||||
import cn.axzo.riven.gateway.OrganizationalNodeUserApiGateway;
|
||||
import cn.axzo.riven.manger.DingDingNewSdkManger;
|
||||
import cn.axzo.riven.manger.DingDingOldSdkManger;
|
||||
import cn.axzo.riven.repository.entity.ThirdPartyUser;
|
||||
import cn.axzo.riven.repository.service.ThirdPartyUserDao;
|
||||
import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponseBody;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author yangchen@axzo.cn
|
||||
*/
|
||||
@Service
|
||||
public class DingDingCorpMsgService {
|
||||
@Autowired
|
||||
private DingDingOldSdkManger dingDingOldSdkManger;
|
||||
@Autowired
|
||||
private DingDingNewSdkManger dingDingNewSdkManger;
|
||||
@Autowired
|
||||
private ThirdPartyUserDao thirdPartyUserDao;
|
||||
@Autowired
|
||||
private DeliverConfig deliverConfig;
|
||||
@Autowired
|
||||
private OrganizationalNodeUserApiGateway organizationalNodeUserApiGateway;
|
||||
|
||||
public Long sendCorpMsg(SendCorpMsgReq req) {
|
||||
GetAccessTokenResponseBody accessToken = dingDingNewSdkManger.getAccessToken(deliverConfig.getAppKey(), deliverConfig.getAppSecret());
|
||||
|
||||
// 通过personIds查询钉钉ids
|
||||
String dingDingUserIdsStr = "AX0022,17002075952263429";
|
||||
// if (!CollectionUtils.isEmpty(req.getPersonIds())) {
|
||||
// List<Long> syncIds = organizationalNodeUserApiGateway.listSyncIds(deliverConfig.getOuId(), req.getPersonIds());
|
||||
// if (!CollectionUtils.isEmpty(syncIds)) {
|
||||
// List<ThirdPartyUser> partyUsers = thirdPartyUserDao.lambdaQuery().in(BaseEntity::getId, syncIds).list();
|
||||
// if (!CollectionUtils.isEmpty(partyUsers)) {
|
||||
// List<String> dingDingIds = partyUsers.stream().map(ThirdPartyUser::getUserId).distinct().collect(Collectors.toList());
|
||||
// dingDingUserIdsStr = String.join(",", dingDingIds);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// if (!StringUtils.hasText(dingDingUserIdsStr)) {
|
||||
// throw Throws.bizException(BaseCode.FORBIDDEN, "钉钉用户不存在");
|
||||
// }
|
||||
|
||||
if (!CollectionUtils.isEmpty(req.getMsg().getActionCard().getBtnJsonList())) {
|
||||
// dingtalk://dingtalkclient/action/openapp?corpid=免登企业corpId&container_type=work_platform&app_id=0_应用agentid&redirect_type=jump&redirect_url=跳转url
|
||||
req.getMsg().getActionCard().getBtnJsonList().forEach(item -> {
|
||||
String url = String.format(DingDingJumpConstant.BASE_URL, deliverConfig.getCorpId(), deliverConfig.getAgentId(), item.getActionUrl());
|
||||
item.setActionUrl(url);
|
||||
});
|
||||
}
|
||||
|
||||
return dingDingOldSdkManger.sendCorpActionCard(accessToken.getAccessToken(), deliverConfig.getAgentId(), dingDingUserIdsStr, false, req.getMsg().getActionCard());
|
||||
}
|
||||
}
|
||||
@ -1,13 +1,15 @@
|
||||
package cn.axzo.riven.service;
|
||||
|
||||
import cn.axzo.riven.client.req.SendCorpMsgReq;
|
||||
import cn.axzo.framework.data.mybatisplus.model.BaseEntity;
|
||||
import cn.axzo.framework.domain.web.code.BaseCode;
|
||||
import cn.axzo.riven.client.req.DingDingSendRebootMsgReq;
|
||||
import cn.axzo.riven.common.constants.DingDingJumpConstant;
|
||||
import cn.axzo.riven.common.util.Throws;
|
||||
import cn.axzo.riven.config.DeliverConfig;
|
||||
import cn.axzo.riven.config.DingDingRebootConfig;
|
||||
import cn.axzo.riven.gateway.OrganizationalNodeUserApiGateway;
|
||||
import cn.axzo.riven.manger.DingDingNewSdkManger;
|
||||
import cn.axzo.riven.manger.DingDingOldSdkManger;
|
||||
import cn.axzo.riven.model.dto.request.DingSampleActionCardDto;
|
||||
import cn.axzo.riven.repository.entity.ThirdPartyUser;
|
||||
import cn.axzo.riven.repository.service.ThirdPartyUserDao;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponseBody;
|
||||
@ -17,14 +19,14 @@ import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author yangchen@axzo.cn
|
||||
*/
|
||||
@Service
|
||||
public class DingDingRebootService {
|
||||
@Autowired
|
||||
private DingDingOldSdkManger dingDingOldSdkManger;
|
||||
public static final int LIMIT_SEND = 20;
|
||||
@Autowired
|
||||
private DingDingNewSdkManger dingDingNewSdkManger;
|
||||
@Autowired
|
||||
@ -36,49 +38,38 @@ public class DingDingRebootService {
|
||||
@Autowired
|
||||
private OrganizationalNodeUserApiGateway organizationalNodeUserApiGateway;
|
||||
|
||||
public String sendCorpMsg(SendCorpMsgReq req) {
|
||||
public void sendCorpRebbootMsg(DingDingSendRebootMsgReq req) {
|
||||
GetAccessTokenResponseBody accessToken = dingDingNewSdkManger.getAccessToken(dingRebootConfig.getAppKey(), dingRebootConfig.getAppSecret());
|
||||
|
||||
// 通过personIds查询钉钉ids
|
||||
String dingDingUserIdsStr = "AX0022,17002075952263429";
|
||||
// if (!CollectionUtils.isEmpty(req.getPersonIds())) {
|
||||
// List<Long> syncIds = organizationalNodeUserApiGateway.listSyncIds(deliverConfig.getOuId(), req.getPersonIds());
|
||||
// if (!CollectionUtils.isEmpty(syncIds)) {
|
||||
// List<ThirdPartyUser> partyUsers = thirdPartyUserDao.lambdaQuery().in(BaseEntity::getId, syncIds).list();
|
||||
// if (!CollectionUtils.isEmpty(partyUsers)) {
|
||||
// List<String> dingDingIds = partyUsers.stream().map(ThirdPartyUser::getUserId).distinct().collect(Collectors.toList());
|
||||
// dingDingUserIdsStr = String.join(",", dingDingIds);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// if (!StringUtils.hasText(dingDingUserIdsStr)) {
|
||||
// throw Throws.bizException(BaseCode.FORBIDDEN, "钉钉用户不存在");
|
||||
// }
|
||||
|
||||
List<String> dingUserIds = new ArrayList<>();
|
||||
dingUserIds.add("AX0022");
|
||||
dingUserIds.add("17002075952263429");
|
||||
|
||||
|
||||
if (!CollectionUtils.isEmpty(req.getMsg().getActionCard().getBtnJsonList())) {
|
||||
// dingtalk://dingtalkclient/action/openapp?corpid=免登企业corpId&container_type=work_platform&app_id=0_应用agentid&redirect_type=jump&redirect_url=跳转url
|
||||
req.getMsg().getActionCard().getBtnJsonList().forEach(item -> {
|
||||
String url = String.format(DingDingJumpConstant.BASE_URL, deliverConfig.getCorpId(), deliverConfig.getAgentId(), item.getActionUrl());
|
||||
item.setActionUrl(url);
|
||||
});
|
||||
if (!CollectionUtils.isEmpty(req.getPersonIds())) {
|
||||
List<Long> syncIds = organizationalNodeUserApiGateway.listSyncIds(deliverConfig.getOuId(), req.getPersonIds());
|
||||
if (!CollectionUtils.isEmpty(syncIds)) {
|
||||
List<ThirdPartyUser> partyUsers = thirdPartyUserDao.lambdaQuery().in(BaseEntity::getId, syncIds).list();
|
||||
if (!CollectionUtils.isEmpty(partyUsers)) {
|
||||
dingUserIds = partyUsers.stream().map(ThirdPartyUser::getUserId).distinct().collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
}
|
||||
if (CollectionUtils.isEmpty(dingUserIds)) {
|
||||
throw Throws.bizException(BaseCode.FORBIDDEN, "钉钉用户不存在");
|
||||
}
|
||||
|
||||
DingSampleActionCardDto dingSampleActionCardDto = new DingSampleActionCardDto();
|
||||
dingSampleActionCardDto.setTitle("今日实时简报(数据更新至:2024.04.14 19:00)");
|
||||
dingSampleActionCardDto.setText(req.getMsg().getActionCard().getMarkdown());
|
||||
dingSampleActionCardDto.setSingleTitle("查看详情");
|
||||
String url = String.format(DingDingJumpConstant.BASE_URL, deliverConfig.getCorpId(), deliverConfig.getAgentId(), "https://test-data-h5.axzo.cn");
|
||||
dingSampleActionCardDto.setSingleURL(url);
|
||||
// 链接处理
|
||||
String url = String.format(DingDingJumpConstant.BASE_URL, deliverConfig.getCorpId(), deliverConfig.getAgentId(), req.getSampleActionCard().getSingleURL());
|
||||
req.getSampleActionCard().setSingleURL(url);
|
||||
|
||||
|
||||
|
||||
dingDingNewSdkManger.robotoToMessagesBatchSend(accessToken.getAccessToken(), dingRebootConfig.getRebootCode(), dingUserIds, "sampleActionCard", JSONUtil.toJsonStr(dingSampleActionCardDto));
|
||||
|
||||
return null;
|
||||
// 分批发送钉钉机器人消息
|
||||
int sendLength = dingUserIds.size();
|
||||
int i = 0;
|
||||
while (sendLength > LIMIT_SEND) {
|
||||
dingDingNewSdkManger.robotoToMessagesBatchSend(accessToken.getAccessToken(), dingRebootConfig.getRebootCode(), dingUserIds.subList(i, i + LIMIT_SEND), req.getMsgType(), JSONUtil.toJsonStr(req.getSampleActionCard()));
|
||||
i = i + LIMIT_SEND;
|
||||
sendLength = sendLength - LIMIT_SEND;
|
||||
}
|
||||
if (sendLength > 0) {
|
||||
dingDingNewSdkManger.robotoToMessagesBatchSend(accessToken.getAccessToken(), dingRebootConfig.getRebootCode(), dingUserIds.subList(i, i + sendLength), req.getMsgType(), JSONUtil.toJsonStr(req.getSampleActionCard()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user