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 05eac95..b275915 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 @@ -39,7 +39,6 @@ import cn.axzo.im.service.MessageTaskService; import cn.axzo.im.service.RobotMsgTemplateService; import cn.axzo.im.updatable.UpdatableMessageManager; import cn.axzo.im.updatable.UpdatableMessageQueryService; -import cn.axzo.im.updatable.UpdateSupport; import cn.axzo.im.utils.BizAssertions; import cn.axzo.pokonyan.exception.Aassert; import com.alibaba.fastjson.JSON; @@ -56,6 +55,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.support.TransactionTemplate; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; @@ -99,9 +99,9 @@ public class MessageController implements MessageApi { @Autowired private UpdatableMessageManager updatableMessageManager; @Autowired - private UpdateSupport updateSupport; - @Autowired private UpdatableMessageQueryService updatableMessageQueryService; + @Autowired + private TransactionTemplate transactionTemplate; @Override @@ -247,6 +247,7 @@ public class MessageController implements MessageApi { MessageTask.BizData bizData = MessageTask.BizData.builder() .messageBody(JSON.toJSONString(request.getMessageBody())) .isSenderRobot(false) + .isChatMessage(true) .senderPersonId(request.determineSenderPersonId()) .nimMessageType(request.getMessageType()) .build(); @@ -262,17 +263,23 @@ public class MessageController implements MessageApi { .build()); } } - MessageTask messageTask = messageTaskService.create(MessageTask.builder() - .bizId(request.getBizId()) - .sendImAccount(sendImAccount) - .receivePersons(receivePersons) - .status(MessageTaskStatus.PENDING) - .bizData(bizData) - .planStartTime(now) - .createAt(now) - .sendPriority(SendPriority.CHAT_MESSAGE.getPriority()) - .apiChannel(ApiChannel.COMMON_MESSAGE) - .build()); + MessageTask messageTask = transactionTemplate.execute(unused -> { + MessageTask task = messageTaskService.create(MessageTask.builder() + .bizId(request.getBizId()) + .sendImAccount(sendImAccount) + .receivePersons(receivePersons) + .status(MessageTaskStatus.PENDING) + .bizData(bizData) + .planStartTime(now) + .createAt(now) + .sendPriority(SendPriority.CHAT_MESSAGE.getPriority()) + .apiChannel(ApiChannel.COMMON_MESSAGE) + .build()); + task = messageTaskService.getById(task.getId()); + messageTaskService.createMessageHistory(task); + return task; + }); + //noinspection DataFlowIssue return ApiResult.ok(messageTask.getId()); } 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 3e8e70f..20a8333 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 @@ -170,6 +170,8 @@ public class MessageTask { private NimMessageType nimMessageType; + private boolean isChatMessage; + public boolean determineIsSenderRobot() { return isSenderRobot != null && isSenderRobot; } diff --git a/im-center-server/src/main/java/cn/axzo/im/job/CreateMessageHistoryJob.java b/im-center-server/src/main/java/cn/axzo/im/job/CreateMessageHistoryJob.java index 885755d..a8e8367 100644 --- a/im-center-server/src/main/java/cn/axzo/im/job/CreateMessageHistoryJob.java +++ b/im-center-server/src/main/java/cn/axzo/im/job/CreateMessageHistoryJob.java @@ -59,6 +59,9 @@ public class CreateMessageHistoryJob extends IJobHandler { Page page = messageTaskService.page(req); if (CollectionUtils.isNotEmpty(page.getRecords())) { page.getRecords().forEach(messageTask -> { + MessageTask.BizData bizData = messageTask.getBizData(); + if (bizData != null && bizData.isChatMessage()) + return; count.set(count.get() + 1); try { messageTaskService.createMessageHistory(messageTask); 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 f4d1843..173f74f 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 @@ -45,6 +45,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import java.io.Serializable; import java.util.Collections; import java.util.Date; import java.util.HashMap;