diff --git a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/PersonAccountAttribute.java b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/PersonAccountAttribute.java index 6c284b6..9c50a1a 100644 --- a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/PersonAccountAttribute.java +++ b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/PersonAccountAttribute.java @@ -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; } diff --git a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/SendTemplateMessageParam.java b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/SendTemplateMessageParam.java index 3188414..6997047 100644 --- a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/SendTemplateMessageParam.java +++ b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/SendTemplateMessageParam.java @@ -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(); diff --git a/im-center-common/src/main/java/cn/axzo/im/center/common/enums/ImClientAppType.java b/im-center-common/src/main/java/cn/axzo/im/center/common/enums/ImClientAppType.java new file mode 100644 index 0000000..e3117a0 --- /dev/null +++ b/im-center-common/src/main/java/cn/axzo/im/center/common/enums/ImClientAppType.java @@ -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!"); + } +} \ No newline at end of file diff --git a/im-center-server/src/main/java/cn/axzo/im/controller/MessageController.java b/im-center-server/src/main/java/cn/axzo/im/controller/MessageController.java index c192ce1..1190628 100644 --- a/im-center-server/src/main/java/cn/axzo/im/controller/MessageController.java +++ b/im-center-server/src/main/java/cn/axzo/im/controller/MessageController.java @@ -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 sendTemplateMessageAsync(SendTemplateMessageParam sendMessageParam) { - String sendImAccount = check(sendMessageParam); + public ApiResult 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 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 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 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); diff --git a/im-center-server/src/main/java/cn/axzo/im/entity/HistoryRecordExt.java b/im-center-server/src/main/java/cn/axzo/im/entity/HistoryRecordExt.java index 4d9a816..0c43005 100644 --- a/im-center-server/src/main/java/cn/axzo/im/entity/HistoryRecordExt.java +++ b/im-center-server/src/main/java/cn/axzo/im/entity/HistoryRecordExt.java @@ -7,6 +7,7 @@ import lombok.Data; */ @Data public class HistoryRecordExt { + private Boolean isSenderRobot; private String sendApi; private String sendRespDesc; private String batchSendId; diff --git a/im-center-server/src/main/java/cn/axzo/im/entity/MessageTask.java b/im-center-server/src/main/java/cn/axzo/im/entity/MessageTask.java index 3218233..f54cc2f 100644 --- a/im-center-server/src/main/java/cn/axzo/im/entity/MessageTask.java +++ b/im-center-server/src/main/java/cn/axzo/im/entity/MessageTask.java @@ -157,6 +157,8 @@ public class MessageTask { */ private List appTypes; + private Boolean isSenderRobot; + public TemplatedMsgType determineTemplatedMsgType() { return templatedMsgType == null ? TemplatedMsgType.TEMPLATE : templatedMsgType; } diff --git a/im-center-server/src/main/java/cn/axzo/im/entity/UpdatableMessage.java b/im-center-server/src/main/java/cn/axzo/im/entity/UpdatableMessage.java index 642bb4f..278559f 100644 --- a/im-center-server/src/main/java/cn/axzo/im/entity/UpdatableMessage.java +++ b/im-center-server/src/main/java/cn/axzo/im/entity/UpdatableMessage.java @@ -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; diff --git a/im-center-server/src/main/java/cn/axzo/im/service/impl/MessageTaskServiceImpl.java b/im-center-server/src/main/java/cn/axzo/im/service/impl/MessageTaskServiceImpl.java index d929f50..3004fdf 100644 --- a/im-center-server/src/main/java/cn/axzo/im/service/impl/MessageTaskServiceImpl.java +++ b/im-center-server/src/main/java/cn/axzo/im/service/impl/MessageTaskServiceImpl.java @@ -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 oldValue)); } diff --git a/im-center-server/src/main/java/cn/axzo/im/updatable/UpdatableMessageManager.java b/im-center-server/src/main/java/cn/axzo/im/updatable/UpdatableMessageManager.java index 350be31..a0777e3 100644 --- a/im-center-server/src/main/java/cn/axzo/im/updatable/UpdatableMessageManager.java +++ b/im-center-server/src/main/java/cn/axzo/im/updatable/UpdatableMessageManager.java @@ -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()); diff --git a/im-center-server/src/main/java/cn/axzo/im/updatable/UpdateSupport.java b/im-center-server/src/main/java/cn/axzo/im/updatable/UpdateSupport.java index b50abed..797ea52 100644 --- a/im-center-server/src/main/java/cn/axzo/im/updatable/UpdateSupport.java +++ b/im-center-server/src/main/java/cn/axzo/im/updatable/UpdateSupport.java @@ -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());