ソースを参照

website模块:提供接口

wangPH 2 年 前
コミット
035fe490df
31 ファイル変更676 行追加56 行削除
  1. 1 1
      pdf-office-api/pdf-office-api-payment/src/main/java/cn/kdan/cloud/pdf/office/api/payment/dto/CreatSubscriptionDTO.java
  2. 2 1
      pdf-office-api/pdf-office-api-payment/src/main/java/cn/kdan/cloud/pdf/office/api/payment/dto/CreatSubscriptionManualDTO.java
  3. 7 7
      pdf-office-api/pdf-office-api-payment/src/main/java/cn/kdan/cloud/pdf/office/api/payment/feign/SubscriptionApi.java
  4. 2 2
      pdf-office-api/pdf-office-api-payment/src/main/java/cn/kdan/cloud/pdf/office/api/payment/feign/hystrix/SubscriptionHystrix.java
  5. 37 0
      pdf-office-api/pdf-office-api-payment/src/main/java/cn/kdan/cloud/pdf/office/api/payment/vo/OrderInfoVO.java
  6. 6 0
      pdf-office-api/pdf-office-api-payment/src/main/java/cn/kdan/cloud/pdf/office/api/payment/vo/OrdersVO.java
  7. 28 0
      pdf-office-api/pdf-office-api-payment/src/main/java/cn/kdan/cloud/pdf/office/api/payment/vo/SubscriptionInfoVO.java
  8. 2 2
      pdf-office-api/pdf-office-api-payment/src/main/java/cn/kdan/cloud/pdf/office/api/payment/vo/SubscriptionSchemeVO.java
  9. 5 0
      pdf-office-api/pdf-office-api-payment/src/main/java/cn/kdan/cloud/pdf/office/api/payment/vo/SubscriptionsVO.java
  10. 31 0
      pdf-office-api/pdf-office-api-product/src/main/java/cn/kdan/cloud/pdf/office/api/product/enums/PlatformEnum.java
  11. 5 0
      pdf-office-api/pdf-office-api-product/src/main/java/cn/kdan/cloud/pdf/office/api/product/vo/ProductVO.java
  12. 17 1
      pdf-office-common/src/main/java/cn/kdan/cloud/pdf/office/common/enums/account/PDFOfficeUserStatusEnum.java
  13. 9 8
      pdf-office-payment/src/main/java/cn/kdan/cloud/pdf/office/payment/controller/SubscriptionController.java
  14. 8 5
      pdf-office-payment/src/main/java/cn/kdan/cloud/pdf/office/payment/listener/PaymentListener.java
  15. 9 3
      pdf-office-payment/src/main/java/cn/kdan/cloud/pdf/office/payment/mapper/SubscriptionsMapper.java
  16. 16 6
      pdf-office-payment/src/main/java/cn/kdan/cloud/pdf/office/payment/service/SubscriptionsService.java
  17. 1 1
      pdf-office-payment/src/main/java/cn/kdan/cloud/pdf/office/payment/service/impl/PaddleWebhookServiceImpl.java
  18. 35 14
      pdf-office-payment/src/main/java/cn/kdan/cloud/pdf/office/payment/service/impl/SubscriptionsServiceImpl.java
  19. 2 1
      pdf-office-payment/src/main/resources/mapper/OrdersMapper.xml
  20. 111 2
      pdf-office-payment/src/main/resources/mapper/SubscriptionsMapper.xml
  21. 88 0
      pdf-office-pdf-website/pom.xml
  22. 8 0
      pdf-office-pdf-website/src/main/java/cn/kdan/cloud/pdf/office/website/PDFOfficeWebsiteApplication.java
  23. 25 0
      pdf-office-pdf-website/src/main/java/cn/kdan/cloud/pdf/office/website/config/PdfOfficeSystemConfig.java
  24. 25 0
      pdf-office-pdf-website/src/main/java/cn/kdan/cloud/pdf/office/website/config/ResourceServerConfig.java
  25. 38 0
      pdf-office-pdf-website/src/main/java/cn/kdan/cloud/pdf/office/website/config/WebSecurityConfig.java
  26. 50 0
      pdf-office-pdf-website/src/main/java/cn/kdan/cloud/pdf/office/website/controller/PdfOfficeAppController.java
  27. 16 0
      pdf-office-pdf-website/src/main/java/cn/kdan/cloud/pdf/office/website/service/PaymentService.java
  28. 41 0
      pdf-office-pdf-website/src/main/java/cn/kdan/cloud/pdf/office/website/service/impl/PaymentServiceImpl.java
  29. 46 0
      pdf-office-pdf-website/src/main/java/cn/kdan/cloud/pdf/office/website/utils/SecurityUtils.java
  30. 5 0
      pdf-office-product/src/main/java/cn/kdan/cloud/pdf/office/product/entity/Product.java
  31. 0 2
      pdf-office-product/src/main/java/cn/kdan/cloud/pdf/office/product/service/impl/ProductServiceImpl.java

+ 1 - 1
pdf-office-api/pdf-office-api-payment/src/main/java/cn/kdan/cloud/pdf/office/api/payment/dto/CreatSubscriptionDTO.java

