1 Star 1 Fork 3

神帅 / ftgo-application

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
ReviseOrderSaga.java 4.35 KB
一键复制 编辑 原始数据 按行查看 历史
package net.chrisrichardson.ftgo.orderservice.sagas.reviseorder;
import io.eventuate.tram.commands.consumer.CommandWithDestination;
import io.eventuate.tram.sagas.simpledsl.SimpleSaga;
import net.chrisrichardson.ftgo.accountservice.api.AccountingServiceChannels;
import net.chrisrichardson.ftgo.orderservice.api.OrderServiceChannels;
import net.chrisrichardson.ftgo.orderservice.sagaparticipants.BeginReviseOrderCommand;
import net.chrisrichardson.ftgo.orderservice.sagaparticipants.BeginReviseOrderReply;
import net.chrisrichardson.ftgo.kitchenservice.api.BeginReviseTicketCommand;
import net.chrisrichardson.ftgo.orderservice.sagaparticipants.ConfirmReviseOrderCommand;
import net.chrisrichardson.ftgo.accountservice.api.ReviseAuthorization;
import net.chrisrichardson.ftgo.orderservice.sagaparticipants.UndoBeginReviseOrderCommand;
import net.chrisrichardson.ftgo.kitchenservice.api.ConfirmReviseTicketCommand;
import net.chrisrichardson.ftgo.kitchenservice.api.KitchenServiceChannels;
import net.chrisrichardson.ftgo.kitchenservice.api.UndoBeginReviseTicketCommand;
import io.eventuate.tram.sagas.orchestration.SagaDefinition;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.PostConstruct;
import static io.eventuate.tram.commands.consumer.CommandWithDestinationBuilder.send;
public class ReviseOrderSaga implements SimpleSaga<ReviseOrderSagaData> {
private Logger logger = LoggerFactory.getLogger(getClass());
private SagaDefinition<ReviseOrderSagaData> sagaDefinition;
@PostConstruct
public void initializeSagaDefinition() {
sagaDefinition = step()
.invokeParticipant(this::beginReviseOrder)
.onReply(BeginReviseOrderReply.class, this::handleBeginReviseOrderReply)
.withCompensation(this::undoBeginReviseOrder)
.step()
.invokeParticipant(this::beginReviseTicket)
.withCompensation(this::undoBeginReviseTicket)
.step()
.invokeParticipant(this::reviseAuthorization)
.step()
.invokeParticipant(this::confirmTicketRevision)
.step()
.invokeParticipant(this::confirmOrderRevision)
.build();
}
private void handleBeginReviseOrderReply(ReviseOrderSagaData data, BeginReviseOrderReply reply) {
logger.info("ƒ order total: {}", reply.getRevisedOrderTotal());
data.setRevisedOrderTotal(reply.getRevisedOrderTotal());
}
@Override
public SagaDefinition<ReviseOrderSagaData> getSagaDefinition() {
return sagaDefinition;
}
private CommandWithDestination confirmOrderRevision(ReviseOrderSagaData data) {
return send(new ConfirmReviseOrderCommand(data.getOrderId(), data.getOrderRevision()))
.to(OrderServiceChannels.COMMAND_CHANNEL)
.build();
}
private CommandWithDestination confirmTicketRevision(ReviseOrderSagaData data) {
return send(new ConfirmReviseTicketCommand(data.getRestaurantId(), data.getOrderId(), data.getOrderRevision().getRevisedOrderLineItems()))
.to(KitchenServiceChannels.COMMAND_CHANNEL)
.build();
}
private CommandWithDestination reviseAuthorization(ReviseOrderSagaData data) {
return send(new ReviseAuthorization(data.getConsumerId(), data.getOrderId(), data.getRevisedOrderTotal()))
.to(AccountingServiceChannels.accountingServiceChannel)
.build();
}
private CommandWithDestination undoBeginReviseTicket(ReviseOrderSagaData data) {
return send(new UndoBeginReviseTicketCommand(data.getRestaurantId(), data.getOrderId()))
.to(KitchenServiceChannels.COMMAND_CHANNEL)
.build();
}
private CommandWithDestination beginReviseTicket(ReviseOrderSagaData data) {
return send(new BeginReviseTicketCommand(data.getRestaurantId(), data.getOrderId(), data.getOrderRevision().getRevisedOrderLineItems()))
.to(KitchenServiceChannels.COMMAND_CHANNEL)
.build();
}
private CommandWithDestination undoBeginReviseOrder(ReviseOrderSagaData data) {
return send(new UndoBeginReviseOrderCommand(data.getOrderId()))
.to(OrderServiceChannels.COMMAND_CHANNEL)
.build();
}
private CommandWithDestination beginReviseOrder(ReviseOrderSagaData data) {
return send(new BeginReviseOrderCommand(data.getOrderId(), data.getOrderRevision()))
.to(OrderServiceChannels.COMMAND_CHANNEL)
.build();
}
}
1
https://gitee.com/codergit.com/ftgo-application.git
git@gitee.com:codergit.com/ftgo-application.git
codergit.com
ftgo-application
ftgo-application
master

搜索帮助