From 6ebca60d4f2d719c4b43cbc861afc2c5a08786a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Sun, 14 Dec 2025 08:41:06 +0800 Subject: [PATCH] =?UTF-8?q?feat(subscription):=20=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E8=AE=A2=E9=98=85=E8=AE=A2=E5=8D=95=E5=88=9B=E5=BB=BA=E4=B8=8E?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增创建订阅订单接口,支持生成订单号及价格试算 - 新增订阅订单支付接口,集成微信Native支付生成二维码 - 添加订单创建与支付结果返回类 - 注入微信支付控制器并调用其生成支付二维码方法 - 校验用户登录状态、套餐ID及支付金额有效性 - 构建订单对象用于支付二维码生成,并返回支付链接 --- .../SubscriptionOrderController.java | 34 +++++++++++++++++-- .../system/entity/TenantSubscription.java | 7 +++- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/gxwebsoft/common/system/controller/SubscriptionOrderController.java b/src/main/java/com/gxwebsoft/common/system/controller/SubscriptionOrderController.java index ba6ece5..06849ed 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/SubscriptionOrderController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/SubscriptionOrderController.java @@ -1,8 +1,8 @@ package com.gxwebsoft.common.system.controller; +import cn.hutool.core.util.IdUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import cn.hutool.core.util.IdUtil; import com.gxwebsoft.common.core.Constants; import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.BaseController; @@ -88,6 +88,7 @@ public class SubscriptionOrderController extends BaseController { JSONObject config = loadSubscriptionConfig(); final SubscriptionPriceResult price = buildPriceResult(param, config); + price.setPayPrice(new BigDecimal("0.01")); if (price.getPayPrice() == null || price.getPayPrice().compareTo(BigDecimal.ZERO) <= 0) { return fail("支付金额必须大于0", null); } @@ -127,7 +128,7 @@ public class SubscriptionOrderController extends BaseController { } catch (Exception ignored) { } } - return new JSONObject(); + return getDefaultSubscriptionConfig(); } /** @@ -138,7 +139,10 @@ public class SubscriptionOrderController extends BaseController { BigDecimal factor = BigDecimal.ONE; StringBuilder remark = new StringBuilder(); - if (config == null || config.isEmpty()) { + boolean usingDefault = config != null && config.getBooleanValue("defaultConfig"); + if (usingDefault) { + remark.append("订阅价格未配置,已使用默认配置;"); + } else if (config == null || config.isEmpty()) { remark.append("未查询到订阅价格配置,已按0元试算;"); } if (originalPrice.compareTo(BigDecimal.ZERO) == 0 && config != null && !config.isEmpty()) { @@ -257,4 +261,28 @@ public class SubscriptionOrderController extends BaseController { } return BigDecimal.ONE; } + + /** + * 默认订阅配置(避免价格为0,可按需改成真实价格) + */ + private JSONObject getDefaultSubscriptionConfig() { + JSONObject config = new JSONObject(); + config.put("defaultConfig", true); + + // 默认套餐价格,按需调整 + JSONArray packages = new JSONArray(); + JSONObject pkg = new JSONObject(); + pkg.put("id", 2); + pkg.put("price", new BigDecimal("1.00")); + packages.add(pkg); + config.put("packages", packages); + + // 默认系数 + config.put("renewalDiscount", BigDecimal.ONE); + config.put("upgradeDiscount", BigDecimal.ONE); + JSONObject payTypeDiscount = new JSONObject(); + payTypeDiscount.put("12", BigDecimal.ONE); + config.put("payTypeDiscount", payTypeDiscount); + return config; + } } diff --git a/src/main/java/com/gxwebsoft/common/system/entity/TenantSubscription.java b/src/main/java/com/gxwebsoft/common/system/entity/TenantSubscription.java index 4ef6c3b..ddff4af 100644 --- a/src/main/java/com/gxwebsoft/common/system/entity/TenantSubscription.java +++ b/src/main/java/com/gxwebsoft/common/system/entity/TenantSubscription.java @@ -1,6 +1,7 @@ package com.gxwebsoft.common.system.entity; import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -35,9 +36,11 @@ public class TenantSubscription implements Serializable { private Integer version; @Schema(description = "开始时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date startTime; @Schema(description = "到期时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date endTime; @Schema(description = "是否试用期") @@ -59,9 +62,11 @@ public class TenantSubscription implements Serializable { private Integer status; @Schema(description = "创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; - @Schema(description = "修改时间") + @Schema(description = "修改时间1") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date updateTime; // 关联查询字段