REQ-3057-card-2: 指定机器人发送消息

This commit is contained in:
yanglin 2024-11-14 16:25:40 +08:00
parent 6bb8123daa
commit 76eedce01e
2 changed files with 25 additions and 5 deletions

View File

@ -22,6 +22,11 @@ import java.util.Set;
@AllArgsConstructor
public class SendTemplateMessageParam {
/**
* 指定发送机器人
*/
private String sendRobotAccount;
/**
* 发送人
*/

View File

@ -60,6 +60,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import static cn.axzo.im.config.BizResultCode.ALL_PERSSON_TYPE_NOT_EMPTY;
import static cn.axzo.im.config.BizResultCode.SEND_IM_ACCOUNT_MAX;
@ -176,13 +177,17 @@ public class MessageController implements MessageApi {
log.info("sendTemplateMessageAsync, request={}", request);
BizAssertions.assertTrue(request.getSender() != null || StringUtils.isNotBlank(request.getMsgTemplateId()),
"消息模板ID和发送人必须选其一");
PersonAccountAttribute sender = request.getSender();
String sendImAccount;
if (sender != null) {
if (StringUtils.isNotBlank(request.getSendRobotAccount())) {
UserAccountResp robotAccount = findRobotAccount(request.getSendRobotAccount()).orElse(null);
BizAssertions.assertNotNull(robotAccount, String.format(
"找不到指定的机器人账号: %s", request.getSendRobotAccount()));
sendImAccount = request.getSendRobotAccount();
} else if (request.getSender() != null) {
AccountAbsentQuery accountQuery = new AccountAbsentQuery();
accountQuery.setAppType(sender.getAppType().toNimAppType().getCode());
accountQuery.setPersonId(sender.getPersonId());
accountQuery.setOuId(sender.getOuId());
accountQuery.setAppType(request.getSender().getAppType().toNimAppType().getCode());
accountQuery.setPersonId(request.getSender().getPersonId());
accountQuery.setOuId(request.getSender().getOuId());
List<UserAccountResp> accounts = accountService.registerAccountIfAbsent(accountQuery);
sendImAccount = accounts.get(0).getImAccount();
} else {
@ -305,6 +310,16 @@ public class MessageController implements MessageApi {
return robotImAccount;
}
private Optional<UserAccountResp> findRobotAccount(String robotId) {
AccountQuery accountQuery = new AccountQuery();
accountQuery.setAccountId(robotId);
accountQuery.setAppType(AppTypeEnum.SYSTEM.getCode());
List<UserAccountResp> accounts = accountService.queryAccountInfo(accountQuery);
if (CollectionUtils.isEmpty(accounts))
return Optional.empty();
return Optional.of(accounts.get(0));
}
public MessageTaskResp toMessageTaskResp(MessageTask messageTask) {
MessageTaskResp messageTaskResp = MessageTaskResp.builder().build();
BeanUtils.copyProperties(messageTask, messageTaskResp);