@@ -24,9 +24,9 @@ public class CreatSubscriptionDTO implements Serializable {
     /**
      * productId
      */
+    @NotNull(message = "productId 不能为空")
     private String productId;
 
-    @NotNull(message = "appId 不能为空")
     private String appId;
 
     private String thirdSubscriptionId;

+ 2 - 1
pdf-office-api/pdf-office-api-payment/src/main/java/cn/kdan/cloud/pdf/office/api/payment/dto/CreatSubscriptionManualDTO.java

@@ -23,8 +23,9 @@ public class CreatSubscriptionManualDTO implements Serializable {
     /**
      * productId
      */
+    @NotNull(message = "productId 不能为空")
     private String productId;
-    @NotNull(message = "appId 不能为空")
+
     private String appId;
 
     private String thirdSubscriptionId;

+ 7 - 7
pdf-office-api/pdf-office-api-payment/src/main/java/cn/kdan/cloud/pdf/office/api/payment/feign/SubscriptionApi.java

@@ -33,13 +33,13 @@ public interface SubscriptionApi {
     /**
      * 通过用户id和产品id 获取最新的订阅信息
      *
-     * @param userId userId
-     * @param appId  appId
+     * @param userId   userId
+     * @param platform platform
      * @return Subscriptions
      */
     @GetMapping("/getSubscriptions")
     ResultMap<SubscriptionsVO> getSubscriptions(@Validated @NotNull(message = "userId 不能为空") @RequestParam("userId") String userId,
-                                                @NotNull(message = "appId 不能为空") @RequestParam("appId") String appId);
+                                                @Validated @NotNull(message = "platform 不能为空") @RequestParam("platform") Integer platform);
 
     /**
      * 手动创建订阅信息
@@ -54,12 +54,12 @@ public interface SubscriptionApi {
     /**
      * 查询当前用户的订阅计划和支付订单
      *
-     * @param userId userId
-     * @param appId  appId
+     * @param userId   userId
+     * @param platform platform
      * @return SubscriptionSchemeVO
      */
     @GetMapping("/getSubscriptionSchemeInfo")
-    ResultMap<SubscriptionSchemeVO> getSubscriptionSchemeInfo(@NotNull(message = "用户id不能为空") String userId,
-                                                              @NotNull(message = "appId不能为空") String appId);
+    ResultMap<SubscriptionSchemeVO> getSubscriptionSchemeInfo(@NotNull(message = "用户id不能为空")@RequestParam String userId,
+                                                              @NotNull(message = "platform不能为空")@RequestParam Integer platform);
 
 }

+ 2 - 2
pdf-office-api/pdf-office-api-payment/src/main/java/cn/kdan/cloud/pdf/office/api/payment/feign/hystrix/SubscriptionHystrix.java

@@ -21,7 +21,7 @@ public class SubscriptionHystrix implements SubscriptionApi {
     }
 
     @Override
-    public ResultMap<SubscriptionsVO> getSubscriptions(@NotNull(message = "userId 不能为空") String userId, @NotNull(message = "productId 不能为空") String productId) {
+    public ResultMap<SubscriptionsVO> getSubscriptions(@NotNull(message = "userId 不能为空") String userId, @NotNull(message = "platform 不能为空") Integer platform) {
         return new ResultMap<>(CommonConstant.ERROR, CommonConstant.RESULT_ERROR_SERVICE_NOT_AVAILABLE);
     }
 
@@ -31,7 +31,7 @@ public class SubscriptionHystrix implements SubscriptionApi {
     }
 
     @Override
-    public ResultMap<SubscriptionSchemeVO> getSubscriptionSchemeInfo(@NotNull(message = "用户id不能为空") String userId, @NotNull(message = "productId不能为空") String productId) {
+    public ResultMap<SubscriptionSchemeVO> getSubscriptionSchemeInfo(@NotNull(message = "用户id不能为空") String userId, @NotNull(message = "platform不能为空") Integer platform) {
         return new ResultMap<>(CommonConstant.ERROR, CommonConstant.RESULT_ERROR_SERVICE_NOT_AVAILABLE);
     }
 }

+ 37 - 0
pdf-office-api/pdf-office-api-payment/src/main/java/cn/kdan/cloud/pdf/office/api/payment/vo/OrderInfoVO.java

@@ -0,0 +1,37 @@
+package cn.kdan.cloud.pdf.office.api.payment.vo;
+
+import lombok.*;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * @author ComPDFKit-WPH 2023/2/9
+ */
+@Data
+@ToString
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class OrderInfoVO {
+
+    private LocalDateTime date;
+
+    private String scheme;
+
+    private BigDecimal price;
+    /**
+     * 平台
+     * platformEnum
+     */
+    private Integer platform;
+
+    /**
+     * 订单状态, ['created' => 0, 'approved' => 1, 'completed' => 2, 'closed' => 3, 'refund' =>4]
+     * OrderConstant
+     */
+    private Integer status;
+
+    private String productName;
+
+}

+ 6 - 0
pdf-office-api/pdf-office-api-payment/src/main/java/cn/kdan/cloud/pdf/office/api/payment/vo/OrdersVO.java

@@ -7,6 +7,7 @@ import lombok.ToString;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * @author ComPDFKit-WPH 2023/2/1
@@ -47,6 +48,11 @@ public class OrdersVO implements Serializable {
      * 订单状态, [created = 0, approved = 1, completed = 2, closed = 3]
      */
     private Integer status;
+
+    private Date createdAt;
+
+    private Date updatedAt;
+
     /**
      * 结果
      */

+ 28 - 0
pdf-office-api/pdf-office-api-payment/src/main/java/cn/kdan/cloud/pdf/office/api/payment/vo/SubscriptionInfoVO.java

@@ -0,0 +1,28 @@
+package cn.kdan.cloud.pdf.office.api.payment.vo;
+
+import lombok.*;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * @author ComPDFKit-WPH 2023/2/9
+ */
+@Data
+@ToString
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class SubscriptionInfoVO {
+
+    private BigDecimal price;
+
+    private LocalDateTime endDate;
+    /**
+     * 支付方式  ['paypal' => 0, 'alipay' => 1, 'wxpay' => 2, 'paddle' => 3, 'no need to pay' => 4];
+     */
+    private Integer paymentMethod;
+
+    private String productName;
+
+}

+ 2 - 2
pdf-office-api/pdf-office-api-payment/src/main/java/cn/kdan/cloud/pdf/office/api/payment/vo/SubscriptionSchemeVO.java

@@ -13,8 +13,8 @@ import java.util.List;
 @ToString
 public class SubscriptionSchemeVO implements Serializable {
 
-    private SubscriptionsVO subscriptionsVO;
+    private SubscriptionInfoVO subscriptionInfo;
 
-    private List<OrdersVO> ordersVOS;
+    private List<OrderInfoVO> ordersInfo;
 
 }

+ 5 - 0
pdf-office-api/pdf-office-api-payment/src/main/java/cn/kdan/cloud/pdf/office/api/payment/vo/SubscriptionsVO.java

@@ -123,4 +123,9 @@ public class SubscriptionsVO implements Serializable {
     private String orderId;
 
     private String appId;
+
+    /**
+     * 产品平台 1:windows,2:mac  PlatformEnum
+     */
+    private Integer platform;
 }

+ 31 - 0
pdf-office-api/pdf-office-api-product/src/main/java/cn/kdan/cloud/pdf/office/api/product/enums/PlatformEnum.java

@@ -0,0 +1,31 @@
+package cn.kdan.cloud.pdf.office.api.product.enums;
+
+import lombok.Getter;
+
+/**
+ * @author ComPDFKit-WPH 2023/2/9
+ * <p>
+ * 平台枚举
+ */
+public enum PlatformEnum {
+    WINDOWS(1),
+    MAC(2),
+    ;
+    @Getter
+    private final Integer value;
+
+    PlatformEnum(Integer value) {
+        this.value = value;
+    }
+
+    public static PlatformEnum getEnumByValue(Integer value){
+        for (PlatformEnum platformEnum : PlatformEnum.values()) {
+            if (platformEnum.value.equals(value)){
+                return platformEnum;
+            }
+        }
+        return PlatformEnum.WINDOWS;
+    }
+
+
+}

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

@@ -78,4 +78,9 @@ public class ProductVO {
      */
     private ActivityInfoVO activityInfo;
 
+    /**
+     * 产品平台 1:windows,2:mac  PlatformEnum
+     */
+    private Integer platform;
+
 }

+ 17 - 1
pdf-office-common/src/main/java/cn/kdan/cloud/pdf/office/common/enums/account/PDFOfficeUserStatusEnum.java

@@ -15,11 +15,27 @@ public enum PDFOfficeUserStatusEnum {
 
     private final String value;
 
-    PDFOfficeUserStatusEnum(String value){
+    PDFOfficeUserStatusEnum(String value) {
         this.value = value;
     }
 
     public String value() {
         return value;
     }
+
+    /**
+     * 获取枚举通过 value
+     *
+     * @param value value
+     * @return PDFOfficeUserStatusEnum
+     */
+    public static PDFOfficeUserStatusEnum getEnumByValue(String value) {
+        for (PDFOfficeUserStatusEnum pdfOfficeUserStatusEnum : PDFOfficeUserStatusEnum.values()) {
+            if (pdfOfficeUserStatusEnum.value.equals(value)) {
+                return pdfOfficeUserStatusEnum;
+            }
+        }
+        return PDFOfficeUserStatusEnum.LOGGED_OUT;
+    }
+
 }

+ 9 - 8
pdf-office-payment/src/main/java/cn/kdan/cloud/pdf/office/payment/controller/SubscriptionController.java

@@ -4,6 +4,7 @@ import cn.kdan.cloud.pdf.office.api.payment.dto.CreatSubscriptionDTO;
 import cn.kdan.cloud.pdf.office.api.payment.dto.CreatSubscriptionManualDTO;
 import cn.kdan.cloud.pdf.office.api.payment.vo.SubscriptionSchemeVO;
 import cn.kdan.cloud.pdf.office.api.payment.vo.SubscriptionsVO;
+import cn.kdan.cloud.pdf.office.api.product.enums.PlatformEnum;
 import cn.kdan.cloud.pdf.office.common.pojo.ResultMap;
 import cn.kdan.cloud.pdf.office.payment.service.SubscriptionsService;
 import lombok.RequiredArgsConstructor;
@@ -39,13 +40,13 @@ public class SubscriptionController {
      * 通过用户id和产品id 获取最新的订阅信息
      *
      * @param userId userId
-     * @param appId  appId
+     * @param platform  platform
      * @return Subscriptions
      */
     @GetMapping("/getSubscriptions")
     public ResultMap<SubscriptionsVO> getSubscriptions(@Validated @NotNull(message = "userId 不能为空") @RequestParam("userId") String userId,
-                                                       @NotNull(message = "appId 不能为空") @RequestParam("appId") String appId) {
-        return ResultMap.success(subscriptionsService.getSubscriptions(userId, appId));
+                                                       @Validated @NotNull(message = "platform 不能为空") @RequestParam("platform") Integer platform) {
+        return ResultMap.success(subscriptionsService.getSubscriptions(userId, PlatformEnum.getEnumByValue(platform)));
     }
 
     /**
@@ -62,14 +63,14 @@ public class SubscriptionController {
     /**
      * 查询当前用户的订阅计划和支付订单
      *
-     * @param userId userId
-     * @param appId  appId
+     * @param userId   userId
+     * @param platform platform
      * @return SubscriptionSchemeVO
      */
     @GetMapping("/getSubscriptionSchemeInfo")
-    public ResultMap<SubscriptionSchemeVO> getSubscriptionSchemeInfo(@Validated @NotNull(message = "用户id不能为空") String userId,
-                                                                     @Validated @NotNull(message = "appId不能为空") String appId) {
-        return ResultMap.success(subscriptionsService.getSubscriptionSchemeInfo(userId, appId));
+    public ResultMap<SubscriptionSchemeVO> getSubscriptionSchemeInfo(@Validated @NotNull(message = "用户id不能为空") @RequestParam String userId,
+                                                                     @Validated @NotNull(message = "platform不能为空") @RequestParam Integer platform) {
+        return ResultMap.success(subscriptionsService.getSubscriptionSchemeInfo(userId, PlatformEnum.getEnumByValue(platform)));
     }
 
 }

+ 8 - 5
pdf-office-payment/src/main/java/cn/kdan/cloud/pdf/office/payment/listener/PaymentListener.java

@@ -1,9 +1,12 @@
 package cn.kdan.cloud.pdf.office.payment.listener;
 
+import cn.kdan.cloud.pdf.office.api.account.dto.UpdateUserForPaySuccessDTO;
 import cn.kdan.cloud.pdf.office.api.account.feign.UserApi;
 import cn.kdan.cloud.pdf.office.api.payment.vo.SubscriptionsVO;
+import cn.kdan.cloud.pdf.office.api.product.enums.PlatformEnum;
 import cn.kdan.cloud.pdf.office.api.product.feign.ProductApi;
 import cn.kdan.cloud.pdf.office.common.constant.RabbitMqConstant;
+import cn.kdan.cloud.pdf.office.common.enums.account.PDFOfficeUserStatusEnum;
 import cn.kdan.cloud.pdf.office.common.utils.MyDateUtils;
 import cn.kdan.cloud.pdf.office.common.vo.UserInfoVO;
 import cn.kdan.cloud.pdf.office.payment.service.OrdersService;
@@ -47,7 +50,6 @@ public class PaymentListener {
             log.info("订单关闭成功 :{}", orderId);
             channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
         } catch (Exception e) {
-            // TODO 补救策略
             log.error("消息消费失败:" + e.getMessage(), e);
         }
     }
@@ -65,20 +67,21 @@ public class PaymentListener {
             log.info("订阅过期 监听内容:{}", subscriptionId);
             // 判断当前用户是否有有效的订阅模式
             SubscriptionsVO subscriptionsVO = subscriptionsService.getSubscriptionBySubscriptionId(subscriptionId);
-            SubscriptionsVO subscription = subscriptionsService.getSubscriptions(subscriptionsVO.getUserId(), subscriptionsVO.getAppId());
+            SubscriptionsVO subscription = subscriptionsService.getSubscriptions(subscriptionsVO.getUserId(), PlatformEnum.getEnumByValue(subscriptionsVO.getPlatform()));
             LocalDateTime now = LocalDateTime.now();
             LocalDateTime endDate = MyDateUtils.dateToLocalDateTime(subscription.getEndDate());
-            if (now.compareTo(endDate) > 0){
+            if (now.compareTo(endDate) > 0) {
                 // 修改用户状态
                 // 获取当前用户的订阅状态
                 String validFlag = userApi.getById(subscription.getUserId()).getResult().getValidFlag();
+                PDFOfficeUserStatusEnum userStatusEnum = PDFOfficeUserStatusEnum.getEnumByValue(validFlag);
                 // TODO 修改用户状态
-
+                UpdateUserForPaySuccessDTO paySuccessDTO = new UpdateUserForPaySuccessDTO();
+                userApi.updateUserForPaySuccess(paySuccessDTO);
             }
             channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
             log.info("订阅过期 处理成功 :{}", subscriptionId);
         } catch (Exception e) {
-            // TODO 补救策略
             log.error("消息消费失败:" + e.getMessage(), e);
         }
     }

+ 9 - 3
pdf-office-payment/src/main/java/cn/kdan/cloud/pdf/office/payment/mapper/SubscriptionsMapper.java

@@ -13,10 +13,16 @@ public interface SubscriptionsMapper extends BaseMapper<Subscription> {
     /**
      * 通过用户id和产品id 获取最新的订阅信息
      *
-     * @param userId userId
-     * @param appId  appId
+     * @param userId   userId
+     * @param platform platform
      * @return Subscriptions
      */
     SubscriptionsVO selectNewestSubscription(@Param("userId") String userId,
-                                             @Param("appId") String appId);
+                                             @Param("platform") Integer platform);
+
+
+    SubscriptionsVO selectBySubscriptionId(@Param("subscriptionId") String subscriptionId);
+
+    SubscriptionsVO selectNewestSubscriptionByProductId(@Param("userId") String userId,
+                                                        @Param("productId") String productId);
 }

+ 16 - 6
pdf-office-payment/src/main/java/cn/kdan/cloud/pdf/office/payment/service/SubscriptionsService.java

@@ -5,6 +5,7 @@ import cn.kdan.cloud.pdf.office.api.payment.dto.CreatSubscriptionDTO;
 import cn.kdan.cloud.pdf.office.api.payment.dto.CreatSubscriptionManualDTO;
 import cn.kdan.cloud.pdf.office.api.payment.vo.SubscriptionSchemeVO;
 import cn.kdan.cloud.pdf.office.api.payment.vo.SubscriptionsVO;
+import cn.kdan.cloud.pdf.office.api.product.enums.PlatformEnum;
 import cn.kdan.cloud.pdf.office.payment.entity.Subscription;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -32,14 +33,23 @@ public interface SubscriptionsService extends IService<Subscription> {
      */
     String creatSubscription(CreatSubscriptionDTO subscriptionInfo);
 
+    /**
+     * 通过用户id和平台类型 获取最新的订阅信息
+     *
+     * @param userId   userId
+     * @param platform 平台类型
+     * @return Subscriptions
+     */
+    SubscriptionsVO getSubscriptions(String userId, PlatformEnum platform);
+
     /**
      * 通过用户id和产品id 获取最新的订阅信息
      *
-     * @param userId userId
-     * @param appId  appId
+     * @param userId    userId
+     * @param productId productId
      * @return Subscriptions
      */
-    SubscriptionsVO getSubscriptions(String userId, String appId);
+    SubscriptionsVO getSubscriptionsByProductId(String userId, String productId);
 
     /**
      * 创建订阅信息 自动续订
@@ -67,11 +77,11 @@ public interface SubscriptionsService extends IService<Subscription> {
     /**
      * 查询当前用户的订阅计划和支付订单
      *
-     * @param userId    userId
-     * @param productId productId
+     * @param userId       userId
+     * @param platformEnum platformEnum
      * @return SubscriptionSchemeVO
      */
-    SubscriptionSchemeVO getSubscriptionSchemeInfo(String userId, String productId);
+    SubscriptionSchemeVO getSubscriptionSchemeInfo(String userId, PlatformEnum platformEnum);
 
     /**
      * 根据主键id获取

+ 1 - 1
pdf-office-payment/src/main/java/cn/kdan/cloud/pdf/office/payment/service/impl/PaddleWebhookServiceImpl.java

@@ -101,7 +101,7 @@ public class PaddleWebhookServiceImpl implements PaddleWebhookService {
         log.info("paddle 订阅的支付订单已成功 paddle订单id:{}",paddleWebhookDTO.getCheckoutId());
         OrdersVO orderByTradeNo = ordersService.getOrderByTradeNo(paddleWebhookDTO.getPassthrough()).get(0);
         // 判断当前是否存在订阅
-        SubscriptionsVO subscriptions = subscriptionsService.getSubscriptions(orderByTradeNo.getUserId(), orderByTradeNo.getAppId());
+        SubscriptionsVO subscriptions = subscriptionsService.getSubscriptionsByProductId(orderByTradeNo.getUserId(), orderByTradeNo.getProductId());
         if (ObjectUtils.isEmpty(subscriptions)){
             throw new BackendRuntimeException(ErrorMessage.SUBSCRIPTION_NON_EXISTENT);
         }

+ 35 - 14
pdf-office-payment/src/main/java/cn/kdan/cloud/pdf/office/payment/service/impl/SubscriptionsServiceImpl.java

@@ -5,9 +5,8 @@ import cn.kdan.cloud.pdf.office.api.payment.constant.SubscriptionConstant;
 import cn.kdan.cloud.pdf.office.api.payment.dto.ChargebackOrderDTO;
 import cn.kdan.cloud.pdf.office.api.payment.dto.CreatSubscriptionDTO;
 import cn.kdan.cloud.pdf.office.api.payment.dto.CreatSubscriptionManualDTO;
-import cn.kdan.cloud.pdf.office.api.payment.vo.OrdersVO;
-import cn.kdan.cloud.pdf.office.api.payment.vo.SubscriptionSchemeVO;
-import cn.kdan.cloud.pdf.office.api.payment.vo.SubscriptionsVO;
+import cn.kdan.cloud.pdf.office.api.payment.vo.*;
+import cn.kdan.cloud.pdf.office.api.product.enums.PlatformEnum;
 import cn.kdan.cloud.pdf.office.api.product.feign.ProductApi;
 import cn.kdan.cloud.pdf.office.api.product.vo.ProductVO;
 import cn.kdan.cloud.pdf.office.common.utils.MyDateUtils;
@@ -30,6 +29,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -84,8 +84,13 @@ public class SubscriptionsServiceImpl extends ServiceImpl<SubscriptionsMapper, S
     }
 
     @Override
-    public SubscriptionsVO getSubscriptions(String userId, String appId) {
-        return this.baseMapper.selectNewestSubscription(userId, appId);
+    public SubscriptionsVO getSubscriptions(String userId, PlatformEnum platform) {
+        return this.baseMapper.selectNewestSubscription(userId, platform.getValue());
+    }
+
+    @Override
+    public SubscriptionsVO getSubscriptionsByProductId(String userId, String productId) {
+        return this.baseMapper.selectNewestSubscriptionByProductId(userId, productId);
     }
 
     @Override
@@ -122,25 +127,41 @@ public class SubscriptionsServiceImpl extends ServiceImpl<SubscriptionsMapper, S
     }
 
     @Override
-    public SubscriptionSchemeVO getSubscriptionSchemeInfo(String userId, String appId) {
+    public SubscriptionSchemeVO getSubscriptionSchemeInfo(String userId, PlatformEnum platformEnum) {
         // 获取最新订阅信息
-        SubscriptionsVO subscriptions = this.getSubscriptions(userId, appId);
+        SubscriptionsVO subscriptions = this.getSubscriptions(userId, platformEnum);
+        // 获取产品信息
+        ProductVO productVO = productApi.getProduct(subscriptions.getProductId()).getResult();
         // 获取该订阅关联的所有订单
         String orderId = subscriptions.getOrderId();
         String thirdTradeNo = ordersService.getOrderById(orderId).getThirdTradeNo();
         List<OrdersVO> ordersVOS = ordersService.getOrderByTradeNo(thirdTradeNo);
         SubscriptionSchemeVO subscriptionSchemeVO = new SubscriptionSchemeVO();
-        subscriptionSchemeVO.setSubscriptionsVO(subscriptions);
-        subscriptionSchemeVO.setOrdersVOS(ordersVOS);
+        SubscriptionInfoVO build = SubscriptionInfoVO.builder()
+                .price(subscriptions.getPrice())
+                .endDate(MyDateUtils.dateToLocalDateTime(subscriptions.getEndDate()))
+                .paymentMethod(ordersVOS.get(0).getPayment())
+                .productName(productVO.getProductName())
+                .build();
+        List<OrderInfoVO> ordersInfo = new ArrayList<>();
+        ordersVOS.forEach(ordersVO -> {
+            ordersInfo.add(OrderInfoVO.builder()
+                    .date(MyDateUtils.dateToLocalDateTime(ordersVO.getCreatedAt()))
+                    .scheme(productVO.getForPeriod())
+                    .price(ordersVO.getPrice())
+                    .platform(productVO.getPlatform())
+                    .status(ordersVO.getStatus())
+                    .productName(productVO.getProductName())
+                    .build());
+        });
+        subscriptionSchemeVO.setSubscriptionInfo(build);
+        subscriptionSchemeVO.setOrdersInfo(ordersInfo);
         return subscriptionSchemeVO;
     }
 
     @Override
     public SubscriptionsVO getSubscriptionBySubscriptionId(String subscriptionId) {
-        Subscription subscription = this.baseMapper.selectById(subscriptionId);
-        SubscriptionsVO subscriptionsVO = new SubscriptionsVO();
-        BeanUtils.copyProperties(subscription,subscriptionsVO);
-        return subscriptionsVO;
+        return this.baseMapper.selectBySubscriptionId(subscriptionId);
     }
 
 
@@ -169,7 +190,7 @@ public class SubscriptionsServiceImpl extends ServiceImpl<SubscriptionsMapper, S
      */
     private LocalDateTime getOriginalTime(CreatSubscriptionDTO subscriptionInfo, LocalDateTime now) {
         // 通过用户id和产品id获取最新订阅信息
-        SubscriptionsVO newestSubscriptions = getSubscriptions(subscriptionInfo.getUserId(), subscriptionInfo.getAppId());
+        SubscriptionsVO newestSubscriptions = getSubscriptionsByProductId(subscriptionInfo.getUserId(), subscriptionInfo.getProductId());
         LocalDateTime originalTime;
         // 没有订阅数据
         if (ObjectUtils.isEmpty(newestSubscriptions)) {

+ 2 - 1
pdf-office-payment/src/main/resources/mapper/OrdersMapper.xml

@@ -43,8 +43,9 @@
             ,type
             ,detail_type
             ,user_id
-        from order
+        from `order`
         where third_trade_no = #{tradeNo}
+        order by created_at desc
     </select>
 
 </mapper>

+ 111 - 2
pdf-office-payment/src/main/resources/mapper/SubscriptionsMapper.xml

@@ -33,9 +33,118 @@
     </resultMap>
 
     <select id="selectNewestSubscription" resultType="cn.kdan.cloud.pdf.office.api.payment.vo.SubscriptionsVO">
-        SELECT s.id,s.product_id,s.status,s.price,s.buyer_type,s.cdkey,s.email,s.phone,s.contact_name,s.company_name,s.start_date,s.end_date,s.max_device_amount,s.cny_price,s.coupon_id,s.cdkey_type,s.upgrade_cdkey,s.for_reason,s.last_sub_id,s.payment,s.original_price,s.cny_original_price,s.is_vpp,s.vpp_member_id,s.company_id,s.user_id,s.subscription_type,s.third_subscription_id,s.order_id,s.appId
+        SELECT s.id,
+               s.product_id,
+               s.status,
+               s.price,
+               s.buyer_type,
+               s.cdkey,
+               s.email,
+               s.phone,
+               s.contact_name,
+               s.company_name,
+               s.start_date,
+               s.end_date,
+               s.max_device_amount,
+               s.cny_price,
+               s.coupon_id,
+               s.cdkey_type,
+               s.upgrade_cdkey,
+               s.for_reason,
+               s.last_sub_id,
+               s.payment,
+               s.original_price,
+               s.cny_original_price,
+               s.is_vpp,
+               s.vpp_member_id,
+               s.company_id,
+               s.user_id,
+               s.subscription_type,
+               s.third_subscription_id,
+               s.order_id,
+               s.app_id,
+               p.platform
         FROM subscription s
-        where s.app_id = #{appId}
+                 left join product p on s.product_id = p.id
+        where p.platform = #{platform}
+          and s.user_id = #{userId}
+          AND s.`status` = 3
+        ORDER BY s.end_date desc
+        LIMIT 1
+    </select>
+
+    <select id="selectBySubscriptionId" resultType="cn.kdan.cloud.pdf.office.api.payment.vo.SubscriptionsVO">
+        SELECT s.id,
+               s.product_id,
+               s.status,
+               s.price,
+               s.buyer_type,
+               s.cdkey,
+               s.email,
+               s.phone,
+               s.contact_name,
+               s.company_name,
+               s.start_date,
+               s.end_date,
+               s.max_device_amount,
+               s.cny_price,
+               s.coupon_id,
+               s.cdkey_type,
+               s.upgrade_cdkey,
+               s.for_reason,
+               s.last_sub_id,
+               s.payment,
+               s.original_price,
+               s.cny_original_price,
+               s.is_vpp,
+               s.vpp_member_id,
+               s.company_id,
+               s.user_id,
+               s.subscription_type,
+               s.third_subscription_id,
+               s.order_id,
+               s.app_id,
+               p.platform
+        FROM subscription s
+                 left join product p on s.product_id = p.id
+        where s.id = #{subscriptionId}
+    </select>
+    <select id="selectNewestSubscriptionByProductId"
+            resultType="cn.kdan.cloud.pdf.office.api.payment.vo.SubscriptionsVO">
+        SELECT s.id,
+               s.product_id,
+               s.status,
+               s.price,
+               s.buyer_type,
+               s.cdkey,
+               s.email,
+               s.phone,
+               s.contact_name,
+               s.company_name,
+               s.start_date,
+               s.end_date,
+               s.max_device_amount,
+               s.cny_price,
+               s.coupon_id,
+               s.cdkey_type,
+               s.upgrade_cdkey,
+               s.for_reason,
+               s.last_sub_id,
+               s.payment,
+               s.original_price,
+               s.cny_original_price,
+               s.is_vpp,
+               s.vpp_member_id,
+               s.company_id,
+               s.user_id,
+               s.subscription_type,
+               s.third_subscription_id,
+               s.order_id,
+               s.app_id,
+               p.platform
+        FROM subscription s
+                 left join product p on s.product_id = p.id
+        where p.id = #{productId}
           and s.user_id = #{userId}
           AND s.`status` = 3
         ORDER BY s.end_date desc

+ 88 - 0
pdf-office-pdf-website/pom.xml

@@ -97,5 +97,93 @@
             </exclusions>
         </dependency>
 
+        <dependency>
+            <groupId>cn.kdan.pdf.office</groupId>
+            <artifactId>pdf-office-api-payment</artifactId>
+            <version>0.0.1</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>cn.kdan.pdf.office</groupId>
+                    <artifactId>pdf-office-common</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.kdan.pdf.office</groupId>
+            <artifactId>pdf-office-api-account</artifactId>
+            <version>0.0.1</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>cn.kdan.pdf.office</groupId>
+                    <artifactId>pdf-office-common</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <!-- spring security start -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-security</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.security.oauth</groupId>
+            <artifactId>spring-security-oauth2</artifactId>
+        </dependency>
+        <!-- end -->
+
+
     </dependencies>
+
+
+    <build>
+        <finalName>pdf-office-website</finalName>
+
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <includes>
+                    <include>**/*</include>
+                </includes>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+
+
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>2.22.2</version>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>docker-maven-plugin</artifactId>
+                <version>${docker.version}</version>
+                <configuration>
+                    <!-- Docker 远程管理地址-->
+                    <dockerHost>http://${docker.host}</dockerHost>
+                    <!--镜像名称-->
+                    <imageName>${project.artifactId}</imageName>
+                    <!--Dockerfile-->
+                    <dockerDirectory>${project.basedir}/docker</dockerDirectory>
+                    <!--插件会将需要的资源拷贝到docker目录下,供Dockerfile里构建镜像使用-->
+                    <resources>
+                        <resource>
+                            <targetPath>/</targetPath>
+                            <directory>${project.build.directory}</directory>
+                            <include>${project.build.finalName}.jar</include>
+                        </resource>
+                    </resources>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>

+ 8 - 0
pdf-office-pdf-website/src/main/java/cn/kdan/cloud/pdf/office/website/PDFOfficeWebsiteApplication.java

@@ -1,7 +1,11 @@
 package cn.kdan.cloud.pdf.office.website;
 
+import cn.kdan.cloud.pdf.office.api.account.annotation.EnableAccountApiClient;
+import cn.kdan.cloud.pdf.office.api.payment.annotation.EnablePaymentApiClient;
 import cn.kdan.cloud.pdf.office.api.product.annotation.EnableProductApiClient;
+import cn.kdan.cloud.pdf.office.common.annotation.EnableCommonFeignExceptionHandle;
 import cn.kdan.cloud.pdf.office.common.annotation.EnableCommonTools;
+import cn.kdan.cloud.pdf.office.common.annotation.EnableControllerExceptionHandler;
 import cn.kdan.cloud.pdf.office.common.annotation.EnableMybatisPlusConfig;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
@@ -22,6 +26,10 @@ import org.springframework.cloud.netflix.hystrix.EnableHystrix;
 @EnableCaching
 @EnableCommonTools
 @EnableProductApiClient
+@EnablePaymentApiClient
+@EnableAccountApiClient
+@EnableCommonFeignExceptionHandle
+@EnableControllerExceptionHandler
 public class PDFOfficeWebsiteApplication {
 
     public static void main(String[] args) {

+ 25 - 0
pdf-office-pdf-website/src/main/java/cn/kdan/cloud/pdf/office/website/config/PdfOfficeSystemConfig.java

@@ -0,0 +1,25 @@
+package cn.kdan.cloud.pdf.office.website.config;
+
+
+import cn.kdan.cloud.pdf.office.api.account.annotation.EnableAccountApiClient;
+import cn.kdan.cloud.pdf.office.common.annotation.EnableCommonTools;
+import cn.kdan.cloud.pdf.office.common.config.RedissonConfig;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.context.annotation.Import;
+
+/**
+ * @author tangxiangan
+ */
+@Configuration
+@EnableCommonTools
+@Slf4j
+@EnableAspectJAutoProxy
+@EnableCaching
+@EnableAccountApiClient
+@Import({RedissonConfig.class})
+public class PdfOfficeSystemConfig {
+
+}

+ 25 - 0
pdf-office-pdf-website/src/main/java/cn/kdan/cloud/pdf/office/website/config/ResourceServerConfig.java

@@ -0,0 +1,25 @@
+package cn.kdan.cloud.pdf.office.website.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.annotation.Order;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.http.SessionCreationPolicy;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
+import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
+
+
+/**
+ * 资源提供端的配置
+ */
+@Configuration
+@EnableResourceServer //开启资源提供服务的配置  是默认情况下spring security oauth2的http配置会被WebSecurityConfigurerAdapter的配置覆盖
+@Order(3)
+public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
+
+    @Override
+    public void configure(HttpSecurity http) throws Exception {
+        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED);
+        http.authorizeRequests().anyRequest().authenticated();
+    }
+
+}

+ 38 - 0
pdf-office-pdf-website/src/main/java/cn/kdan/cloud/pdf/office/website/config/WebSecurityConfig.java

@@ -0,0 +1,38 @@
+package cn.kdan.cloud.pdf.office.website.config;
+
+
+import cn.kdan.cloud.pdf.office.common.constant.CommonConstant;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.annotation.Order;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.builders.WebSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+
+/**
+ * 是默认情况下spring security的http配置 优于ResourceServerConfigurerAdapter的配置
+ */
+@Configuration
+@EnableWebSecurity
+@EnableAutoConfiguration(exclude = {org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class})
+@Order(1)
+public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
+
+    @Value("${httpMatchers.request}")
+    private String httpRequestMatchers;
+    @Value("${httpMatchers.web}")
+    private String httpWebMatchers;
+    @Override
+    protected void configure(HttpSecurity http) throws Exception {
+        http.csrf().disable();
+        http.authorizeRequests().antMatchers(httpRequestMatchers.split(CommonConstant.STRING_SIGN_COMMA)).permitAll();
+        http.requestMatchers().antMatchers(httpRequestMatchers.split(CommonConstant.STRING_SIGN_COMMA));
+    }
+    @Override
+    public void configure(WebSecurity web) {
+        web.ignoring()
+                .antMatchers(httpWebMatchers.split(CommonConstant.STRING_SIGN_COMMA));
+    }
+}

+ 50 - 0
pdf-office-pdf-website/src/main/java/cn/kdan/cloud/pdf/office/website/controller/PdfOfficeAppController.java

@@ -0,0 +1,50 @@
+package cn.kdan.cloud.pdf.office.website.controller;
+
+import cn.kdan.cloud.pdf.office.api.payment.vo.SubscriptionSchemeVO;
+import cn.kdan.cloud.pdf.office.api.product.enums.PlatformEnum;
+import cn.kdan.cloud.pdf.office.common.pojo.ResultMap;
+import cn.kdan.cloud.pdf.office.website.service.PaymentService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author ComPDFKit-WPH 2023/2/9
+ * <p>
+ * PDF OFFICE app端 Controller
+ */
+@RestController
+@RequestMapping("/pdf/office/app")
+@RequiredArgsConstructor
+public class PdfOfficeAppController {
+
+    private final PaymentService paymentService;
+
+    /**
+     * 获取订单记录
+     *
+     * @param platform platform
+     * @return ResultMap
+     */
+    @GetMapping("/getOrderRecord")
+    public ResultMap<SubscriptionSchemeVO> getOrderRecord(@RequestParam Integer platform) {
+        return paymentService.getSubscriptionSchemeInfo(platform);
+    }
+
+    /**
+     * 获取订阅结束时间
+     *
+     * @param platform 平台
+     * @return LocalDateTime
+     */
+    @GetMapping("/getEndDate")
+    public ResultMap<LocalDateTime> getEndDate(@RequestParam Integer platform) {
+        return ResultMap.success(paymentService.getSubscriptionEndDate(platform));
+    }
+
+
+}

+ 16 - 0
pdf-office-pdf-website/src/main/java/cn/kdan/cloud/pdf/office/website/service/PaymentService.java

@@ -0,0 +1,16 @@
+package cn.kdan.cloud.pdf.office.website.service;
+
+import cn.kdan.cloud.pdf.office.api.payment.vo.SubscriptionSchemeVO;
+import cn.kdan.cloud.pdf.office.api.product.enums.PlatformEnum;
+import cn.kdan.cloud.pdf.office.common.pojo.ResultMap;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author ComPDFKit-WPH 2023/2/9
+ */
+public interface PaymentService {
+    ResultMap<SubscriptionSchemeVO> getSubscriptionSchemeInfo(Integer platform);
+
+    LocalDateTime getSubscriptionEndDate(Integer platform);
+}

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

@@ -0,0 +1,41 @@
+package cn.kdan.cloud.pdf.office.website.service.impl;
+
+import cn.kdan.cloud.pdf.office.api.account.feign.UserApi;
+import cn.kdan.cloud.pdf.office.api.payment.feign.SubscriptionApi;
+import cn.kdan.cloud.pdf.office.api.payment.vo.SubscriptionSchemeVO;
+import cn.kdan.cloud.pdf.office.api.product.enums.PlatformEnum;
+import cn.kdan.cloud.pdf.office.common.pojo.ResultMap;
+import cn.kdan.cloud.pdf.office.common.utils.MyDateUtils;
+import cn.kdan.cloud.pdf.office.website.service.PaymentService;
+import cn.kdan.cloud.pdf.office.website.utils.SecurityUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author ComPDFKit-WPH 2023/2/9
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class PaymentServiceImpl implements PaymentService {
+
+    private final SubscriptionApi subscriptionApi;
+
+    private final UserApi userApi;
+    @Override
+    public ResultMap<SubscriptionSchemeVO> getSubscriptionSchemeInfo(Integer platform) {
+        String userId = SecurityUtils.getUserId();
+        return subscriptionApi.getSubscriptionSchemeInfo(userId, platform);
+    }
+
+    @Override
+    public LocalDateTime getSubscriptionEndDate(Integer platform) {
+        String userId = SecurityUtils.getUserId();
+        return MyDateUtils.dateToLocalDateTime(subscriptionApi.getSubscriptions(userId,platform).getResult().getEndDate());
+    }
+
+
+}

+ 46 - 0
pdf-office-pdf-website/src/main/java/cn/kdan/cloud/pdf/office/website/utils/SecurityUtils.java

@@ -0,0 +1,46 @@
+package cn.kdan.cloud.pdf.office.website.utils;
+
+import cn.kdan.cloud.pdf.office.common.exception.BackendRuntimeException;
+import cn.kdan.cloud.pdf.office.common.pojo.CustomUserDetails;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+
+import java.util.Optional;
+
+/**
+ * @author wph 2022/7/5
+ */
+public class SecurityUtils {
+
+    /**
+     * 获取认证信息
+     *
+     * @return 认证信息
+     */
+    public static Authentication getAuthentication() {
+        return SecurityContextHolder.getContext().getAuthentication();
+    }
+
+    /**
+     * 获取用户信息
+     *
+     * @return 用户信息
+     */
+    public static CustomUserDetails getUser() {
+        Authentication authentication = getAuthentication();
+        Object principal = authentication.getPrincipal();
+        if (principal instanceof CustomUserDetails) {
+            return (CustomUserDetails) principal;
+        }
+        throw new BackendRuntimeException("未知用户类型!");
+    }
+
+    /**
+     * 获取用户id
+     *
+     * @return 用户id
+     */
+    public static String getUserId() {
+        return Optional.of(getUser()).map(CustomUserDetails::getId).orElse(null);
+    }
+}

+ 5 - 0
pdf-office-product/src/main/java/cn/kdan/cloud/pdf/office/product/entity/Product.java

@@ -84,4 +84,9 @@ public class Product extends BaseEntity{
      */
     private String activityId;
 
+    /**
+     * 产品平台 1:windows,2:mac  PlatformEnum
+     */
+    private Integer platform;
+
 }

+ 0 - 2
pdf-office-product/src/main/java/cn/kdan/cloud/pdf/office/product/service/impl/ProductServiceImpl.java

@@ -78,6 +78,4 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
         BeanUtils.copyProperties(this.baseMapper.selectOne(new LambdaQueryWrapper<Product>().eq(Product::getId, productId)), productVO);
         return productVO;
     }
-
-
 }