diff --git a/_doc/Task.md b/_doc/Task.md index 075d995f..eeebaa6c 100644 --- a/_doc/Task.md +++ b/_doc/Task.md @@ -6,7 +6,7 @@ - [ ] 支持配置背景色和图标 - [x] 对各种交易增加新的同步失败异常处理, 防止同步失败后无限进行同步 - [ ] 增加首页驾驶舱功能 -- [ ] 商户应用要有类似删除的功能, 实现停用冻结, 但不影响数据的关联 +- [x] 商户应用增加停用功能, 实现停用冻结, 但不影响数据的关联 - [ ] 同步接口优化, 返回同步完的数据 - [x] 服务商支付支持 - [x] 支付宝 diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/merchant/MchApp.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/merchant/MchApp.java index 3f19ca45..d1da09ba 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/merchant/MchApp.java +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/entity/merchant/MchApp.java @@ -6,6 +6,7 @@ import org.dromara.daxpay.core.enums.SignTypeEnum; import org.dromara.daxpay.core.enums.MerchantNotifyTypeEnum; import org.dromara.daxpay.service.convert.merchant.MchAppConvert; import org.dromara.daxpay.service.enums.MchAppStatusEnum; +import org.dromara.daxpay.service.param.merchant.MchAppParam; import org.dromara.daxpay.service.result.merchant.MchAppResult; import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.TableField; @@ -72,6 +73,13 @@ public class MchApp extends MpBaseEntity implements ToResult { @TableField(updateStrategy = FieldStrategy.ALWAYS) private String notifyUrl; + /** + * 初始化 + */ + public static MchApp init(MchAppParam param){ + return MchAppConvert.CONVERT.toEntity(param); + } + @Override public MchAppResult toResult() { return MchAppConvert.CONVERT.toResult(this); diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/param/merchant/MchAppParam.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/param/merchant/MchAppParam.java index 3c145de9..16566896 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/param/merchant/MchAppParam.java +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/param/merchant/MchAppParam.java @@ -8,6 +8,7 @@ import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotNull; import lombok.Data; import lombok.experimental.Accessors; +import org.dromara.daxpay.service.enums.MchAppStatusEnum; import java.math.BigDecimal; @@ -28,7 +29,7 @@ public class MchAppParam { /** 应用名称 */ @Schema(description = "应用名称") - @NotNull(message = "应用名称不可为空", groups = ValidationGroup.add.class) + @NotNull(message = "应用名称不可为空") private String appName; /** @@ -36,13 +37,21 @@ public class MchAppParam { * @see SignTypeEnum */ @Schema(description = "签名方式") - @NotNull(message = "签名方式不可为空", groups = ValidationGroup.add.class) + @NotNull(message = "签名方式不可为空") private String signType; + /** + * 应用状态 + * @see MchAppStatusEnum + */ + @Schema(description = "应用状态") + @NotNull(message = "应用状态不可为空") + private String status; + /** 签名秘钥 */ @Schema(description = "签名秘钥") - @NotNull(message = "签名秘钥不可为空", groups = ValidationGroup.add.class) + @NotNull(message = "签名秘钥不可为空") private String signSecret; /** 是否对请求进行验签 */ @@ -51,12 +60,12 @@ public class MchAppParam { /** 支付限额 */ @Schema(description = "支付限额") - @NotNull(message = "支付限额不可为空", groups = ValidationGroup.add.class) + @NotNull(message = "支付限额不可为空") private BigDecimal limitAmount; /** 订单默认超时时间(分钟) */ @Schema(description = "订单默认超时时间(分钟)") - @NotNull(message = "订单默认超时时间(分钟)不可为空", groups = ValidationGroup.add.class) + @NotNull(message = "订单默认超时时间(分钟)不可为空") @Min(value = 5, message = "订单默认超时时间(分钟)不可小于5分钟") private Integer orderTimeout; diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/assist/PaymentAssistService.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/assist/PaymentAssistService.java index d1cd9ae7..86ab4d5f 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/assist/PaymentAssistService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/assist/PaymentAssistService.java @@ -7,6 +7,7 @@ import cn.hutool.core.date.LocalDateTimeUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.daxpay.core.enums.SignTypeEnum; +import org.dromara.daxpay.core.exception.ConfigNotEnableException; import org.dromara.daxpay.core.exception.VerifySignFailedException; import org.dromara.daxpay.core.param.PaymentCommonParam; import org.dromara.daxpay.core.result.DaxResult; @@ -16,6 +17,7 @@ import org.dromara.daxpay.service.common.context.ClientLocal; import org.dromara.daxpay.service.common.context.MchAppLocal; import org.dromara.daxpay.service.common.local.PaymentContextLocal; import org.dromara.daxpay.service.entity.merchant.MchApp; +import org.dromara.daxpay.service.enums.MchAppStatusEnum; import org.springframework.stereotype.Service; import java.time.LocalDateTime; @@ -131,6 +133,9 @@ public class PaymentAssistService { public void initMchApp(String appId) { // 获取应用信息 MchApp mchApp = mchAppCacheService.get(appId); + if (!Objects.equals(mchApp.getStatus(), MchAppStatusEnum.ENABLE.getCode())){ + throw new ConfigNotEnableException("商户应用未启用"); + } // 初始化支付上下文信息 MchAppLocal mchAppInfo = PaymentContextLocal.get().getMchAppInfo(); BeanUtil.copyProperties(mchApp, mchAppInfo); diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/merchant/MchAppService.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/merchant/MchAppService.java index 98e7de8a..f8129dc2 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/merchant/MchAppService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/merchant/MchAppService.java @@ -12,7 +12,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.daxpay.core.exception.ConfigNotExistException; import org.dromara.daxpay.core.exception.OperationFailException; -import org.dromara.daxpay.service.convert.merchant.MchAppConvert; import org.dromara.daxpay.service.dao.config.ChannelConfigManager; import org.dromara.daxpay.service.dao.merchant.MchAppManager; import org.dromara.daxpay.service.entity.config.ChannelConfig; @@ -44,7 +43,7 @@ public class MchAppService { * 添加应用 */ public void add(MchAppParam param) { - MchApp entity = MchAppConvert.CONVERT.toEntity(param); + MchApp entity = MchApp.init(param); // 生成应用号 entity.setAppId(this.generateAppId()) .setStatus(MchAppStatusEnum.ENABLE.getCode()); @@ -92,7 +91,6 @@ public class MchAppService { if (channelConfigManager.existedByField(ChannelConfig::getAppId, mchApp.getAppId())){ throw new OperationFailException("该商户应用已绑定支付配置,请先删除支付配置"); } - mchAppManager.deleteById(id); }