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;
import cn.axzo.im.center.common.enums.AppTypeEnum;
import cn.axzo.im.center.common.enums.ImClientAppType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -41,6 +41,6 @@ public class PersonAccountAttribute {
* @See cn.axzo.im.center.common.enums.AppTypeEnum
*/
@NotNull(message = "appType不能为空")
private AppTypeEnum appType;
private ImClientAppType appType;
}

View File

@ -21,6 +21,11 @@ import java.util.Set;
@AllArgsConstructor
public class SendTemplateMessageParam {
/**
* 发送人
*/
private PersonAccountAttribute sender;
/**
* 消息接收用户信息
*/
@ -66,7 +71,7 @@ public class SendTemplateMessageParam {
private TemplatedMsgType templatedMsgType = TemplatedMsgType.TEMPLATE;
private String updatableRefTemplateId;
private String refTemplateId;
public boolean 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.SendPriority;
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.AsyncSendMessageParam;
import cn.axzo.im.center.api.vo.req.CustomMessageInfo;
@ -164,35 +166,47 @@ public class MessageController implements MessageApi {
@Override
@Transactional
public ApiResult<MessageTaskResp> sendTemplateMessageAsync(SendTemplateMessageParam sendMessageParam) {
String sendImAccount = check(sendMessageParam);
public ApiResult<MessageTaskResp> sendTemplateMessageAsync(SendTemplateMessageParam request) {
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()
.msgTemplateContent(sendMessageParam.getMsgTemplateContent())
.msgTemplateId(sendMessageParam.getMsgTemplateId())
.templatedMsgType(sendMessageParam.getTemplatedMsgType())
.msgTemplateContent(request.getMsgTemplateContent())
.msgTemplateId(request.getMsgTemplateId())
.templatedMsgType(request.getTemplatedMsgType())
.isSenderRobot(request.getSender() == null)
.build();
Date now = new Date();
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()
.bizId(sendMessageParam.getBizId())
.bizId(request.getBizId())
.sendImAccount(sendImAccount)
.receivePersons(receivePersons)
.status(MessageTaskStatus.PENDING)
.title(sendMessageParam.getMsgHeader())
.content(sendMessageParam.getMsgContent())
.title(request.getMsgHeader())
.content(request.getMsgContent())
.bizData(bizData)
.ext(sendMessageParam.getExt())
.ext(request.getExt())
.planStartTime(now)
.createAt(now)
.sendPriority(SendPriority.TEMPLATE_MESSAGE
.determinePriority(sendMessageParam.getSendPriority()))
.determinePriority(request.getSendPriority()))
.apiChannel(ApiChannel.COMMON_MESSAGE)
.build());
List<UpdatableMessageSendResult> updatableMessageSendResults = Collections.emptyList();
if (sendMessageParam.isUpdatable()) {
updatableMessageSendResults = updatableMessageManager.createUpdatableMessage(messageTask, sendMessageParam, receivePersons);
if (request.isUpdatable()) {
updatableMessageSendResults = updatableMessageManager.createUpdatableMessage(messageTask, request, receivePersons);
}
MessageTaskResp messageTaskResp = toMessageTaskResp(messageTask);
messageTaskResp.setUpdatableMessageSendResults(updatableMessageSendResults);

View File

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

View File

@ -157,6 +157,8 @@ public class MessageTask {
*/
private List<AppTypeEnum> appTypes;
private Boolean isSenderRobot;
public TemplatedMsgType determineTemplatedMsgType() {
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.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.enums.UpdatableMessageState;
import com.alibaba.fastjson.JSONObject;
@ -32,7 +32,7 @@ public class UpdatableMessage implements MessageUpdateInfo {
private String toAccount;
private String receiverPersonId;
private Long receiverOuId;
private AppTypeEnum appType;
private ImClientAppType appType;
private TemplatedMsgType msgType;
private UpdatableMessageState state;
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.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;
@ -240,9 +241,13 @@ public class MessageTaskServiceImpl extends ServiceImpl<MessageTaskMapper, Messa
messageHistory.setToAccount("");
messageHistory.setResult(AccountService.NO_IM_ACCOUNT_MESSAGE);
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()));
return messageHistory;
}

View File

@ -3,6 +3,7 @@ package cn.axzo.im.updatable;
import cn.axzo.basics.common.constant.enums.CodeDefinition;
import cn.axzo.im.center.api.vo.PersonAccountAttribute;
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.UpdatableMessage;
import lombok.EqualsAndHashCode;
@ -35,8 +36,9 @@ class InitHistories {
PersonAccountAttribute person = new PersonAccountAttribute();
person.setPersonId(history.getReceivePersonId());
person.setOuId(history.getReceiveOuId());
person.setAppType(CodeDefinition.findByCode(
AppTypeEnum.class, history.getAppType()).orElse(null));
AppTypeEnum appType = CodeDefinition.findByCode(
AppTypeEnum.class, history.getAppType()).orElse(null);
person.setAppType(ImClientAppType.fromNimAppType(appType));
return new HistoryTaskAccount(history.getImMessageTaskId(), person);
}, 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.NonUpdateMessageReason;
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.dao.repository.MessageHistoryDao;
import cn.axzo.im.dao.repository.UpdatableMessageDao;
@ -79,12 +80,12 @@ public class UpdatableMessageManager {
collector.addMessage(message);
message.setBatchNo(batchNo);
message.setTemplateId(request.getMsgTemplateId());
message.setRefTemplateId(request.getUpdatableRefTemplateId());
message.setRefTemplateId(request.getRefTemplateId());
message.setBizId(request.getBizId());
message.setTaskId(task.getId());
message.setReceiverPersonId(person.getPersonId());
message.setReceiverOuId(person.getOuId());
message.setAppType(person.getAppType());
message.setAppType(ImClientAppType.fromNimAppType(person.getAppType()));
message.setMsgType(request.getTemplatedMsgType());
message.setState(UpdatableMessageState.TASK_CREATED);
message.setBizMessageId(UUIDUtil.uuidString());

View File

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