feat 商户应用增加停用功能

This commit is contained in:
DaxPay
2024-12-26 09:59:51 +08:00
parent 842cf71a93
commit db5720e2a9
5 changed files with 29 additions and 9 deletions

View File

@@ -6,7 +6,7 @@
- [ ] 支持配置背景色和图标 - [ ] 支持配置背景色和图标
- [x] 对各种交易增加新的同步失败异常处理, 防止同步失败后无限进行同步 - [x] 对各种交易增加新的同步失败异常处理, 防止同步失败后无限进行同步
- [ ] 增加首页驾驶舱功能 - [ ] 增加首页驾驶舱功能
- [ ] 商户应用要有类似删除的功能, 实现停用冻结, 但不影响数据的关联 - [x] 商户应用增加停用功能, 实现停用冻结, 但不影响数据的关联
- [ ] 同步接口优化, 返回同步完的数据 - [ ] 同步接口优化, 返回同步完的数据
- [x] 服务商支付支持 - [x] 服务商支付支持
- [x] 支付宝 - [x] 支付宝

View File

@@ -6,6 +6,7 @@ import org.dromara.daxpay.core.enums.SignTypeEnum;
import org.dromara.daxpay.core.enums.MerchantNotifyTypeEnum; import org.dromara.daxpay.core.enums.MerchantNotifyTypeEnum;
import org.dromara.daxpay.service.convert.merchant.MchAppConvert; import org.dromara.daxpay.service.convert.merchant.MchAppConvert;
import org.dromara.daxpay.service.enums.MchAppStatusEnum; import org.dromara.daxpay.service.enums.MchAppStatusEnum;
import org.dromara.daxpay.service.param.merchant.MchAppParam;
import org.dromara.daxpay.service.result.merchant.MchAppResult; import org.dromara.daxpay.service.result.merchant.MchAppResult;
import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
@@ -72,6 +73,13 @@ public class MchApp extends MpBaseEntity implements ToResult<MchAppResult> {
@TableField(updateStrategy = FieldStrategy.ALWAYS) @TableField(updateStrategy = FieldStrategy.ALWAYS)
private String notifyUrl; private String notifyUrl;
/**
* 初始化
*/
public static MchApp init(MchAppParam param){
return MchAppConvert.CONVERT.toEntity(param);
}
@Override @Override
public MchAppResult toResult() { public MchAppResult toResult() {
return MchAppConvert.CONVERT.toResult(this); return MchAppConvert.CONVERT.toResult(this);

View File

@@ -8,6 +8,7 @@ import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.dromara.daxpay.service.enums.MchAppStatusEnum;
import java.math.BigDecimal; import java.math.BigDecimal;
@@ -28,7 +29,7 @@ public class MchAppParam {
/** 应用名称 */ /** 应用名称 */
@Schema(description = "应用名称") @Schema(description = "应用名称")
@NotNull(message = "应用名称不可为空", groups = ValidationGroup.add.class) @NotNull(message = "应用名称不可为空")
private String appName; private String appName;
/** /**
@@ -36,13 +37,21 @@ public class MchAppParam {
* @see SignTypeEnum * @see SignTypeEnum
*/ */
@Schema(description = "签名方式") @Schema(description = "签名方式")
@NotNull(message = "签名方式不可为空", groups = ValidationGroup.add.class) @NotNull(message = "签名方式不可为空")
private String signType; private String signType;
/**
* 应用状态
* @see MchAppStatusEnum
*/
@Schema(description = "应用状态")
@NotNull(message = "应用状态不可为空")
private String status;
/** 签名秘钥 */ /** 签名秘钥 */
@Schema(description = "签名秘钥") @Schema(description = "签名秘钥")
@NotNull(message = "签名秘钥不可为空", groups = ValidationGroup.add.class) @NotNull(message = "签名秘钥不可为空")
private String signSecret; private String signSecret;
/** 是否对请求进行验签 */ /** 是否对请求进行验签 */
@@ -51,12 +60,12 @@ public class MchAppParam {
/** 支付限额 */ /** 支付限额 */
@Schema(description = "支付限额") @Schema(description = "支付限额")
@NotNull(message = "支付限额不可为空", groups = ValidationGroup.add.class) @NotNull(message = "支付限额不可为空")
private BigDecimal limitAmount; private BigDecimal limitAmount;
/** 订单默认超时时间(分钟) */ /** 订单默认超时时间(分钟) */
@Schema(description = "订单默认超时时间(分钟)") @Schema(description = "订单默认超时时间(分钟)")
@NotNull(message = "订单默认超时时间(分钟)不可为空", groups = ValidationGroup.add.class) @NotNull(message = "订单默认超时时间(分钟)不可为空")
@Min(value = 5, message = "订单默认超时时间(分钟)不可小于5分钟") @Min(value = 5, message = "订单默认超时时间(分钟)不可小于5分钟")
private Integer orderTimeout; private Integer orderTimeout;

View File

@@ -7,6 +7,7 @@ import cn.hutool.core.date.LocalDateTimeUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.daxpay.core.enums.SignTypeEnum; 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.exception.VerifySignFailedException;
import org.dromara.daxpay.core.param.PaymentCommonParam; import org.dromara.daxpay.core.param.PaymentCommonParam;
import org.dromara.daxpay.core.result.DaxResult; 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.context.MchAppLocal;
import org.dromara.daxpay.service.common.local.PaymentContextLocal; import org.dromara.daxpay.service.common.local.PaymentContextLocal;
import org.dromara.daxpay.service.entity.merchant.MchApp; import org.dromara.daxpay.service.entity.merchant.MchApp;
import org.dromara.daxpay.service.enums.MchAppStatusEnum;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -131,6 +133,9 @@ public class PaymentAssistService {
public void initMchApp(String appId) { public void initMchApp(String appId) {
// 获取应用信息 // 获取应用信息
MchApp mchApp = mchAppCacheService.get(appId); MchApp mchApp = mchAppCacheService.get(appId);
if (!Objects.equals(mchApp.getStatus(), MchAppStatusEnum.ENABLE.getCode())){
throw new ConfigNotEnableException("商户应用未启用");
}
// 初始化支付上下文信息 // 初始化支付上下文信息
MchAppLocal mchAppInfo = PaymentContextLocal.get().getMchAppInfo(); MchAppLocal mchAppInfo = PaymentContextLocal.get().getMchAppInfo();
BeanUtil.copyProperties(mchApp, mchAppInfo); BeanUtil.copyProperties(mchApp, mchAppInfo);

View File

@@ -12,7 +12,6 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.daxpay.core.exception.ConfigNotExistException; import org.dromara.daxpay.core.exception.ConfigNotExistException;
import org.dromara.daxpay.core.exception.OperationFailException; 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.config.ChannelConfigManager;
import org.dromara.daxpay.service.dao.merchant.MchAppManager; import org.dromara.daxpay.service.dao.merchant.MchAppManager;
import org.dromara.daxpay.service.entity.config.ChannelConfig; import org.dromara.daxpay.service.entity.config.ChannelConfig;
@@ -44,7 +43,7 @@ public class MchAppService {
* 添加应用 * 添加应用
*/ */
public void add(MchAppParam param) { public void add(MchAppParam param) {
MchApp entity = MchAppConvert.CONVERT.toEntity(param); MchApp entity = MchApp.init(param);
// 生成应用号 // 生成应用号
entity.setAppId(this.generateAppId()) entity.setAppId(this.generateAppId())
.setStatus(MchAppStatusEnum.ENABLE.getCode()); .setStatus(MchAppStatusEnum.ENABLE.getCode());
@@ -92,7 +91,6 @@ public class MchAppService {
if (channelConfigManager.existedByField(ChannelConfig::getAppId, mchApp.getAppId())){ if (channelConfigManager.existedByField(ChannelConfig::getAppId, mchApp.getAppId())){
throw new OperationFailException("该商户应用已绑定支付配置,请先删除支付配置"); throw new OperationFailException("该商户应用已绑定支付配置,请先删除支付配置");
} }
mchAppManager.deleteById(id); mchAppManager.deleteById(id);
} }