|
|
@@ -2,18 +2,23 @@ package com.izouma.yags.service;
|
|
|
|
|
|
import com.izouma.yags.config.Constants;
|
|
|
import com.izouma.yags.config.GeneralProperties;
|
|
|
+import com.izouma.yags.domain.JumpForm;
|
|
|
import com.izouma.yags.domain.TicketOrder;
|
|
|
+import com.izouma.yags.domain.UserBalance;
|
|
|
import com.izouma.yags.enums.BalanceType;
|
|
|
import com.izouma.yags.enums.OrderStatus;
|
|
|
import com.izouma.yags.enums.PayMethod;
|
|
|
import com.izouma.yags.exception.BusinessException;
|
|
|
+import com.izouma.yags.repo.JumpFormRepo;
|
|
|
import com.izouma.yags.repo.TicketOrderRepo;
|
|
|
+import com.izouma.yags.repo.UserBalanceRepo;
|
|
|
import com.izouma.yags.repo.UserTicketRepo;
|
|
|
import org.springframework.context.annotation.Lazy;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.web.context.request.RequestContextHolder;
|
|
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.net.URLEncoder;
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
import java.time.LocalDateTime;
|
|
|
@@ -28,11 +33,13 @@ public class OrderPayService {
|
|
|
private final TicketOrderService ticketOrderService;
|
|
|
private final GeneralProperties generalProperties;
|
|
|
private final SandPayService sandPayService;
|
|
|
+ private final JumpFormRepo jumpFormRepo;
|
|
|
+ private final UserBalanceRepo userBalanceRepo;
|
|
|
|
|
|
public OrderPayService(TicketOrderRepo ticketOrderRepo, ReportService.AlipayService alipayService,
|
|
|
UserBalanceService userBalanceService, UserTicketRepo userTicketRepo,
|
|
|
@Lazy TicketOrderService ticketOrderService, GeneralProperties generalProperties,
|
|
|
- SandPayService sandPayService) {
|
|
|
+ SandPayService sandPayService, JumpFormRepo jumpFormRepo, UserBalanceRepo userBalanceRepo) {
|
|
|
this.ticketOrderRepo = ticketOrderRepo;
|
|
|
this.alipayService = alipayService;
|
|
|
this.userBalanceService = userBalanceService;
|
|
|
@@ -40,6 +47,8 @@ public class OrderPayService {
|
|
|
this.ticketOrderService = ticketOrderService;
|
|
|
this.generalProperties = generalProperties;
|
|
|
this.sandPayService = sandPayService;
|
|
|
+ this.jumpFormRepo = jumpFormRepo;
|
|
|
+ this.userBalanceRepo = userBalanceRepo;
|
|
|
}
|
|
|
|
|
|
public Object pay(Long userId, Long orderId, PayMethod payMethod) throws Exception {
|
|
|
@@ -63,17 +72,27 @@ public class OrderPayService {
|
|
|
}
|
|
|
}
|
|
|
case BALANCE: {
|
|
|
+ BigDecimal balance = userBalanceRepo.findByUserId(userId).map(UserBalance::getBalance).orElse(BigDecimal.ZERO);
|
|
|
+ if (balance.compareTo(ticketOrder.getTotalPrice()) < 0) {
|
|
|
+ throw new BusinessException("余额不足");
|
|
|
+ }
|
|
|
userBalanceService.modifyBalance(userId, ticketOrder.getTotalPrice().negate(), BalanceType.PAY);
|
|
|
ticketOrderService.notify(ticketOrder.getId(), payMethod, null);
|
|
|
return null;
|
|
|
}
|
|
|
case SAND_QUICK: {
|
|
|
- sandPayService.payQuick(orderId + "", "购买门票", ticketOrder.getTotalPrice(),
|
|
|
+ String html = sandPayService.payQuick(orderId + "", "购买门票", ticketOrder.getTotalPrice(),
|
|
|
LocalDateTime.now().plusMinutes(3), Constants.OrderNotifyType.TICKET_ORDER,
|
|
|
generalProperties.getHost() + "/h5/home");
|
|
|
+ JumpForm jumpForm = jumpFormRepo.save(new JumpForm(html));
|
|
|
+ return "/order/form/" + jumpForm.getId();
|
|
|
}
|
|
|
default:
|
|
|
throw new BusinessException("不支持此支付方式");
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ public String getForm(Long id) {
|
|
|
+ return jumpFormRepo.findById(id).map(JumpForm::getContent).orElseThrow(new BusinessException("无记录"));
|
|
|
+ }
|
|
|
}
|