REQ-3057-card: a lot of staff
This commit is contained in:
parent
3d87939570
commit
e25f075061
@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
@ -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!");
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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);
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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());
|
||||||
|
|||||||
@ -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());
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user