xiongzhu 3 лет назад
Родитель
Сommit
d39a7d7e40

+ 19 - 0
src/main/java/com/izouma/yags/domain/JumpForm.java

@@ -0,0 +1,19 @@
+package com.izouma.yags.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+
+@Data
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class JumpForm extends BaseEntity {
+    @Column(columnDefinition = "TEXT")
+    private String content;
+}

+ 7 - 0
src/main/java/com/izouma/yags/repo/JumpFormRepo.java

@@ -0,0 +1,7 @@
+package com.izouma.yags.repo;
+
+import com.izouma.yags.domain.JumpForm;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface JumpFormRepo extends JpaRepository<JumpForm, Long> {
+}

+ 1 - 2
src/main/java/com/izouma/yags/security/WebSecurityConfig.java

@@ -1,11 +1,9 @@
 package com.izouma.yags.security;
 package com.izouma.yags.security;
 
 
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Bean;
-import org.springframework.http.HttpMethod;
 import org.springframework.security.authentication.AuthenticationManager;
 import org.springframework.security.authentication.AuthenticationManager;
 import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
 import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
 import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
 import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
@@ -84,6 +82,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
                 .antMatchers("/ticketOrder/get/*/status").permitAll()
                 .antMatchers("/ticketOrder/get/*/status").permitAll()
                 .antMatchers("/room/roomList").permitAll()
                 .antMatchers("/room/roomList").permitAll()
                 .antMatchers("/notify/alipay").permitAll()
                 .antMatchers("/notify/alipay").permitAll()
+                .antMatchers("/order/pay/form/**").permitAll()
                 // all other requests need to be authenticated
                 // all other requests need to be authenticated
                 .anyRequest().authenticated().and()
                 .anyRequest().authenticated().and()
                 // make sure we use stateless session; session won't be used to
                 // make sure we use stateless session; session won't be used to

+ 21 - 2
src/main/java/com/izouma/yags/service/OrderPayService.java

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

+ 0 - 2
src/main/java/com/izouma/yags/service/SandPayService.java

@@ -15,7 +15,6 @@ import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.io.IOException;
 import java.io.IOException;
@@ -38,7 +37,6 @@ public class SandPayService {
     private final SandPayProperties             sandPayProperties;
     private final SandPayProperties             sandPayProperties;
     private final SnowflakeIdWorker             snowflakeIdWorker;
     private final SnowflakeIdWorker             snowflakeIdWorker;
     private final GeneralProperties             generalProperties;
     private final GeneralProperties             generalProperties;
-    private final RedisTemplate<String, Object> redisTemplate;
 
 
     public static String paddingOrderId(String orderId) {
     public static String paddingOrderId(String orderId) {
         if (orderId != null && orderId.length() < 12) {
         if (orderId != null && orderId.length() < 12) {

+ 8 - 4
src/main/java/com/izouma/yags/web/OrderPayController.java

@@ -4,10 +4,7 @@ import com.izouma.yags.enums.PayMethod;
 import com.izouma.yags.service.OrderPayService;
 import com.izouma.yags.service.OrderPayService;
 import com.izouma.yags.utils.SecurityUtils;
 import com.izouma.yags.utils.SecurityUtils;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 
 @RestController
 @RestController
 @RequestMapping("/order/pay")
 @RequestMapping("/order/pay")
@@ -16,7 +13,14 @@ public class OrderPayController {
     private OrderPayService orderPayService;
     private OrderPayService orderPayService;
 
 
     @GetMapping("/{id}/{method}")
     @GetMapping("/{id}/{method}")
+    @ResponseBody
     public Object pay(@PathVariable Long id, @PathVariable PayMethod method) throws Exception {
     public Object pay(@PathVariable Long id, @PathVariable PayMethod method) throws Exception {
         return orderPayService.pay(SecurityUtils.getAuthenticatedUser().getId(), id, method);
         return orderPayService.pay(SecurityUtils.getAuthenticatedUser().getId(), id, method);
     }
     }
+
+    @RequestMapping(value = "/form/{id}", produces = "text/html")
+    @ResponseBody
+    public String pay(@PathVariable Long id) {
+        return orderPayService.getForm(id);
+    }
 }
 }

+ 5 - 2
src/main/resources/static/download_app.html

@@ -142,7 +142,7 @@
 </head>
 </head>
 
 
 <body>
 <body>
-<img src="img/app_icon_raex.png" class="icon"/>
+<img src="img/app_icon.png" class="icon"/>
 <div class="marvel-device note8" id="device">
 <div class="marvel-device note8" id="device">
     <div class="inner"></div>
     <div class="inner"></div>
     <div class="overflow">
     <div class="overflow">
@@ -152,7 +152,7 @@
     <div class="volume"></div>
     <div class="volume"></div>
     <div class="screen">
     <div class="screen">
         <div class="screen-icon-wrapper">
         <div class="screen-icon-wrapper">
-            <img src="img/app_icon_raex.png" class="screen-icon"/>
+            <img src="img/app_icon.png" class="screen-icon"/>
         </div>
         </div>
     </div>
     </div>
 </div>
 </div>
@@ -183,6 +183,9 @@
     <img src="img/zhifu_img_liulanqi_ios.png"/>
     <img src="img/zhifu_img_liulanqi_ios.png"/>
 </div>
 </div>
 <script>
 <script>
+    $('#btn-android').attr('href', 'https://yags.oss-cn-shenzhen.aliyuncs.com/apk/app-release.apk');
+    $('#btn-android').show();
+
     if (/micromessenger/i.test(navigator.userAgent)) {
     if (/micromessenger/i.test(navigator.userAgent)) {
         $('.mask').fadeIn();
         $('.mask').fadeIn();
     }
     }

BIN
src/main/resources/static/img/app_icon.png


+ 13 - 0
src/main/resources/static/pay_return.html

@@ -0,0 +1,13 @@
+<!doctype html>
+<html lang="zh-CN">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport"
+          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <title>支付成功</title>
+</head>
+<body>
+
+</body>
+</html>