REQ-3057-card: a lot of staff

This commit is contained in:
yanglin 2024-11-08 15:09:19 +08:00
parent 3d87939570
commit e25f075061
11 changed files with 88 additions and 24 deletions

View File

@ -1,6 +1,6 @@
package cn.axzo.im.center.api.vo; package cn.axzo.im.center.api.vo;
import cn.axzo.im.center.common.enums.AppTypeEnum; import cn.axzo.im.center.common.enums.ImClientAppType;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -41,6 +41,6 @@ public class PersonAccountAttribute {
* @See cn.axzo.im.center.common.enums.AppTypeEnum * @See cn.axzo.im.center.common.enums.AppTypeEnum
*/ */
@NotNull(message = "appType不能为空") @NotNull(message = "appType不能为空")
private AppTypeEnum appType; private ImClientAppType appType;
} }

View File

@ -21,6 +21,11 @@ import java.util.Set;
@AllArgsConstructor @AllArgsConstructor
public class SendTemplateMessageParam { public class SendTemplateMessageParam {
/**
* 发送人
*/
private PersonAccountAttribute sender;
/** /**
* 消息接收用户信息 * 消息接收用户信息
*/ */
@ -66,7 +71,7 @@ public class SendTemplateMessageParam {
private TemplatedMsgType templatedMsgType = TemplatedMsgType.TEMPLATE; private TemplatedMsgType templatedMsgType = TemplatedMsgType.TEMPLATE;
private String updatableRefTemplateId; private String refTemplateId;
public boolean isUpdatable() { public boolean isUpdatable() {
return templatedMsgType.isUpdatable(); return templatedMsgType.isUpdatable();

View File

@ -0,0 +1,34 @@
package cn.axzo.im.center.common.enums;
/**
* @author yanglin
*/
public enum ImClientAppType {
/**
* 工人端
*/
CM,
/**
* 企业管理端
*/
CMP;
public static ImClientAppType fromNimAppType(AppTypeEnum appType) {
if (appType == null)
return null;
if (appType == AppTypeEnum.CM)
return CM;
if (appType == AppTypeEnum.CMP)
return CMP;
throw new UnsupportedOperationException("Should never happen!");
}
public AppTypeEnum toNimAppType() {
if (this == CM)
return AppTypeEnum.CM;
if (this == CMP)
return AppTypeEnum.CMP;
throw new UnsupportedOperationException("Should never happen!");
}
}

View File

@ -5,6 +5,8 @@ import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.im.center.api.feign.MessageApi; import cn.axzo.im.center.api.feign.MessageApi;
import cn.axzo.im.center.api.feign.SendPriority; import cn.axzo.im.center.api.feign.SendPriority;
import cn.axzo.im.center.api.vo.ApiChannel; import cn.axzo.im.center.api.vo.ApiChannel;
import cn.axzo.im.center.api.vo.PersonAccountAttribute;
import cn.axzo.im.center.api.vo.req.AccountAbsentQuery;
import cn.axzo.im.center.api.vo.req.AccountQuery; import cn.axzo.im.center.api.vo.req.AccountQuery;
import cn.axzo.im.center.api.vo.req.AsyncSendMessageParam; import cn.axzo.im.center.api.vo.req.AsyncSendMessageParam;
import cn.axzo.im.center.api.vo.req.CustomMessageInfo; import cn.axzo.im.center.api.vo.req.CustomMessageInfo;
@ -164,35 +166,47 @@ public class MessageController implements MessageApi {
@Override @Override
@Transactional @Transactional
public ApiResult<MessageTaskResp> sendTemplateMessageAsync(SendTemplateMessageParam sendMessageParam) { public ApiResult<MessageTaskResp> sendTemplateMessageAsync(SendTemplateMessageParam request) {
String sendImAccount = check(sendMessageParam); PersonAccountAttribute sender = request.getSender();
String sendImAccount;
if (sender != null) {
AccountAbsentQuery accountQuery = new AccountAbsentQuery();
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 {
sendImAccount = check(request);
}
MessageTask.BizData bizData = MessageTask.BizData.builder() MessageTask.BizData bizData = MessageTask.BizData.builder()
.msgTemplateContent(sendMessageParam.getMsgTemplateContent()) .msgTemplateContent(request.getMsgTemplateContent())
.msgTemplateId(sendMessageParam.getMsgTemplateId()) .msgTemplateId(request.getMsgTemplateId())
.templatedMsgType(sendMessageParam.getTemplatedMsgType()) .templatedMsgType(request.getTemplatedMsgType())
.isSenderRobot(request.getSender() == null)
.build(); .build();
Date now = new Date(); Date now = new Date();
List<MessageTask.ReceivePerson> receivePersons = JSONArray.parseArray( List<MessageTask.ReceivePerson> receivePersons = JSONArray.parseArray(
JSONObject.toJSONString(sendMessageParam.uniqueReceivePersons()), MessageTask.ReceivePerson.class); JSONObject.toJSONString(request.uniqueReceivePersons()), MessageTask.ReceivePerson.class);
MessageTask messageTask = messageTaskService.create(MessageTask.builder() MessageTask messageTask = messageTaskService.create(MessageTask.builder()
.bizId(sendMessageParam.getBizId()) .bizId(request.getBizId())
.sendImAccount(sendImAccount) .sendImAccount(sendImAccount)
.receivePersons(receivePersons) .receivePersons(receivePersons)
.status(MessageTaskStatus.PENDING) .status(MessageTaskStatus.PENDING)
.title(sendMessageParam.getMsgHeader()) .title(request.getMsgHeader())
.content(sendMessageParam.getMsgContent()) .content(request.getMsgContent())
.bizData(bizData) .bizData(bizData)
.ext(sendMessageParam.getExt()) .ext(request.getExt())
.planStartTime(now) .planStartTime(now)
.createAt(now) .createAt(now)
.sendPriority(SendPriority.TEMPLATE_MESSAGE .sendPriority(SendPriority.TEMPLATE_MESSAGE
.determinePriority(sendMessageParam.getSendPriority())) .determinePriority(request.getSendPriority()))
.apiChannel(ApiChannel.COMMON_MESSAGE) .apiChannel(ApiChannel.COMMON_MESSAGE)
.build()); .build());
List<UpdatableMessageSendResult> updatableMessageSendResults = Collections.emptyList(); List<UpdatableMessageSendResult> updatableMessageSendResults = Collections.emptyList();
if (sendMessageParam.isUpdatable()) { if (request.isUpdatable()) {
updatableMessageSendResults = updatableMessageManager.createUpdatableMessage(messageTask, sendMessageParam, receivePersons); updatableMessageSendResults = updatableMessageManager.createUpdatableMessage(messageTask, request, receivePersons);
} }
MessageTaskResp messageTaskResp = toMessageTaskResp(messageTask); MessageTaskResp messageTaskResp = toMessageTaskResp(messageTask);
messageTaskResp.setUpdatableMessageSendResults(updatableMessageSendResults); messageTaskResp.setUpdatableMessageSendResults(updatableMessageSendResults);

View File

@ -7,6 +7,7 @@ import lombok.Data;
*/ */
@Data @Data
public class HistoryRecordExt { public class HistoryRecordExt {
private Boolean isSenderRobot;
private String sendApi; private String sendApi;
private String sendRespDesc; private String sendRespDesc;
private String batchSendId; private String batchSendId;

View File

@ -157,6 +157,8 @@ public class MessageTask {
*/ */
private List<AppTypeEnum> appTypes; private List<AppTypeEnum> appTypes;
private Boolean isSenderRobot;
public TemplatedMsgType determineTemplatedMsgType() { public TemplatedMsgType determineTemplatedMsgType() {
return templatedMsgType == null ? TemplatedMsgType.TEMPLATE : templatedMsgType; return templatedMsgType == null ? TemplatedMsgType.TEMPLATE : templatedMsgType;
} }

View File

@ -2,7 +2,7 @@ package cn.axzo.im.entity;
import cn.axzo.im.center.api.vo.PersonAccountAttribute; import cn.axzo.im.center.api.vo.PersonAccountAttribute;
import cn.axzo.im.center.api.vo.req.MessageUpdateInfo; import cn.axzo.im.center.api.vo.req.MessageUpdateInfo;
import cn.axzo.im.center.common.enums.AppTypeEnum; import cn.axzo.im.center.common.enums.ImClientAppType;
import cn.axzo.im.center.common.enums.TemplatedMsgType; import cn.axzo.im.center.common.enums.TemplatedMsgType;
import cn.axzo.im.enums.UpdatableMessageState; import cn.axzo.im.enums.UpdatableMessageState;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
@ -32,7 +32,7 @@ public class UpdatableMessage implements MessageUpdateInfo {
private String toAccount; private String toAccount;
private String receiverPersonId; private String receiverPersonId;
private Long receiverOuId; private Long receiverOuId;
private AppTypeEnum appType; private ImClientAppType appType;
private TemplatedMsgType msgType; private TemplatedMsgType msgType;
private UpdatableMessageState state; private UpdatableMessageState state;
private String bizMessageId; private String bizMessageId;

View File

@ -7,6 +7,7 @@ import cn.axzo.im.channel.IMChannelProvider;
import cn.axzo.im.channel.netease.dto.MessageBody; import cn.axzo.im.channel.netease.dto.MessageBody;
import cn.axzo.im.dao.mapper.MessageTaskMapper; import cn.axzo.im.dao.mapper.MessageTaskMapper;
import cn.axzo.im.entity.AccountRegister; import cn.axzo.im.entity.AccountRegister;
import cn.axzo.im.entity.HistoryRecordExt;
import cn.axzo.im.entity.MessageHistory; import cn.axzo.im.entity.MessageHistory;
import cn.axzo.im.entity.MessageTask; import cn.axzo.im.entity.MessageTask;
import cn.axzo.im.enums.MessageHistoryStatus; import cn.axzo.im.enums.MessageHistoryStatus;
@ -240,9 +241,13 @@ public class MessageTaskServiceImpl extends ServiceImpl<MessageTaskMapper, Messa
messageHistory.setToAccount(""); messageHistory.setToAccount("");
messageHistory.setResult(AccountService.NO_IM_ACCOUNT_MESSAGE); messageHistory.setResult(AccountService.NO_IM_ACCOUNT_MESSAGE);
messageHistory.setStatus(MessageHistoryStatus.FAILED); messageHistory.setStatus(MessageHistoryStatus.FAILED);
messageHistory.getRecordExt().setImAccountInfo(key); messageHistory.getOrCreateRecordExt().setImAccountInfo(key);
} }
} }
MessageTask.BizData bizData = messageTask.getBizData();
if (bizData != null) {
messageHistory.getOrCreateRecordExt().setIsSenderRobot(bizData.getIsSenderRobot());
}
messageHistory.setMessageBody(resolveBody(receivePerson, messageTask, messageHistory.getAppType())); messageHistory.setMessageBody(resolveBody(receivePerson, messageTask, messageHistory.getAppType()));
return messageHistory; return messageHistory;
} }

View File

@ -3,6 +3,7 @@ package cn.axzo.im.updatable;
import cn.axzo.basics.common.constant.enums.CodeDefinition; import cn.axzo.basics.common.constant.enums.CodeDefinition;
import cn.axzo.im.center.api.vo.PersonAccountAttribute; import cn.axzo.im.center.api.vo.PersonAccountAttribute;
import cn.axzo.im.center.common.enums.AppTypeEnum; import cn.axzo.im.center.common.enums.AppTypeEnum;
import cn.axzo.im.center.common.enums.ImClientAppType;
import cn.axzo.im.entity.MessageHistory; import cn.axzo.im.entity.MessageHistory;
import cn.axzo.im.entity.UpdatableMessage; import cn.axzo.im.entity.UpdatableMessage;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@ -35,8 +36,9 @@ class InitHistories {
PersonAccountAttribute person = new PersonAccountAttribute(); PersonAccountAttribute person = new PersonAccountAttribute();
person.setPersonId(history.getReceivePersonId()); person.setPersonId(history.getReceivePersonId());
person.setOuId(history.getReceiveOuId()); person.setOuId(history.getReceiveOuId());
person.setAppType(CodeDefinition.findByCode( AppTypeEnum appType = CodeDefinition.findByCode(
AppTypeEnum.class, history.getAppType()).orElse(null)); AppTypeEnum.class, history.getAppType()).orElse(null);
person.setAppType(ImClientAppType.fromNimAppType(appType));
return new HistoryTaskAccount(history.getImMessageTaskId(), person); return new HistoryTaskAccount(history.getImMessageTaskId(), person);
}, identity(), (oldValue, newValue) -> oldValue)); }, identity(), (oldValue, newValue) -> oldValue));
} }

