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] 支付宝

View File

@@ -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<MchAppResult> {
@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);

View File

@@ -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;

View File

@@ -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);

View File

@@ -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);
}