refactor: 删除 MchApp 基类体系,appId 内联到各实体

This commit is contained in:
DaxPay Dev
2026-06-16 21:41:04 +08:00
parent b8dc17d83b
commit f96d1091d2
34 changed files with 220 additions and 151 deletions

View File

@@ -1,24 +0,0 @@
package org.dromara.daxpay.payment.common.entity.merchant;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import lombok.experimental.FieldNameConstants;
/// # 商户基础实体类
///
@EqualsAndHashCode(callSuper = true)
@Data
@Accessors(chain = true)
@FieldNameConstants
public class MchAppBaseEntity extends MchBaseEntity {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
}

View File

@@ -1,23 +0,0 @@
package org.dromara.daxpay.payment.common.entity.merchant;
import org.dromara.daxpay.platform.common.mybatisplus.base.MpBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import lombok.experimental.FieldNameConstants;
/// # 商户基础实体类 应用/商户/服务商号可以更新
///
@EqualsAndHashCode(callSuper = true)
@Data
@Accessors(chain = true)
@FieldNameConstants
public class MchAppEditEntity extends MpBaseEntity {
/// 商户号
private String mchNo;
/// 应用号
private String appId;
}

View File

@@ -1,26 +0,0 @@
package org.dromara.daxpay.payment.common.entity.merchant;
import org.dromara.daxpay.platform.common.mybatisplus.base.MpCreateEntity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.FieldNameConstants;
/// # 商户记录实体类, 只有创建人和时间
///
@Getter
@Setter
@FieldNameConstants(innerTypeName = "MchRecord")
public class MchAppRecordEntity extends MpCreateEntity {
/// 商户号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String mchNo;
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
}

View File

@@ -4,9 +4,6 @@ import org.dromara.daxpay.platform.common.mybatisplus.util.MpUtil;
import org.dromara.daxpay.platform.iam.service.client.ClientCodeService;
import org.dromara.daxpay.payment.common.context.PaymentContext;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppBaseEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppEditEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppRecordEntity;
import cn.hutool.core.util.ClassUtil;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
@@ -71,8 +68,8 @@ public class CustomTenantLineHandler implements TenantLineHandler {
if (tableInfo == null){
return true;
}
// 如果为 MchAppBaseEntity、MchAppEditEntity、MchAppRecordEntity 子类, MchBaseEntity, 不可以忽略过滤
boolean anyMatch = Stream.of(MchAppBaseEntity.class, MchAppEditEntity.class, MchAppRecordEntity.class, MchBaseEntity.class)
// 如果为 MchBaseEntity 子类, 不可以忽略过滤
boolean anyMatch = Stream.of(MchBaseEntity.class)
.anyMatch(entityClass -> ClassUtil.isAssignable(entityClass, tableInfo.getEntityType()));
return !anyMatch;
}

View File

@@ -9,4 +9,7 @@ import java.util.List;
public interface MchAppInfoAssistQueryService {
List<LabelValue> dropdown(String mchNo);
List<LabelValue> dropdownByEnable(String mchNo);
/// 查询商户默认应用号
String findDefaultAppId(String mchNo);
}

View File

