Переглянути джерело

全部模块:设备自动登出

tangxiangan 1 рік тому
батько
коміт
e7a386df67

+ 14 - 2
pdf-office-api/pdf-office-api-payment/src/main/java/cn/kdan/cloud/pdf/office/api/payment/enums/PaymentMethodEnum.java

@@ -1,5 +1,7 @@
 package cn.kdan.cloud.pdf.office.api.payment.enums;
 
+import cn.kdan.cloud.pdf.office.common.enums.ExceptionEnum;
+import cn.kdan.cloud.pdf.office.common.exception.BackendRuntimeException;
 import lombok.Getter;
 
 /**
@@ -12,12 +14,22 @@ public enum PaymentMethodEnum {
     ALIPAY(1),
     WXPAY(2),
     PADDLE(3),
-    NO_NEED_TO_PAY(4),
-;
+    NO_NEED_TO_PAY(4);
+
     @Getter
     private final Integer value;
 
     PaymentMethodEnum(int value) {
         this.value = value;
     }
+
+    public static PaymentMethodEnum fromValue(int value) {
+        for (PaymentMethodEnum method : PaymentMethodEnum.values()) {
+            if (method.value.equals(value)) {
+                return method;
+            }
+        }
+        throw new BackendRuntimeException(ExceptionEnum.EXCEPTION_MSG_CREATE_ORDER_PARAMETER);
+    }
+
 }

+ 32 - 0
pdf-office-api/pdf-office-api-payment/src/main/java/cn/kdan/cloud/pdf/office/api/payment/enums/ProductTypeEnum.java

@@ -0,0 +1,32 @@
+package cn.kdan.cloud.pdf.office.api.payment.enums;
+
+import cn.kdan.cloud.pdf.office.common.enums.ExceptionEnum;
+import cn.kdan.cloud.pdf.office.common.exception.BackendRuntimeException;
+import lombok.Getter;
+
+/**
+ * @author ComPDFKit-TXA 2023/1/29
+ * <p>
+ * 产品类型 枚举类
+ */
+public enum ProductTypeEnum {
+    PACKAGE(1),
+    PLAN(2);
+
+    @Getter
+    private final Integer value;
+
+    ProductTypeEnum(int value) {
+        this.value = value;
+    }
+
+    public static ProductTypeEnum fromValue(int value) {
+        for (ProductTypeEnum method : ProductTypeEnum.values()) {
+            if (method.value.equals(value)) {
+                return method;
+            }
+        }
+        throw new BackendRuntimeException(ExceptionEnum.EXCEPTION_MSG_CREATE_ORDER_PARAMETER);
+    }
+
+}

+ 26 - 11
pdf-office-api/pdf-office-api-product/src/main/java/cn/kdan/cloud/pdf/office/api/product/vo/ProductVO.java

