diff --git a/service/src/main/java/com/sv/service/api/OrderService.java b/service/src/main/java/com/sv/service/api/OrderService.java index edbefad..ec915a3 100644 --- a/service/src/main/java/com/sv/service/api/OrderService.java +++ b/service/src/main/java/com/sv/service/api/OrderService.java @@ -24,7 +24,11 @@ import org.apache.commons.lang3.time.DateFormatUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.TransactionDefinition; +import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.support.DefaultTransactionDefinition; import org.springframework.web.bind.annotation.RequestBody; import javax.annotation.Resource; @@ -69,6 +73,9 @@ public class OrderService extends BaseServiceImpl { @Resource private MemberKeyLock memberKeyLock; + @Resource + private PlatformTransactionManager transactionManager; + /** * 创建订单 * @@ -314,17 +321,30 @@ public class OrderService extends BaseServiceImpl { return result; } - Order order = new Order(); - order.setOrderSn(createSn()); - order.setPayType(payTypeEnum.value); - order.setPrice(price); - order.setPayStatus(PayStatusEnum.NOT_PAY.value); - order.setType(OrderTypeEnum.BASKETBALL_ORDER.value); - order.setPlatformId(venue.getPlatformId()); - order.setMemberId(memberId); - order.setParentOrderId(venueId); - order.setCreatedId(enterFlag); - orderMapper.insert(order); + DefaultTransactionDefinition def = new DefaultTransactionDefinition(); + def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); + TransactionStatus txStatus = transactionManager.getTransaction(def); + Order order; + try { + order = orderMapper.findPendingBasketballOrder(memberId, venueId); + if (order == null) { + order = new Order(); + order.setOrderSn(createSn()); + order.setPayType(payTypeEnum.value); + order.setPrice(price); + order.setPayStatus(PayStatusEnum.NOT_PAY.value); + order.setType(OrderTypeEnum.BASKETBALL_ORDER.value); + order.setPlatformId(venue.getPlatformId()); + order.setMemberId(memberId); + order.setParentOrderId(venueId); + order.setCreatedId(enterFlag); + orderMapper.insert(order); + } + transactionManager.commit(txStatus); + } catch (RuntimeException e) { + transactionManager.rollback(txStatus); + throw e; + } if (EnterEnum.OUT.value == enterFlag) { BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrder(memberId, venueId);