@@ -2,9 +2,12 @@ package org.dromara.daxpay.payment.masterdata.config.entity;
import org.dromara.daxpay.platform.common.mybatisplus.function.ToResult;
import org.dromara.daxpay.platform.core.enums.pay.channel.ChannelEnum;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppBaseEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import org.dromara.daxpay.payment.masterdata.config.convert.ChannelConfigConvert;
import org.dromara.daxpay.payment.masterdata.config.result.ChannelConfigResult;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -16,7 +19,11 @@ import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@TableName("pay_channel_config" )
public class ChannelConfig extends MchAppBaseEntity implements ToResult<ChannelConfigResult> {
public class ChannelConfig extends MchBaseEntity implements ToResult<ChannelConfigResult> {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
/// 支付通道
/// @see ChannelEnum

View File

@@ -1,10 +1,13 @@
package org.dromara.daxpay.payment.old.pay.entity.notice.callback;
import org.dromara.daxpay.platform.common.mybatisplus.function.ToResult;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppRecordEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import org.dromara.daxpay.payment.old.pay.convert.notice.MerchantCallbackConvert;
import org.dromara.daxpay.platform.core.enums.pay.notice.NoticeSendTypeEnum;
import org.dromara.daxpay.payment.old.pay.result.notice.callback.MerchantCallbackRecordResult;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -16,7 +19,11 @@ import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@TableName("pay_merchant_callback_record")
public class MerchantCallbackRecord extends MchAppRecordEntity implements ToResult<MerchantCallbackRecordResult> {
public class MerchantCallbackRecord extends MchBaseEntity implements ToResult<MerchantCallbackRecordResult> {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
/// 任务ID
private Long taskId;

View File

@@ -1,11 +1,12 @@
package org.dromara.daxpay.payment.old.pay.entity.notice.callback;
import org.dromara.daxpay.platform.common.mybatisplus.function.ToResult;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppBaseEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import org.dromara.daxpay.payment.old.pay.convert.notice.MerchantCallbackConvert;
import org.dromara.daxpay.platform.core.enums.pay.notice.CallbackNoticeTypeEnum;
import org.dromara.daxpay.platform.core.enums.pay.trade.TradeTypeEnum;
import org.dromara.daxpay.payment.old.pay.result.notice.callback.MerchantCallbackTaskResult;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
@@ -21,7 +22,11 @@ import java.time.OffsetDateTime;
@Data
@Accessors(chain = true)
@TableName("pay_merchant_callback_task")
public class MerchantCallbackTask extends MchAppBaseEntity implements ToResult<MerchantCallbackTaskResult> {
public class MerchantCallbackTask extends MchBaseEntity implements ToResult<MerchantCallbackTaskResult> {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
/// 本地交易ID
private Long tradeId;

View File

@@ -1,7 +1,7 @@
package org.dromara.daxpay.payment.old.pay.entity.order.pay;
import org.dromara.daxpay.platform.common.mybatisplus.function.ToResult;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppBaseEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import org.dromara.daxpay.payment.old.pay.convert.order.pay.PayOrderConvert;
import org.dromara.daxpay.platform.core.enums.pay.channel.*;
import org.dromara.daxpay.platform.core.enums.pay.pay.*;
@@ -9,6 +9,7 @@ import org.dromara.daxpay.platform.core.enums.pay.trade.*;
import org.dromara.daxpay.payment.old.pay.result.order.pay.PayOrderVo;
import org.dromara.daxpay.platform.core.enums.unipay.PayLimitPayEnum;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
@@ -26,7 +27,11 @@ import java.util.Objects;
@Data
@Accessors(chain = true)
@TableName("pay_order")
public class PayOrder extends MchAppBaseEntity implements ToResult<PayOrderVo> {
public class PayOrder extends MchBaseEntity implements ToResult<PayOrderVo> {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
/// 商户订单号
private String bizOrderNo;

View File

@@ -1,9 +1,12 @@
package org.dromara.daxpay.payment.old.pay.entity.order.pay;
import org.dromara.daxpay.platform.common.mybatisplus.function.ToResult;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppBaseEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import org.dromara.daxpay.payment.old.pay.convert.order.pay.PayOrderConvert;
import org.dromara.daxpay.payment.old.pay.result.order.pay.PayOrderExpandResult;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -18,7 +21,11 @@ import java.time.OffsetDateTime;
@Data
@Accessors(chain = true)
@TableName(value = "pay_order_expand",autoResultMap = true)
public class PayOrderExpand extends MchAppBaseEntity implements ToResult<PayOrderExpandResult>{
public class PayOrderExpand extends MchBaseEntity implements ToResult<PayOrderExpandResult>{
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
/// 同步跳转地址
private String returnUrl;

View File

@@ -6,9 +6,10 @@ import org.dromara.daxpay.platform.core.enums.pay.channel.ProductEnum;
import org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum;
import org.dromara.daxpay.platform.core.enums.pay.refund.RefundStatusEnum;
import org.dromara.daxpay.platform.core.enums.pay.trade.SettleStatusEnum;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppBaseEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import org.dromara.daxpay.payment.old.pay.convert.order.refund.RefundOrderConvert;
import org.dromara.daxpay.payment.old.pay.result.order.refund.RefundOrderVo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
@@ -25,7 +26,11 @@ import java.time.OffsetDateTime;
@Data
@Accessors(chain = true)
@TableName("pay_refund_order")
public class RefundOrder extends MchAppBaseEntity implements ToResult<RefundOrderVo> {
public class RefundOrder extends MchBaseEntity implements ToResult<RefundOrderVo> {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
/// 支付订单ID
private Long orderId;

View File

@@ -5,9 +5,10 @@ import org.dromara.daxpay.platform.core.enums.pay.channel.ChannelEnum;
import org.dromara.daxpay.platform.core.enums.pay.channel.ProductEnum;
import org.dromara.daxpay.platform.core.enums.pay.transfer.TransferPayeeTypeEnum;
import org.dromara.daxpay.platform.core.enums.pay.transfer.TransferStatusEnum;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppBaseEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import org.dromara.daxpay.payment.old.pay.convert.order.transfer.TransferOrderConvert;
import org.dromara.daxpay.payment.old.pay.result.order.transfer.TransferOrderVo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
@@ -24,7 +25,12 @@ import java.time.OffsetDateTime;
@Data
@Accessors(chain = true)
@TableName("pay_transfer_order")
public class TransferOrder extends MchAppBaseEntity implements ToResult<TransferOrderVo> {
public class TransferOrder extends MchBaseEntity implements ToResult<TransferOrderVo> {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
/// 商户转账号
private String bizTransferNo;

View File

@@ -2,7 +2,10 @@ package org.dromara.daxpay.payment.old.pay.entity.reconcile;
import org.dromara.daxpay.platform.core.enums.pay.trade.TradeStatusEnum;
import org.dromara.daxpay.platform.core.enums.pay.trade.TradeTypeEnum;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppRecordEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -17,7 +20,11 @@ import java.time.OffsetDateTime;
@Data
@Accessors(chain = true)
@TableName("pay_channel_reconcile_trade")
public class ChannelReconcileTrade extends MchAppRecordEntity {
public class ChannelReconcileTrade extends MchBaseEntity {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
/// 关联对账单ID
private Long reconcileId;

View File

@@ -2,10 +2,13 @@ package org.dromara.daxpay.payment.old.pay.entity.reconcile;
import org.dromara.daxpay.platform.common.mybatisplus.function.ToResult;
import org.dromara.daxpay.platform.core.enums.pay.trade.TradeTypeEnum;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppRecordEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import org.dromara.daxpay.payment.old.pay.convert.reconcile.ReconcileConvert;
import org.dromara.daxpay.platform.core.enums.pay.reconcile.ReconcileDiscrepancyTypeEnum;
import org.dromara.daxpay.payment.old.pay.result.reconcile.ReconcileDiscrepancyResult;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -21,7 +24,11 @@ import java.time.OffsetDateTime;
@Data
@Accessors(chain = true)
@TableName("pay_reconcile_discrepancy")
public class ReconcileDiscrepancy extends MchAppRecordEntity implements ToResult<ReconcileDiscrepancyResult> {
public class ReconcileDiscrepancy extends MchBaseEntity implements ToResult<ReconcileDiscrepancyResult> {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
/// 对账单ID
private Long reconcileId;

View File

@@ -3,10 +3,11 @@ package org.dromara.daxpay.payment.old.pay.entity.reconcile;
import org.dromara.daxpay.platform.common.mybatisplus.function.ToResult;
import org.dromara.daxpay.platform.core.enums.pay.channel.ChannelEnum;
import org.dromara.daxpay.platform.core.enums.pay.channel.ProductEnum;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppBaseEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import org.dromara.daxpay.payment.old.pay.convert.reconcile.ReconcileConvert;
import org.dromara.daxpay.platform.core.enums.pay.reconcile.ReconcileResultEnum;
import org.dromara.daxpay.payment.old.pay.result.reconcile.ReconcileStatementResult;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
@@ -25,7 +26,11 @@ import java.time.LocalDate;
@Data
@Accessors(chain = true)
@TableName(value = "pay_reconcile_statement")
public class ReconcileStatement extends MchAppBaseEntity implements ToResult<ReconcileStatementResult> {
public class ReconcileStatement extends MchBaseEntity implements ToResult<ReconcileStatementResult> {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
/// 名称
private String name;

View File

@@ -5,10 +5,13 @@ import org.dromara.daxpay.platform.core.enums.pay.notice.CallbackStatusEnum;
import org.dromara.daxpay.platform.core.enums.pay.channel.ChannelEnum;
import org.dromara.daxpay.platform.core.enums.pay.channel.ProductEnum;
import org.dromara.daxpay.platform.core.enums.pay.trade.TradeTypeEnum;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppRecordEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import org.dromara.daxpay.payment.old.pay.convert.record.TradeCallbackRecordConvert;
import org.dromara.daxpay.payment.old.pay.result.record.callback.TradeCallbackRecordResult;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -20,7 +23,11 @@ import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@TableName("pay_trade_callback_record")
public class TradeCallbackRecord extends MchAppRecordEntity implements ToResult<TradeCallbackRecordResult> {
public class TradeCallbackRecord extends MchBaseEntity implements ToResult<TradeCallbackRecordResult> {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
/// 平台交易号
private String tradeNo;

View File

@@ -4,10 +4,13 @@ import org.dromara.daxpay.platform.common.mybatisplus.function.ToResult;
import org.dromara.daxpay.platform.core.enums.pay.channel.ChannelEnum;
import org.dromara.daxpay.platform.core.enums.pay.channel.ProductEnum;
import org.dromara.daxpay.platform.core.enums.pay.pay.CloseTypeEnum;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppRecordEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import org.dromara.daxpay.payment.old.pay.convert.record.PayCloseRecordConvert;
import org.dromara.daxpay.payment.old.pay.result.record.close.PayCloseRecordResult;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -19,7 +22,11 @@ import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@TableName("pay_close_record")
public class PayCloseRecord extends MchAppRecordEntity implements ToResult<PayCloseRecordResult> {
public class PayCloseRecord extends MchBaseEntity implements ToResult<PayCloseRecordResult> {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
/// 订单号
private String orderNo;

View File

@@ -4,9 +4,12 @@ import org.dromara.daxpay.platform.common.mybatisplus.function.ToResult;
import org.dromara.daxpay.platform.core.enums.pay.channel.ChannelEnum;
import org.dromara.daxpay.platform.core.enums.pay.channel.ProductEnum;
import org.dromara.daxpay.platform.core.enums.pay.trade.TradeTypeEnum;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppRecordEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import org.dromara.daxpay.payment.old.pay.convert.record.TradeFlowRecordConvert;
import org.dromara.daxpay.payment.old.pay.result.record.flow.TradeFlowRecordResult;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -20,7 +23,11 @@ import java.math.BigDecimal;
@Data
@Accessors(chain = true)
@TableName("pay_trade_flow_record")
public class TradeFlowRecord extends MchAppRecordEntity implements ToResult<TradeFlowRecordResult> {
public class TradeFlowRecord extends MchBaseEntity implements ToResult<TradeFlowRecordResult> {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
/// 订单标题
private String title;

View File

@@ -4,10 +4,13 @@ import org.dromara.daxpay.platform.common.mybatisplus.function.ToResult;
import org.dromara.daxpay.platform.core.enums.pay.channel.ChannelEnum;
import org.dromara.daxpay.platform.core.enums.pay.channel.ProductEnum;
import org.dromara.daxpay.platform.core.enums.pay.trade.TradeTypeEnum;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppRecordEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import org.dromara.daxpay.payment.old.pay.convert.record.TradeSyncRecordConvert;
import org.dromara.daxpay.payment.old.pay.result.record.sync.TradeSyncRecordResult;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -19,7 +22,11 @@ import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@TableName("pay_trade_sync_record")
public class TradeSyncRecord extends MchAppRecordEntity implements ToResult<TradeSyncRecordResult> {
public class TradeSyncRecord extends MchBaseEntity implements ToResult<TradeSyncRecordResult> {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
/// 平台交易号
private String tradeNo;

View File

@@ -11,11 +11,10 @@ import java.util.Optional;
@Repository
public class PayNormalOrderManager extends BaseManager<PayNormalOrderMapper, PayNormalOrder> {
/// 根据业务单号查询
public Optional<PayNormalOrder> findByBizOrderNo(String bizOrderNo, String appId) {
/// 根据业务单号查询(按商户号自动租户隔离)
public Optional<PayNormalOrder> findByBizOrderNo(String bizOrderNo) {
return lambdaQuery()
.eq(PayNormalOrder::getBizOrderNo, bizOrderNo)
.eq(PayNormalOrder::getAppId, appId)
.oneOpt();
}
}

View File

@@ -25,27 +25,17 @@ public class PayTradeManager extends BaseManager<PayTradeMapper, PayTrade> {
return findByField(PayTrade::getTradeNo, tradeNo);
}
/// 根据交易号+应用ID查询
public Optional<PayTrade> findByTradeNo(String tradeNo, String appId) {
return lambdaQuery()
.eq(PayTrade::getTradeNo, tradeNo)
.eq(PayTrade::getAppId, appId)
.oneOpt();
}
/// 根据通道订单号+应用ID查询
public Optional<PayTrade> findByOutOrderNo(String outOrderNo, String appId) {
/// 根据通道订单号查询(按商户号自动租户隔离)
public Optional<PayTrade> findByOutOrderNo(String outOrderNo) {
return lambdaQuery()
.eq(PayTrade::getOutOrderNo, outOrderNo)
.eq(PayTrade::getAppId, appId)
.oneOpt();
}
/// 根据容器ID查询
public Optional<PayTrade> findByContainerId(Long containerId, String appId) {
/// 根据容器ID查询(按商户号自动租户隔离)
public Optional<PayTrade> findByContainerId(Long containerId) {
return lambdaQuery()
.eq(PayTrade::getContainerId, containerId)
.eq(PayTrade::getAppId, appId)
.oneOpt();
}

View File

@@ -1,6 +1,9 @@
package org.dromara.daxpay.payment.pay.order.entity;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppBaseEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -17,7 +20,11 @@ import java.time.OffsetDateTime;
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("pay_auth")
public class PayAuthOrder extends MchAppBaseEntity {
public class PayAuthOrder extends MchBaseEntity {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
/// 商户业务单号
private String bizOrderNo;

View File

@@ -1,6 +1,9 @@
package org.dromara.daxpay.payment.pay.order.entity;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppBaseEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -15,7 +18,11 @@ import lombok.experimental.Accessors;
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("pay_combine")
public class PayCombineOrder extends MchAppBaseEntity {
public class PayCombineOrder extends MchBaseEntity {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
/// 商户合单业务号
private String bizOrderNo;

View File

@@ -1,6 +1,9 @@
package org.dromara.daxpay.payment.pay.order.entity;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppBaseEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -21,7 +24,11 @@ import java.time.OffsetDateTime;
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("pay_normal_order")
public class PayNormalOrder extends MchAppBaseEntity {
public class PayNormalOrder extends MchBaseEntity {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
/// 商户业务单号
private String bizOrderNo;

View File

@@ -1,6 +1,9 @@
package org.dromara.daxpay.payment.pay.order.entity;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppBaseEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -16,7 +19,11 @@ import java.time.OffsetDateTime;
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("pay_recurring")
public class PayRecurringOrder extends MchAppBaseEntity {
public class PayRecurringOrder extends MchBaseEntity {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
/// 商户签约业务号
private String bizOrderNo;

View File

@@ -1,6 +1,7 @@
package org.dromara.daxpay.payment.pay.order.entity;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppBaseEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
@@ -20,7 +21,11 @@ import java.time.OffsetDateTime;
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("pay_trade")
public class PayTrade extends MchAppBaseEntity {
public class PayTrade extends MchBaseEntity {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
/// 支付交易号(统一雪花,无形态前缀)
private String tradeNo;

View File

@@ -9,6 +9,7 @@ import org.dromara.daxpay.platform.core.util.TradeNoGenerateUtil;
import org.dromara.daxpay.payment.common.enums.NormalOrderStatusEnum;
import org.dromara.daxpay.payment.common.enums.PayFundStatusEnum;
import org.dromara.daxpay.payment.common.enums.PayTradeTypeEnum;
import org.dromara.daxpay.payment.common.service.MchAppInfoAssistQueryService;
import org.dromara.daxpay.payment.common.util.PayUtil;
import cn.hutool.core.util.StrUtil;
import org.dromara.daxpay.payment.pay.convert.PayTradeConvert;
@@ -37,10 +38,16 @@ public class PayAssistService {
private final PayNormalOrderManager payNormalOrderManager;
private final PayTradeManager payTradeManager;
private final MchAppInfoAssistQueryService mchAppInfoAssistQueryService;
/// 创建支付订单(容器 + 资金交易)
@Transactional(rollbackFor = Exception.class)
public PayTrade createOrder(PayParam payParam) {
// 解析应用号:有传输则使用,无则取商户默认应用
String appId = payParam.getAppId();
if (StrUtil.isBlank(appId)) {
appId = mchAppInfoAssistQueryService.findDefaultAppId(payParam.getMchNo());
}
OffsetDateTime expiredTime = this.getExpiredTime(payParam.getExpiredTime());
Long amount = Long.valueOf(PayUtil.convertCentAmount(payParam.getAmount()));
// 从产品编码派生通道编码
@@ -70,9 +77,11 @@ public class PayAssistService {
normalOrder.setProduct(payParam.getProduct());
normalOrder.setExtraParam(payParam.getExtraParam());
normalOrder.setTerminalNo(terminalNo);
normalOrder.setAppId(appId);
payNormalOrderManager.save(normalOrder);
// 创建资金交易 PayTrade
PayTrade trade = new PayTrade();
trade.setAppId(appId);
trade.setTradeNo(TradeNoGenerateUtil.pay());
trade.setTradeType(PayTradeTypeEnum.NORMAL.getCode());
trade.setContainerId(normalOrder.getId());
@@ -93,14 +102,14 @@ public class PayAssistService {
return trade;
}
/// 根据业务单号查询并检查支付状态
public PayTrade getOrderAndCheck(String bizOrderNo, String appId) {
Optional<PayNormalOrder> normalOrderOpt = payNormalOrderManager.findByBizOrderNo(bizOrderNo, appId);
/// 根据业务单号查询并检查支付状态(按商户号自动租户隔离)
public PayTrade getOrderAndCheck(String bizOrderNo) {
Optional<PayNormalOrder> normalOrderOpt = payNormalOrderManager.findByBizOrderNo(bizOrderNo);
if (normalOrderOpt.isEmpty()) {
return null;
}
PayNormalOrder normalOrder = normalOrderOpt.get();
PayTrade trade = payTradeManager.findByContainerId(normalOrder.getId(), appId).orElse(null);
PayTrade trade = payTradeManager.findByContainerId(normalOrder.getId()).orElse(null);
if (trade == null) {
return null;
}

View File

@@ -43,10 +43,10 @@ public class PayCallbackService {
return null;
}
try {
PayTrade trade = payTradeManager.findByTradeNo(callbackInfo.getTradeNo(), apiContext.getTradeInfo().getAppId())
PayTrade trade = payTradeManager.findByTradeNo(callbackInfo.getTradeNo())
.orElse(null);
if (Objects.isNull(trade)) {
trade = payTradeManager.findByOutOrderNo(callbackInfo.getOutTradeNo(), apiContext.getTradeInfo().getAppId())
trade = payTradeManager.findByOutOrderNo(callbackInfo.getOutTradeNo())
.orElse(null);
}
if (Objects.isNull(trade)) {

View File

@@ -42,13 +42,13 @@ public class PayCloseService {
if (StrUtil.isBlank(param.getOrderNo()) && Objects.isNull(param.getBizOrderNo())) {
throw new BizInfoException(CommonErrorCode.VALIDATE_PARAMETERS_ERROR, "pay.error.orderNoRequired");
}
PayTrade trade = payTradeManager.findByTradeNo(param.getOrderNo(), param.getAppId())
PayTrade trade = payTradeManager.findByTradeNo(param.getOrderNo())
.orElse(null);
if (Objects.isNull(trade) && Objects.nonNull(param.getBizOrderNo())) {
PayNormalOrder normalOrder = payNormalOrderManager.findByBizOrderNo(param.getBizOrderNo(), param.getAppId())
PayNormalOrder normalOrder = payNormalOrderManager.findByBizOrderNo(param.getBizOrderNo())
.orElse(null);
if (Objects.nonNull(normalOrder)) {
trade = payTradeManager.findByContainerId(normalOrder.getId(), param.getAppId())
trade = payTradeManager.findByContainerId(normalOrder.getId())
.orElse(null);
}
}

View File

@@ -43,7 +43,7 @@ public class PayService {
throw new BizInfoException(CommonErrorCode.VALIDATE_PARAMETERS_ERROR, "pay.error.pay.processing");
}
try {
PayTrade trade = payAssistService.getOrderAndCheck(bizOrderNo, payParam.getAppId());
PayTrade trade = payAssistService.getOrderAndCheck(bizOrderNo);
return this.payHandle(payParam, trade);
} finally {
lockTemplate.releaseLock(lock);

View File

@@ -52,18 +52,18 @@ public class PaySyncService {
}
PayTrade trade = null;
if (StrUtil.isNotBlank(param.getOrderNo())) {
trade = payTradeManager.findByTradeNo(param.getOrderNo(), param.getAppId()).orElse(null);
trade = payTradeManager.findByTradeNo(param.getOrderNo()).orElse(null);
}
if (Objects.isNull(trade) && Objects.nonNull(param.getBizOrderNo())) {
PayNormalOrder normalOrder = payNormalOrderManager.findByBizOrderNo(
param.getBizOrderNo(), param.getAppId()).orElse(null);
param.getBizOrderNo()).orElse(null);
if (Objects.nonNull(normalOrder)) {
trade = payTradeManager.findByContainerId(normalOrder.getId(), param.getAppId())
trade = payTradeManager.findByContainerId(normalOrder.getId())
.orElse(null);
}
}
if (Objects.isNull(trade) && StrUtil.isNotBlank(param.getOutOrderNo())) {
trade = payTradeManager.findByOutOrderNo(param.getOutOrderNo(), param.getAppId())
trade = payTradeManager.findByOutOrderNo(param.getOutOrderNo())
.orElse(null);
}
if (Objects.isNull(trade)) {

View File

@@ -1,10 +1,13 @@
package org.dromara.daxpay.payment.merchant.entity.appinfo;
import org.dromara.daxpay.platform.common.mybatisplus.function.ToResult;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppBaseEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import org.dromara.daxpay.payment.merchant.convert.appinfo.MchAppInfoConvert;
import org.dromara.daxpay.platform.core.enums.merchant.MchAppStatusEnum;
import org.dromara.daxpay.payment.merchant.result.appinfo.MchAppInfoResult;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -18,7 +21,11 @@ import lombok.experimental.FieldNameConstants;
@FieldNameConstants
@Accessors(chain = true)
@TableName("mch_app_info")
public class MchAppInfo extends MchAppBaseEntity implements ToResult<MchAppInfoResult> {
public class MchAppInfo extends MchBaseEntity implements ToResult<MchAppInfoResult> {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
/// 应用名称
private String appName;

View File

@@ -1,10 +1,13 @@
package org.dromara.daxpay.payment.merchant.entity.route.strategy;
import org.dromara.daxpay.payment.common.entity.merchant.MchAppBaseEntity;
import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity;
import org.dromara.daxpay.payment.merchant.convert.route.strategy.PayRouteStrategyConvert;
import org.dromara.daxpay.payment.merchant.result.route.strategy.PayRouteStrategyResult;
import org.dromara.daxpay.platform.common.mybatisplus.function.ToResult;
import org.dromara.daxpay.platform.core.enums.pay.route.PayRouteModeEnum;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -16,7 +19,11 @@ import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@TableName("pay_route_strategy")
public class PayRouteStrategy extends MchAppBaseEntity implements ToResult<PayRouteStrategyResult> {
public class PayRouteStrategy extends MchBaseEntity implements ToResult<PayRouteStrategyResult> {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
private String appId;
/// 路由模式basic / scene
/// @see PayRouteModeEnum

View File

@@ -173,6 +173,14 @@ public class MchAppInfoService implements MchAppInfoAssistQueryService {
.collect(Collectors.toList());
}
/// 查询商户默认应用号
@Override
public String findDefaultAppId(String mchNo) {
return mchAppInfoManager.findDefaultByMchNo(mchNo)
.map(MchAppInfo::getAppId)
.orElseThrow(() -> new DataNotExistException("error.payment.merchant.defaultAppNotConfigured"));
}
/// 下拉列表, 不判断应用和商户的状态
public List<LabelValue> dropdown(String mchNo) {
if (clientCodeService.getClientCode().equals(ClientEnum.MERCHANT.getCode())) {