@@ -25,7 +25,7 @@ public class ProductVO {
      */
     private Integer appId;
     /**
-     * 
+     *
      */
     private String code;
     /**
@@ -33,39 +33,39 @@ public class ProductVO {
      */
     private BigDecimal price;
     /**
-     * 
+     *
      */
     private String forVersion;
     /**
-     * 
+     *
      */
     private String forPeriod;
     /**
-     * 
+     *
      */
     private Integer maxDeviceNum;
     /**
-     * 
+     *
      */
     private String description;
     /**
-     * 
+     *
      */
     private BigDecimal cnyPrice;
     /**
-     * 
+     *
      */
     private Integer parentProductId;
     /**
-     * 
+     *
      */
     private String sonIds;
     /**
-     * 
+     *
      */
     private BigDecimal displayPrice;
     /**
-     * 
+     *
      */
     private BigDecimal cnyDisplayPrice;
 
@@ -82,5 +82,20 @@ public class ProductVO {
      * 产品平台 1:windows,2:mac  PlatformEnum
      */
     private Integer platform;
-
+    /**
+     *
+     */
+    private String model;
+    /**
+     * 支付方式    PAYPAL(0),     ALIPAY(1),     WXPAY(2),     PADDLE(3),     NO_NEED_TO_PAY(4);
+     */
+    private Integer payWay;
+    /**
+     * 第三方支付id
+     */
+    private String thirdPayId;
+    /**
+     * 1单次购买产品 2订阅计划产品
+     */
+    private Integer type;
 }

+ 3 - 1
pdf-office-common/src/main/java/cn/kdan/cloud/pdf/office/common/enums/ExceptionEnum.java

@@ -45,7 +45,9 @@ public enum ExceptionEnum {
     EXCEPTION_MSG_USER_SUBSCRIPTION_IN_PROGRESS (324,"您目前还在订阅期内,暂时无法注销,请订阅期结束后再点击注销账号"),
     EXCEPTION_MSG_USER_TRAIL_IN_PROGRESS (325,"您目前还在试用期内,暂时无法注销,请订阅期结束后再点击注销账号"),
     EXCEPTION_TIME_TRANSFER_ERROR (326,"时间转换失败"),
-    EXCEPTION_MSG_PASSWORD_CONTAIN_EMPTY(327,"密码不能包含空格");
+    EXCEPTION_MSG_PASSWORD_CONTAIN_EMPTY(327,"密码不能包含空格"),
+
+    EXCEPTION_MSG_CREATE_ORDER_PARAMETER(328,"支付参数异常");
     private final Integer value;
     private final String msg;
 

+ 2 - 2
pdf-office-generate/src/main/resources/application.yml

@@ -8,7 +8,7 @@ spring:
     static-locations: classpath:/views/
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://${DB_URL:81.68.234.235:33056/information_schema}?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8
+    url: jdbc:mysql://${DB_URL:124.223.7.184:33056/information_schema}?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8
     username: ${DB_USERNAME:root}
     password: ${DB_PASSWORD:root123}
     hikari:
@@ -25,4 +25,4 @@ spring:
 
 logging:
   level:
-    cn.kdan.mapper: debug
+    cn.kdan.mapper: debug

+ 46 - 6
pdf-office-payment/src/main/java/cn/kdan/cloud/pdf/office/payment/service/impl/OrderServiceImpl.java

@@ -1,22 +1,29 @@
 package cn.kdan.cloud.pdf.office.payment.service.impl;
 
-import cn.kdan.cloud.pdf.office.api.payment.bo.GeneratePayLinkPaddleBO;
-import cn.kdan.cloud.pdf.office.api.payment.bo.GeneratePayLinkResultPaddleBO;
-import cn.kdan.cloud.pdf.office.api.payment.bo.OrderSucceededBO;
+import cn.kdan.cloud.pdf.office.api.payment.bo.*;
 import cn.kdan.cloud.pdf.office.api.payment.constant.OrderConstant;
+import cn.kdan.cloud.pdf.office.api.payment.constant.UserAction;
 import cn.kdan.cloud.pdf.office.api.payment.dto.ChargebackOrderDTO;
 import cn.kdan.cloud.pdf.office.api.payment.dto.CreatOrderDTO;
 import cn.kdan.cloud.pdf.office.api.payment.dto.CreatOrderManualDTO;
+import cn.kdan.cloud.pdf.office.api.payment.enums.PaymentMethodEnum;
+import cn.kdan.cloud.pdf.office.api.payment.enums.ProductTypeEnum;
+import cn.kdan.cloud.pdf.office.api.payment.paypal.ApplicationContext;
+import cn.kdan.cloud.pdf.office.api.payment.paypal.Money;
+import cn.kdan.cloud.pdf.office.api.payment.paypal.PayerName;
+import cn.kdan.cloud.pdf.office.api.payment.paypal.SubscriberRequest;
 import cn.kdan.cloud.pdf.office.api.payment.vo.CreatOrderResultVO;
 import cn.kdan.cloud.pdf.office.api.payment.vo.OrderUpdateVO;
 import cn.kdan.cloud.pdf.office.api.payment.vo.OrdersVO;
 import cn.kdan.cloud.pdf.office.api.product.feign.ProductApi;
 import cn.kdan.cloud.pdf.office.api.product.vo.ProductPriceVo;
+import cn.kdan.cloud.pdf.office.api.product.vo.ProductVO;
 import cn.kdan.cloud.pdf.office.common.constant.RabbitMqConstant;
 import cn.kdan.cloud.pdf.office.common.constant.RedisKeyConstant;
 import cn.kdan.cloud.pdf.office.common.exception.BackendRuntimeException;
 import cn.kdan.cloud.pdf.office.common.utils.MyDateUtils;
 import cn.kdan.cloud.pdf.office.payment.client.PaddleClient;
+import cn.kdan.cloud.pdf.office.payment.client.PaypalClient;
 import cn.kdan.cloud.pdf.office.payment.entity.Order;
 import cn.kdan.cloud.pdf.office.payment.error.ErrorMessage;
 import cn.kdan.cloud.pdf.office.payment.mapper.OrderMapper;
@@ -29,6 +36,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 
@@ -52,6 +60,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
     private final RabbitTemplate rabbitTemplate;
 
+
+    private final PaypalClient paypalClient;
+
 //    private final SubscriptionsService subscriptionsService;
 
     @Override
@@ -61,12 +72,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                     ".concat('-').concat(#creatOrderDTO.paymentMethod.value)",
             cacheManager = "myRedisCacheManager", unless = "#result == null")
     public CreatOrderResultVO creatOrder(CreatOrderDTO creatOrderDTO) {
+        ProductVO product = productApi.getProduct(creatOrderDTO.getProductId()).getResult();
+        PaymentMethodEnum paymentMethodEnum = PaymentMethodEnum.fromValue(product.getPayWay());
         log.info("creatOrder:{}", creatOrderDTO);
         Order order = new Order();
-        order.setAppId(creatOrderDTO.getAppId());
+        order.setAppId(product.getAppId().toString());
         order.setUserId(creatOrderDTO.getUserId());
         order.setProductId(creatOrderDTO.getProductId());
-        order.setPayment(creatOrderDTO.getPaymentMethod().getValue());
+        order.setPayment(paymentMethodEnum.getValue());
         order.setTradeNo(UUID.randomUUID().toString());
         order.setStatus(OrderConstant.CREATED);
         order.setInvoiceNo(MyDateUtils.getTimeStamp() + (int) ((Math.random() * 9 + 1) * 1000));
@@ -74,8 +87,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         String readeNo = MyDateUtils.getTimeStamp() + "-" + creatOrderDTO.getProductId() + "-" + (int) ((Math.random() * 9 + 1) * 1000);
         order.setTradeNo(readeNo);
         // 查询当前产品多少钱
+        // 根据产品id获取产品信息
         ProductPriceVo productPrice = productApi.getProductPrice(creatOrderDTO.getProductId(),creatOrderDTO.getUserId()).getResult();
-        switch (creatOrderDTO.getPaymentMethod()) {
+        switch (paymentMethodEnum) {
             case WXPAY:
                 break;
             case ALIPAY:
@@ -94,6 +108,32 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             case NO_NEED_TO_PAY:
                 break;
             case PAYPAL:
+                //创建paypal订阅
+                if(ProductTypeEnum.PLAN.getValue().equals(product.getType())){
+                    CreatSubscriptionsPaypalBO creatSubscriptionsBO = new CreatSubscriptionsPaypalBO();
+                    Money shippingAmount = new Money();
+                    shippingAmount.setCurrency_code("USD");
+                    creatSubscriptionsBO.setShipping_amount(shippingAmount);
+                    //价格,从产品计划中获取,订阅不需要设置价格
+                    //shippingAmount.setValue("0.00");
+                    SubscriberRequest subscriberRequest = new SubscriberRequest();
+                    subscriberRequest.setName(PayerName.builder().given_name("鹏辉").surname("王").build());
+                    subscriberRequest.setEmailAddress("ddfme123@163.com");
+                    //设置订阅人相关信息
+                    creatSubscriptionsBO.setSubscriber(subscriberRequest);
+                    ApplicationContext applicationContext = new ApplicationContext();
+                    applicationContext.setBrand_name("KDanMobile");
+                    applicationContext.setLocale("zh-CN");
+                    // applicationContext.setShipping_preference("");
+                    applicationContext.setUser_action(UserAction.SUBSCRIBE_NOW);
+                    //成功或失败回调url
+                    applicationContext.setReturn_url("https://www.baidu.com");
+                    applicationContext.setCancel_url("https://www.bilibili.com");
+                    //订阅计划id
+                    creatSubscriptionsBO.setPlan_id(product.getThirdPayId());
+                    creatSubscriptionsBO.setApplication_context(applicationContext);
+                    CreatSubscriptionsResultPaypalBO resultBO = paypalClient.creatSubscriptions(creatSubscriptionsBO);
+                };
                 break;
             // 当前支付方式无效
             default:

+ 15 - 0
pdf-office-payment/src/test/java/cn/kdan/cloud/pdf/office/payment/PayPalTest.java

@@ -4,12 +4,16 @@ import cn.kdan.cloud.pdf.office.api.payment.bo.CreatSubscriptionsPaypalBO;
 import cn.kdan.cloud.pdf.office.api.payment.bo.CreatSubscriptionsResultPaypalBO;
 import cn.kdan.cloud.pdf.office.api.payment.bo.GeneratePayLinkPaddleBO;
 import cn.kdan.cloud.pdf.office.api.payment.constant.UserAction;
+import cn.kdan.cloud.pdf.office.api.payment.dto.CreatOrderDTO;
 import cn.kdan.cloud.pdf.office.api.payment.paypal.ApplicationContext;
 import cn.kdan.cloud.pdf.office.api.payment.paypal.Money;
 import cn.kdan.cloud.pdf.office.api.payment.paypal.PayerName;
 import cn.kdan.cloud.pdf.office.api.payment.paypal.SubscriberRequest;
+import cn.kdan.cloud.pdf.office.api.payment.vo.CreatOrderResultVO;
 import cn.kdan.cloud.pdf.office.common.utils.JsonUtils;
 import cn.kdan.cloud.pdf.office.payment.client.PaypalClient;
+import cn.kdan.cloud.pdf.office.payment.service.OrderService;
+import org.junit.jupiter.api.Order;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -22,6 +26,8 @@ public class PayPalTest {
 
     @Autowired
     private PaypalClient paypalClient;
+    @Autowired
+    private OrderService orderService;
 
     @Test
     public void creatS(){
@@ -57,6 +63,15 @@ public class PayPalTest {
         System.out.println(JsonUtils.getJsonString(subscriptionInfo));
     }
 
+    @Test
+    public void createSub(){
+        CreatOrderDTO creatOrderDTO = new CreatOrderDTO();
+        creatOrderDTO.setProductId("22");
+        CreatOrderResultVO vo =  orderService.creatOrder(creatOrderDTO);
+        System.out.println(vo);
+    }
+
+
     public static void main(String[] args) {
         GeneratePayLinkPaddleBO generatePayLinkPaddleBO = new GeneratePayLinkPaddleBO();
 //        generatePayLinkPaddleBO.setDiscountable(true);

+ 0 - 1
pdf-office-pdf-website/src/main/java/cn/kdan/cloud/pdf/office/website/service/impl/PaymentServiceImpl.java

@@ -43,7 +43,6 @@ public class PaymentServiceImpl implements PaymentService {
     public String creatOrder(String productId) {
         CreatOrderDTO creatOrder = new CreatOrderDTO();
         creatOrder.setUserId(SecurityUtils.getUserId());
-        creatOrder.setPaymentMethod(PaymentMethodEnum.PADDLE);
         creatOrder.setProductId(productId);
         return orderApi.creatOrder(creatOrder).getResult().getPagePayUrl();
     }

+ 37 - 24
pdf-office-product/src/main/java/cn/kdan/cloud/pdf/office/product/entity/Product.java

@@ -6,11 +6,10 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-
 import java.math.BigDecimal;
 
 /**
- * @author ComPDFKit-WPH 2023-01-29
+ * @author ComPDFKit-WPHSB 2023-06-05
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
@@ -29,9 +28,21 @@ public class Product extends BaseEntity{
     /**
      * app ID
      */
-    private Integer appId;
+    private String appId;
+    /**
+     *
+     */
+    private Integer parentProductId;
     /**
-     * 
+     * 活动id
+     */
+    private String activityId;
+    /**
+     * paddle 产品/计划ID
+     */
+    private String paddleProductId;
+    /**
+     *
      */
     private String code;
     /**
@@ -39,54 +50,56 @@ public class Product extends BaseEntity{
      */
     private BigDecimal price;
     /**
-     * 
+     *
      */
     private String forVersion;
     /**
-     * 
+     *
      */
     private String forPeriod;
     /**
-     * 
+     *
      */
     private Integer maxDeviceNum;
     /**
-     * 
+     *
      */
     private String description;
     /**
-     * 
+     * 中文价格
      */
     private BigDecimal cnyPrice;
     /**
-     * 
-     */
-    private Integer parentProductId;
-    /**
-     * 
+     *
      */
     private String sonIds;
     /**
-     * 
+     *
      */
     private BigDecimal displayPrice;
     /**
-     * 
+     *
      */
     private BigDecimal cnyDisplayPrice;
     /**
-     * paddle 产品/计划ID
+     * 产品平台 1:windows,2:mac
      */
-    private String paddleProductId;
-
+    private Integer platform;
     /**
-     * 关联活动id
+     *
      */
-    private String activityId;
-
+    private String model;
     /**
-     * 产品平台 1:windows,2:mac  PlatformEnum
+     * 支付方式    PAYPAL(0),     ALIPAY(1),     WXPAY(2),     PADDLE(3),     NO_NEED_TO_PAY(4);
      */
-    private Integer platform;
+    private Integer payWay;
+    /**
+     * 第三方支付id
+     */
+    private String thirdPayId;
+    /**
+     * 1单次购买产品 2订阅计划产品
+     */
+    private Integer type;
 
 }