View File

@ -7,6 +7,7 @@ import cn.axzo.im.center.api.vo.req.UpdateMessageRequest;
import cn.axzo.im.center.api.vo.resp.MessageUpdateResponse; 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.MessageUpdateResponse.NonUpdateMessageReason;
import cn.axzo.im.center.api.vo.resp.UpdatableMessageSendResult; import cn.axzo.im.center.api.vo.resp.UpdatableMessageSendResult;
import cn.axzo.im.center.common.enums.ImClientAppType;
import cn.axzo.im.channel.netease.dto.MessageBody; import cn.axzo.im.channel.netease.dto.MessageBody;
import cn.axzo.im.dao.repository.MessageHistoryDao; import cn.axzo.im.dao.repository.MessageHistoryDao;
import cn.axzo.im.dao.repository.UpdatableMessageDao; import cn.axzo.im.dao.repository.UpdatableMessageDao;
@ -79,12 +80,12 @@ public class UpdatableMessageManager {
collector.addMessage(message); collector.addMessage(message);
message.setBatchNo(batchNo); message.setBatchNo(batchNo);
message.setTemplateId(request.getMsgTemplateId()); message.setTemplateId(request.getMsgTemplateId());
message.setRefTemplateId(request.getUpdatableRefTemplateId()); message.setRefTemplateId(request.getRefTemplateId());
message.setBizId(request.getBizId()); message.setBizId(request.getBizId());
message.setTaskId(task.getId()); message.setTaskId(task.getId());
message.setReceiverPersonId(person.getPersonId()); message.setReceiverPersonId(person.getPersonId());
message.setReceiverOuId(person.getOuId()); message.setReceiverOuId(person.getOuId());
message.setAppType(person.getAppType()); message.setAppType(ImClientAppType.fromNimAppType(person.getAppType()));
message.setMsgType(request.getTemplatedMsgType()); message.setMsgType(request.getTemplatedMsgType());
message.setState(UpdatableMessageState.TASK_CREATED); message.setState(UpdatableMessageState.TASK_CREATED);
message.setBizMessageId(UUIDUtil.uuidString()); message.setBizMessageId(UUIDUtil.uuidString());

View File

@ -69,7 +69,7 @@ public class UpdateSupport {
history.setBizId(message.getBizId()); history.setBizId(message.getBizId());
history.setFromAccount(message.getFromAccount()); history.setFromAccount(message.getFromAccount());
history.setToAccount(message.getToAccount()); history.setToAccount(message.getToAccount());
history.setAppType(message.getAppType().getCode()); history.setAppType(message.getAppType().toNimAppType().getCode());
history.setChannel(imChannel.getProviderType()); history.setChannel(imChannel.getProviderType());
MessageCustomBody messageBody = new MessageCustomBody(); MessageCustomBody messageBody = new MessageCustomBody();
messageBody.setToImAccount(message.getToAccount()); messageBody.setToImAccount(message.getToAccount());