REQ-3057-card: backup
This commit is contained in:
parent
76eedce01e
commit
d06767562a
@ -59,7 +59,8 @@ public interface MessageApi {
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/api/im/template-message/async/send")
|
||||
ApiResult<MessageTaskResp> sendTemplateMessageAsync(@RequestBody @Validated SendTemplateMessageParam sendMessageParam);
|
||||
ApiResult<MessageTaskResp> sendTemplateMessageAsync(
|
||||
@RequestBody @Validated SendTemplateMessageParam sendMessageParam);
|
||||
|
||||
/**
|
||||
* 更新消息
|
||||
|
||||
@ -22,11 +22,6 @@ import java.util.Set;
|
||||
@AllArgsConstructor
|
||||
public class SendTemplateMessageParam {
|
||||
|
||||
/**
|
||||
* 指定发送机器人
|
||||
*/
|
||||
private String sendRobotAccount;
|
||||
|
||||
/**
|
||||
* 发送人
|
||||
*/
|
||||
@ -74,7 +69,21 @@ public class SendTemplateMessageParam {
|
||||
|
||||
private TemplatedMsgType templatedMsgType = TemplatedMsgType.TEMPLATE;
|
||||
|
||||
private String refTemplateId;
|
||||
public boolean isSendByRobot() {
|
||||
return sender == null;
|
||||
}
|
||||
|
||||
public Long determineSenderPersonId() {
|
||||
if (sender != null)
|
||||
return Long.parseLong(sender.getPersonId());
|
||||
return 0L;
|
||||
}
|
||||
|
||||
public Long determineSenderOuId() {
|
||||
if (sender != null)
|
||||
return sender.getOuId();
|
||||
return 0L;
|
||||
}
|
||||
|
||||
public boolean isUpdatable() {
|
||||
return templatedMsgType.isUpdatable();
|
||||
|
||||
@ -0,0 +1,23 @@
|
||||
package cn.axzo.im.center.common.enums;
|
||||
|
||||
import cn.axzo.basics.common.constant.enums.CodeDefinition;
|
||||
import com.baomidou.mybatisplus.annotation.EnumValue;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public enum YesOrNo implements CodeDefinition<String> {
|
||||
YES("YES", "是"),
|
||||
NO("NO", "是")
|
||||
;
|
||||
|
||||
@EnumValue
|
||||
private final String code;
|
||||
private final String desc;
|
||||
|
||||
}
|
||||
@ -47,4 +47,8 @@ public class MessageBody {
|
||||
*/
|
||||
private Long dataVersion;
|
||||
|
||||
/**
|
||||
* 端信息
|
||||
*/
|
||||
private Peer peer;
|
||||
}
|
||||
|
||||
@ -58,4 +58,8 @@ public class MessageCustomBody {
|
||||
*/
|
||||
private TemplatedMsgType msgType;
|
||||
|
||||
/**
|
||||
* 端信息
|
||||
*/
|
||||
private Peer peer;
|
||||
}
|
||||
|
||||
@ -0,0 +1,28 @@
|
||||
package cn.axzo.im.channel.netease.dto;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
public class Peer {
|
||||
|
||||
/**
|
||||
* IM是否为机器人发送
|
||||
*/
|
||||
private boolean isSenderRobot;
|
||||
|
||||
/**
|
||||
* IM发送者自然人id, 机器人发送时为0
|
||||
*/
|
||||
private Long senderPersonId;
|
||||
|
||||
/**
|
||||
* IM接收者自然人id
|
||||
*/
|
||||
private Long receiverPersonId;
|
||||
|
||||
}
|
||||
@ -175,22 +175,19 @@ public class MessageController implements MessageApi {
|
||||
@Transactional
|
||||
public ApiResult<MessageTaskResp> sendTemplateMessageAsync(SendTemplateMessageParam request) {
|
||||
log.info("sendTemplateMessageAsync, request={}", request);
|
||||
BizAssertions.assertTrue(request.getSender() != null || StringUtils.isNotBlank(request.getMsgTemplateId()),
|
||||
PersonAccountAttribute sender = request.getSender();
|
||||
BizAssertions.assertTrue(sender != null || StringUtils.isNotBlank(request.getMsgTemplateId()),
|
||||
"消息模板ID和发送人必须选其一");
|
||||
String sendImAccount;
|
||||
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) {
|
||||
if (sender != null) {
|
||||
AccountAbsentQuery accountQuery = new AccountAbsentQuery();
|
||||
accountQuery.setAppType(request.getSender().getAppType().toNimAppType().getCode());
|
||||
accountQuery.setPersonId(request.getSender().getPersonId());
|
||||
accountQuery.setOuId(request.getSender().getOuId());
|
||||
accountQuery.setAppType(sender.getAppType().toNimAppType().getCode());
|
||||
accountQuery.setPersonId(sender.getPersonId());
|
||||
accountQuery.setOuId(sender.getOuId());
|
||||
List<UserAccountResp> accounts = accountService.registerAccountIfAbsent(accountQuery);
|
||||
sendImAccount = accounts.get(0).getImAccount();
|
||||
} else {
|
||||
//todo: 根据类型验证模版是否配置了机器人
|
||||
sendImAccount = check(request);
|
||||
}
|
||||
|
||||
@ -198,7 +195,8 @@ public class MessageController implements MessageApi {
|
||||
.msgTemplateContent(request.getMsgTemplateContent())
|
||||
.msgTemplateId(request.getMsgTemplateId())
|
||||
.templatedMsgType(request.getTemplatedMsgType())
|
||||
.isSenderRobot(request.getSender() == null)
|
||||
.isSenderRobot(request.isSendByRobot())
|
||||
.senderPersonId(request.determineSenderPersonId())
|
||||
.build();
|
||||
Date now = new Date();
|
||||
List<MessageTask.ReceivePerson> receivePersons = JSONArray.parseArray(
|
||||
|
||||
@ -24,6 +24,7 @@ import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.springframework.cglib.beans.BeanMap;
|
||||
|
||||
import java.util.Date;
|
||||
@ -157,6 +158,8 @@ public class MessageTask {
|
||||
*/
|
||||
private List<AppTypeEnum> appTypes;
|
||||
|
||||
private Long senderPersonId = 0L;
|
||||
|
||||
private Boolean isSenderRobot;
|
||||
|
||||
public TemplatedMsgType determineTemplatedMsgType() {
|
||||
@ -198,6 +201,12 @@ public class MessageTask {
|
||||
|
||||
private Long workspaceId;
|
||||
|
||||
public Long personIdAsLong() {
|
||||
if (NumberUtils.isDigits(personId))
|
||||
return Long.parseLong(personId);
|
||||
return 0L;
|
||||
}
|
||||
|
||||
public String buildKey(Map<Long, Long> ouIdMap) {
|
||||
if (StringUtils.isNotBlank(this.getImAccount())) {
|
||||
return this.getImAccount();
|
||||
|
||||
@ -4,6 +4,7 @@ import cn.axzo.im.center.api.vo.PersonAccountAttribute;
|
||||
import cn.axzo.im.center.api.vo.req.MessageUpdateInfo;
|
||||
import cn.axzo.im.center.common.enums.ImAppType;
|
||||
import cn.axzo.im.center.common.enums.TemplatedMsgType;
|
||||
import cn.axzo.im.center.common.enums.YesOrNo;
|
||||
import cn.axzo.im.enums.UpdatableMessageState;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
@ -11,6 +12,8 @@ import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@ -25,13 +28,15 @@ public class UpdatableMessage implements MessageUpdateInfo {
|
||||
private Long id;
|
||||
private String batchNo;
|
||||
private String templateId;
|
||||
private String refTemplateId;
|
||||
private String bizId;
|
||||
private Long taskId;
|
||||
private String fromAccount;
|
||||
private String toAccount;
|
||||
private String receiverPersonId;
|
||||
private Long receiverOuId;
|
||||
private String senderPersonId;
|
||||
private Long senderOuId;
|
||||
private YesOrNo isSenderRobot;
|
||||
private ImAppType appType;
|
||||
private TemplatedMsgType msgType;
|
||||
private UpdatableMessageState state;
|
||||
@ -78,6 +83,18 @@ public class UpdatableMessage implements MessageUpdateInfo {
|
||||
return person;
|
||||
}
|
||||
|
||||
public Long senderPersonIdAsLong() {
|
||||
if (NumberUtils.isDigits(senderPersonId))
|
||||
return NumberUtils.toLong(senderPersonId);
|
||||
return 0L;
|
||||
}
|
||||
|
||||
public Long receiverPersonIdAsLong() {
|
||||
if (NumberUtils.isDigits(receiverPersonId))
|
||||
return NumberUtils.toLong(receiverPersonId);
|
||||
return 0L;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String bizMessageId() {
|
||||
return bizMessageId;
|
||||
|
||||
@ -5,9 +5,9 @@ import cn.axzo.im.center.common.enums.AccountTypeEnum;
|
||||
import cn.axzo.im.center.common.enums.AppTypeEnum;
|
||||
import cn.axzo.im.channel.IMChannelProvider;
|
||||
import cn.axzo.im.channel.netease.dto.MessageBody;
|
||||
import cn.axzo.im.channel.netease.dto.Peer;
|
||||
import cn.axzo.im.dao.mapper.MessageTaskMapper;
|
||||
import cn.axzo.im.entity.AccountRegister;
|
||||
import cn.axzo.im.entity.HistoryRecordExt;
|
||||
import cn.axzo.im.entity.MessageHistory;
|
||||
import cn.axzo.im.entity.MessageTask;
|
||||
import cn.axzo.im.enums.MessageHistoryStatus;
|
||||
@ -342,6 +342,11 @@ public class MessageTaskServiceImpl extends ServiceImpl<MessageTaskMapper, Messa
|
||||
messageBody.setMsgType(bizData.determineTemplatedMsgType().getCode());
|
||||
messageBody.setMsgContent(messageTask.getContent());
|
||||
messageBody.setMsgHeader(messageTask.getTitle());
|
||||
messageBody.setPeer(new Peer());
|
||||
|
||||
messageBody.getPeer().setSenderRobot(bizData.getIsSenderRobot());
|
||||
messageBody.getPeer().setSenderPersonId(bizData.getSenderPersonId());
|
||||
messageBody.getPeer().setReceiverPersonId(receivePerson.personIdAsLong());
|
||||
|
||||
Map<String, String> defaultExtMap = Maps.newHashMap();
|
||||
if (StringUtils.isNotBlank(bizData.getMsgTemplateContent())) {
|
||||
|
||||
@ -8,6 +8,7 @@ import cn.axzo.im.center.api.vo.resp.MessageUpdateResponse;
|
||||
import cn.axzo.im.center.api.vo.resp.MessageUpdateResponse.NonUpdateMessageReason;
|
||||
import cn.axzo.im.center.api.vo.resp.UpdatableMessageSendResult;
|
||||
import cn.axzo.im.center.common.enums.ImAppType;
|
||||
import cn.axzo.im.center.common.enums.YesOrNo;
|
||||
import cn.axzo.im.channel.netease.dto.MessageBody;
|
||||
import cn.axzo.im.dao.repository.MessageHistoryDao;
|
||||
import cn.axzo.im.dao.repository.UpdatableMessageDao;
|
||||
@ -80,7 +81,6 @@ public class UpdatableMessageManager {
|
||||
collector.addMessage(message);
|
||||
message.setBatchNo(batchNo);
|
||||
message.setTemplateId(request.getMsgTemplateId());
|
||||
message.setRefTemplateId(request.getRefTemplateId());
|
||||
message.setBizId(request.getBizId());
|
||||
message.setTaskId(task.getId());
|
||||
message.setReceiverPersonId(person.getPersonId());
|
||||
@ -90,6 +90,9 @@ public class UpdatableMessageManager {
|
||||
message.setState(UpdatableMessageState.TASK_CREATED);
|
||||
message.setBizMessageId(UUIDUtil.uuidString());
|
||||
message.setDataVersion(1L);
|
||||
message.setSenderPersonId(request.determineSenderPersonId() + "0");
|
||||
message.setSenderOuId(request.determineSenderOuId());
|
||||
message.setIsSenderRobot(request.isSendByRobot() ? YesOrNo.YES : YesOrNo.NO);
|
||||
|
||||
UpdatableMessageLog messageLog = message.toMessageLog();
|
||||
collector.addLog(messageLog);
|
||||
|
||||
@ -4,8 +4,10 @@ import cn.axzo.im.center.api.feign.SendPriority;
|
||||
import cn.axzo.im.center.api.vo.ApiChannel;
|
||||
import cn.axzo.im.center.api.vo.req.MessageUpdateInfo;
|
||||
import cn.axzo.im.center.common.enums.BizTypeEnum;
|
||||
import cn.axzo.im.center.common.enums.YesOrNo;
|
||||
import cn.axzo.im.channel.IMChannelProvider;
|
||||
import cn.axzo.im.channel.netease.dto.MessageCustomBody;
|
||||
import cn.axzo.im.channel.netease.dto.Peer;
|
||||
import cn.axzo.im.dao.repository.UpdatableMessageDao;
|
||||
import cn.axzo.im.entity.HistoryRecordExt;
|
||||
import cn.axzo.im.entity.MessageHistory;
|
||||
@ -74,6 +76,12 @@ public class UpdateSupport {
|
||||
messageBody.setDataVersion(messageUpdate.getDataVersion());
|
||||
messageBody.setInitMessageId(message.getNimMessageId());
|
||||
messageBody.setMsgType(message.getMsgType());
|
||||
|
||||
messageBody.setPeer(new Peer());
|
||||
messageBody.getPeer().setSenderRobot(message.getIsSenderRobot() == YesOrNo.YES);
|
||||
messageBody.getPeer().setSenderPersonId(message.senderPersonIdAsLong());
|
||||
messageBody.getPeer().setReceiverPersonId(message.receiverPersonIdAsLong());
|
||||
|
||||
history.setMessageBody(JSON.toJSONString(messageBody));
|
||||
messageUpdate.setMessageBody(JSON.parseObject(history.getMessageBody()));
|
||||
messageUpdate.setBizBody(update.bizBody());
|
||||
|
||||
Loading…
Reference in New Issue
Block a user