Search in sources :

Example 1 with Order

use of com.baomidou.samples.seata.entity.Order in project dynamic-datasource-samples by dynamic-datasource.

the class OrderServiceImpl method placeOrder.

@DS("order")
@Override
@Transactional
@GlobalTransactional
public void placeOrder(PlaceOrderRequest request) {
    log.info("=============ORDER START=================");
    Long userId = request.getUserId();
    Long productId = request.getProductId();
    Integer amount = request.getAmount();
    log.info("收到下单请求,用户:{}, 商品:{},数量:{}", userId, productId, amount);
    log.info("当前 XID: {}", RootContext.getXID());
    Order order = Order.builder().userId(userId).productId(productId).status(OrderStatus.INIT).amount(amount).build();
    orderMapper.insert(order);
    log.info("订单一阶段生成,等待扣库存付款中");
    // 扣减库存并计算总价
    Double totalPrice = productService.reduceStock(productId, amount);
    // 扣减余额
    accountService.reduceBalance(userId, totalPrice);
    order.setStatus(OrderStatus.SUCCESS);
    order.setTotalPrice(totalPrice);
    orderMapper.updateById(order);
    log.info("订单已成功下单");
    log.info("=============ORDER END=================");
}
Also used : Order(com.baomidou.samples.seata.entity.Order) GlobalTransactional(io.seata.spring.annotation.GlobalTransactional) DS(com.baomidou.dynamic.datasource.annotation.DS) GlobalTransactional(io.seata.spring.annotation.GlobalTransactional) Transactional(org.springframework.transaction.annotation.Transactional)

Aggregations

DS (com.baomidou.dynamic.datasource.annotation.DS)1 Order (com.baomidou.samples.seata.entity.Order)1 GlobalTransactional (io.seata.spring.annotation.GlobalTransactional)1 Transactional (org.springframework.transaction.annotation.Transactional)1