mirror of
https://gitee.com/dromara/dax-pay.git
synced 2025-10-14 13:50:25 +00:00
feat 商户应用增加停用功能
This commit is contained in:
@@ -6,7 +6,7 @@
|
|||||||
- [ ] 支持配置背景色和图标
|
- [ ] 支持配置背景色和图标
|
||||||
- [x] 对各种交易增加新的同步失败异常处理, 防止同步失败后无限进行同步
|
- [x] 对各种交易增加新的同步失败异常处理, 防止同步失败后无限进行同步
|
||||||
- [ ] 增加首页驾驶舱功能
|
- [ ] 增加首页驾驶舱功能
|
||||||
- [ ] 商户应用要有类似删除的功能, 实现停用冻结, 但不影响数据的关联
|
- [x] 商户应用增加停用功能, 实现停用冻结, 但不影响数据的关联
|
||||||
- [ ] 同步接口优化, 返回同步完的数据
|
- [ ] 同步接口优化, 返回同步完的数据
|
||||||
- [x] 服务商支付支持
|
- [x] 服务商支付支持
|
||||||
- [x] 支付宝
|
- [x] 支付宝
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user